如何使用iptables来实现NAT:
一、Iptables 的使用语法
在使用iptables的NAT功能时,我们必须在每一条规则中使用"-t nat"显示的指明使用nat表。然后使用以下的选项::
1. 对规则的操作
加入(append) 一个新规则到一个链 (-A)的最后。
在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。
在链内某个位置替换(replace) 一条规则 (-R)。
在链内某个位置删除(delete) 一条规则 (-D)。
删除(delete) 链内第一条规则 (-D)。
2. 指定源地址和目的地址
通过--source/--src/-s来指定源地址(这里的/表示或者的意思,下同),通过--destination/--dst/-s来指定目的地址。可以使用以下四中方法来指定ip地址:
a. 使用完整的域名,如“www.linuxaid.com.cn”;
b. 使用ip地址,如“192.168.1.1”;
c. 用x.x.x.x/x.x.x.x指定一个网络地址,如“192.168.1.0/255.255.255.0”;
d. 用x.x.x.x/x指定一个网络地址,如“192.168.1.0/24”这里的24表明了子网掩码的有效位数,这是 UNIX环境中通常使用的表示方法。
缺省的子网掩码数是32,也就是说指定192.168.1.1等效于192.168.1.1/32。
3. 指定网络接口
可以使用--in-interface/-i或--out-interface/-o来指定网络接口。从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。
4. 指定协议及端口
可以通过--protocol/-p选项来指定协议,如果是udp和tcp协议,还可--source-port/--sport和 --destination-port/--dport来指明端口。
#p#
二、iptabls的使用实例:
假如有一个广域网的ip地址为a.b.c.d 网关a.b.c.x 掩码 255.255.255.252
局域网ip地址为192.168.0.1-192.168.0.255 网关 192.168.0.1
软件环境为:Linux7.2 选择server安装
指定eth0:a.b.c.d eth1:192.168.0.1
添加路油表
- vi /etc/sysconfig/static-routes
- etho net a.b.c.d netmask 255.255.255.252 gw a.b.c.x
- eth1 net 192.168.0.1netmask 255.255.255.0 gw 192.168.0.1
指定网关
- vi /etc/sysconfig/network
- NETWORKING=yes
- GATEWAYDEV=eth0
- GATEWAY=a.b.c.x
- HOSTNAME=(主机名字)
起用路由
- vi /etc/sysctl.conf
- net.ipv4.ip_forward=1
- net.ipv4.conf.default.rp_filter=1
- kernel.core_uses_pid=1
- kernel.sysrq=0
配置iptables的脚本
建立rc.fw
- #for this to run iptables firewall
- !/bin/sh
- /sbin/modprobe ip_tables
- /sbin/modprobe ip_nat_ftp
- /sbin/modprobe ip_conntrack_ftp
- /sbin/iptables -F
- /sbin/iptables -F -t nat
- /sbin/iptables -X
- /sbin/iptables -Z
- echo"1">/proc/sys/net/ipv4/ip_forward
- /sbin/iptables -P INPUT ACCEPT
- /sbin/iptables -P FORWARD ACCEPT
- /sbin/iptables -P OUTPUT ACCEPT
- iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
上面这些是没有任何限制的iptables要想有些安全限制可以自行
新的联接
#p#
三、端口的转发
假如内部有一个www 服务器 一个ftp服务器
地址分别是192.168.0.8(www)
192.168.0.9(ftp)
在上面的脚本里最后添加
- iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 –j DNAT --to 192.168.0.8:80
- iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.0.9:21
附录:
-p 指定协议(--protocol)
--dport 指明端口(--source-port/--sport和 --destination-port)
-i 或者-o 指定网络接口(PREROUTING链用-i POSTROUTING 用-o)
-s 指明源地址(--source/--src/源地址destination/--dst/目的地址)
-A 加入一个新规则到一个链(一般写到最后面)(append)
-I 在链内某个位置插入(insert)一般最后面
-R 在链内某个位置替换一条规则
-D 删除链内第一条规则(delete)
-d 指明目的地址
下面是一个iptable的脚本没有安全性能:
- touch /var/lock/subsys/local
- #for this to run iptables firewall
- !/bin/sh
- /sbin/modprobe ip_tables
- /sbin/modprobe ip_nat_ftp
- /sbin/modprobe ip_conntrack_ftp
- /sbin/iptables -F
- /sbin/iptables -F -t nat
- /sbin/iptables -X
- /sbin/iptables -Z
- /sbin/iptables -P INPUT ACCEPT
- /sbin/iptables -P FORWARD ACCEPT
- /sbin/iptables -P OUTPUT ACCEPT
- echo"1">/proc/sys/net/ipv4/ip_forward
- /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- /sbin/iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
【编辑推荐】