六、 iptables命令面面观
外网:eth0 123.45.67.89
内网:eth1 10.0.0.1 LAN上的计算机IP地址都在10.0.0.2~~10.0.0.254之间。
(1)一个rc.local的例子,在rc.local中加入如下命令
echo 1 > /proc/sys/net/ipv4/ip_forward #启动IP转发
echo 1 > /proc/sys/net/ipv4/ip_dynaddr #启动动态IP地址
#Policies(Default)设置默认策略为拒绝
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#User-defined chain for ACCEPTed TCP packets用户自定义链,链名为“okay”
iptables -N okay
iptables -A okay –p TCP - - syn –j ACCEPT
iptables -A okay –p TCP -m state - -state ESTABLISHED,RELATED –j ACCEPT
iptables -A okay –p TCP –j DROP
#INPUT chain rules
# Rules for incoming packets from LAN
iptables -A INPUT -p ALL -i eth1 -s 10.0.0.0/8 -j ACCEPT #LAN中的地址可接受
iptables -A INPUT -p ALL -i lo -s 127.0.0.1 -j ACCEPT #允许接受本身的数据包
iptables -A INPUT -p ALL -i lo -s 10.0.0.1 -j ACCEPT #允许接受本身的数据包
iptables -A INPUT -p ALL -i lo -s 123.45.67.89 -j ACCEPT #允许接受本身的数据包
iptables -A INPUT -p ALL -i eth1 –d 10.0.0.255 -j ACCEPT #允许接受LAN内的广播包
# Rules for incoming packets from the Internet
# packets for established connections
iptables -A INPUT -p ALL -d 123.45.67.89 -m state –state ESTABLISHED,RELATED –j ACCEPT
# TCP rules 由okay链处理
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 21 –j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 22 –j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 80 –j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 113 –j okay
# UDP rules 定义开放的UDP端口
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 53 –j ACCEPT
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 2074 –j ACCEPT
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 4000 –j ACCEPT
# ICMP rules
iptables -A INPUT -p ICMP -i eth0 -s 0/0 --destination-port 8 –j ACCEPT
iptables -A INPUT -p ICMP -i eth0 -s 0/0 --destination-port 11 –j ACCEPT
# FORWARD chain rules
#Accept the packets we want to forward
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# OUTPUT chain rules
# Only output packets with local addresses (no spoofing)
iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 10.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 123.45.67.89 -j ACCEPT
# POSTROUTING chain rules 网关的IP伪装
iptables -t nat –A POSTROUTING –o eth0 –j SNAT –to-source 123.45.67.89
(2)网关的IP伪装:静态地址 使用SNAT,动态地址(拨号) 使用MASQUERADE
例子:
MASQUERADE必须提供接口名(eth0,ppp0等)来指明路径,好像静态地址也可以使用MASQUERADE:
iptables -t nat -A POSTROUTING –o eth0 –j MASQUERADE
SNAT也必须指明实际的IP如下所示:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 12.12.12.12
(3)端口转发
例子:将对防火墙计算机(-d 15.15.15.15)的所有Web服务重定向到LAN上的某台计算机(10.0.0.25)
iptables -t nat -A PREROUTING -p tcp -d 15.15.15.15 –dprot 80 –j DNAT –to-destination 10.0.0.25