1. iptables基本定义
|
Table (表名) |
Explanation (注释) |
|
nat |
nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行 的。属于一个流的包只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自 动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就 是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地 址。POSTROUTING链在包就要离开防火墙之前改变其源地址。 |
|
mangle |
这个表主要用来mangle数据包。我们可以改变不同的包及包 头的内容,比如 TTL,TOS或MARK。 注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙 内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT和 FORWARD。PREROUTING在包进入防火墙之后、路由判断之前改变 包,POSTROUTING是在所有路由判断之后。 OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地 之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判 断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地 址。NAT是在nat表中操作的。 |
|
filter |
filter表是专门过滤包 的,内建三个链,可以毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。 |
下图可以帮助理解各个表及其链在iptables防火墙中的作用:
关于iptables的更多解释, 推荐看下iptables 指南 1.1.19
2. iptables在路由器上的应用
2.0 小结
路由器上iptables相关的功能大概有如下几方面的应用。
ACL:限制LAN/WAN侧PC访问CPE上的应用程序如telnet、ssh、ping
FIREWALL:阻止Internet到CPE上的恶意报文
(Ip/Mac/Url)Filter:限制LAN侧PC对Internet的访问范围
VirtualServer:允许LAN侧某台终端上的端口暴露于Internet,即使Internet能主动访问到LAN侧某PC上的某应用程序
DMZ:使LAN侧某台终端完全暴露于Internet,即使Internet发往CPE的报文完全丢给LAN侧某台终端设备
SNAT:一般wan interface页面会有开/关NAT的选项,其实就是把LAN侧PC发往WAN侧的报文的源IP地址改为CPE上的wan接口的IP地址然后再把报文丢到Internet
另外,在做相应测试时,可能需要用到iperf工具的如下两条指令
iperf -s -p 1122 -i 1; (run lan pc; 1122 is Internal Port;)
iperf -c 192.168.2.5 -p 2211 -t 10 -i 1; (run wan pc; 2211 is External Port; 192.168.2.5 is ipaddress of wan interface on cpe.)
总结了下这些规则的总体设计:
1 1.1.Local Area Network configuration 2 LAN_IP="192.168.1.1/32" 3 LAN_IFACE="br0" 4 EXT_IP="20.0.0.20/32" 5 EXT_IFACE="eth4" 6 1.2.init 7 iptables -t filter -F 8 iptables -t nat -F 9 iptables -t mangle -F 10 iptables -t filter -X 11 iptables -t nat -X 12 iptables -t mangle -X 13 1.3.Set Policies 14 iptables -t filter -P INPUT ACCEPT 15 iptables -t filter -P OUTPUT ACCEPT 16 iptables -t filter -P FORWARD ACCEPT 17 iptables -t nat -P PREROUTING ACCEPT 18 iptables -t nat -P POSTROUTING ACCEPT 19 iptables -t mangle -P PREROUTING ACCEPT 20 iptables -t mangle -P INPUT ACCEPT 21 iptables -t mangle -P FORWARD ACCEPT 22 iptables -t mangle -P OUTPUT ACCEPT 23 iptables -t mangle -P POSTROUTING ACCEPT 24 1.4. 25 iptables -t filter -A INPUT -i eth4 -m state --state RELATED,ESTABLISHED -j ACCEPT 26 1.5. 27 iptables -t filter -N ACL_CHAIN 28 iptables -t filter -N ACL 29 iptables -t filter -A ACL -p tcp -m multiport --dports 80,443,23,22,21 -j ACL_CHAIN 30 iptables -t filter -A ACL -p udp -m multiport --dports 69,53 -j ACL_CHAIN 31 iptables -t filter -A ACL -p icmp -m icmp --icmp-type 8 -j ACL_CHAIN 32 iptables -t filter -A INPUT -j ACL ! -i lo 33 1.6. 34 iptables -t filter -N DOS_FW 35 iptables -t filter -N FIREWALL 36 iptables -t filter -A FIREWALL -i eth4 -j DOS_FW 37 iptables -t filter -A INPUT -j FIREWALL 38 1.7. 39 iptables -t filter -N FOR_IPFILTER 40 iptables -t filter -A FORWARD -j FOR_IPFILTER 41 1.8. 42 iptables -t filter -N FOR_VRTSRV 43 iptables -t filter -A FORWARD -i br0 -j FOR_VRTSRV 44 iptables -t nat -N PRE_VRTSRV 45 iptables -t nat -A PREROUTING -j PRE_VRTSRV 46 iptables -t nat -N POST_VRTSRV 47 iptables -t nat -A POSTROUTING -j POST_VRTSRV 48 1.9. 49 iptables -t nat -N PRE_DMZ 50 iptables -t nat -A PREROUTING -j PRE_DMZ 51 1.10 52 iptables -t mangle -A POSTROUTING ! -s 20.0.0.20/32 -o eth4 -j MASQUERAD 53 54 2. 55 2.1 ACL Section 56 # 80-HTTP(TCP) 443-HTTPS(TCP) 23-TELNET(TCP) 22-SSH(TCP) 21-FTP(TCP) 57 # 69-TFTP(UDP) 53-DNS(UDP) 58 # ICMP8(PING) 59 iptables -t filter -A ACL_CHAIN -i br0 -p tcp -m multiport --dports 80,443 -m range --src-range 192.168.1.100-192.168.1.150 -j RETURN 60 iptables -t filter -A ACL_CHAIN -i eth4 -p icmp -m icmp --icmp-type 8 -j RETURN 61 iptables -t filter -A ACL_CHAIN -j DROP 62 2.2 FIREWALL Section 63 # SYN flood attack 64 # SYN/RST attack 65 # SYN/FIN attack 66 # FIN/URG/PSH attack 67 # Xmas attack 68 # Null scanning attack 69 # Ping flood/Ping of Death attack 70 iptables -t filter -A DOS_FW -p tcp -m state --state NEW -m limit 15/sec --limit-burst 30 -j RETURN 71 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "ATT:RST:" --log-level 7 72 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP 73 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "ATT:FIN:" --log-level 7 74 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP 75 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,URG,PSH -j LOG --log-prefix "ATT:FinUrgPsh:" --log-level 7 76 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,URG,PSH -j DROP 77 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j LOG --log-prefix "ATT:Xmas:" --log-level 7 78 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP 79 iptables -t filter -A DOS_FW -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "ATT:Xmas:" --log-level 7 80 iptables -t filter -A DOS_FW -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP 81 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j LOG --log-prefix "ATT:NullScan:" --log-level 7 82 iptables -t filter -A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP 83 iptables -t filter -A DOS_FW -p icmp -m icmp --icmp-type 8 -m limit --limit 10/sec --limit-burst 50 -j RETURN 84 iptables -t filter -A DOS_FW -p icmp -m icmp --icmp-type 0 -m limit --limit 10/sec --limit-burst 50 -j RETURN 85 iptables -t filter -A DOS_FW -p icmp -j LOG --log-prefix "ATT:PING:" --log-level 7 86 iptables -t filter -A DOS_FW -j DROP 87 2.3 Ip Filter 88 iptables -t filter -A FOR_IPFILTER -s 192.168.1.0/24 -d 7.7.7.0/24 -p tcp -m tcp --sport 1100 --dport 7777 -j ACCEPT 89 iptables -t filter -A FOR_IPFILTER -s 192.168.1.0/24 -d 8.8.8.0/24 -p icmp -j DROP 90 iptables -t filter -A FOR_IPFILTER -j ACCEPT 91 2.4 Virtual Server 92 iptables -t filter -A FOR_VRTSRV -d 192.168.1.2/32 -i eth4 ! -o eth4 -p tcp -m tcp --dport 69 -j ACCEPT 93 iptables -t nat -A PRE_VRTSRV -d 20.0.0.20/32 -i eth4 -p tcp -m tcp --dport 6969 -j DNAT --to-destination 192.168.1.2:69 94 iptables -t nat -A POST_VRTSRV -d 192.168.1.2/32 -p tcp -m tcp --dport 69 -j SNAT --to-source 192.168.1.1 95 2.5 DMZ 96 iptables -t nat -A PRE_DMZ -i eth4 -j DNAT --to-destination 192.168.1.100