Linux iptables之TCP filter分析--tcp-flags --fragment简单分析

来源:互联网 发布:刑天seo怎么样 编辑:程序博客网 时间:2024/05/24 05:42

Iptables可通过匹配TCP的特定标志而设定更加严谨的防火墙规则,tcp-flags参数使用如下:

1
2
3
4
5
6
-p tcp --tcp-flags
#匹配指定的TCP标记,有两个参数列表,列表内部用逗号为分隔符,两个列表之间用空格分开。
#第一个列表用作参数检查,第二个列表用作参数匹配。
#可用以下标志:
SYN、ACK、FIN、RST 、URG、PSH、ALL、NONE
#ALL是指选定所有的标记,NONE是指未选定任何标记。
1
2
3
4
--syn
#http://www.haiyun.me
#SYN标志设置为1,其它标志未设置,相当于:
-p tcp --tcp-flags ALL SYN

很多人在使用tcp-flags匹配时遇到以下错误:

1
iptables v1.4.6: --tcp-flags requires two args.

原因是只定义了参数检查,未设置参数匹配,ROS下使用一组参数就可以了,正确使用tcp-flags应用示例:
防止Xmas扫描:

1
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

防止TCP Null扫描:

1
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

拒绝TCP标记为SYN/ACK但连接状态为NEW的数据包,防止ACK欺骗。

1
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP

至于--fragment分片匹配规则
首先为我们先来看看这个MTU参数,说这个参数也不是很复杂,在一些网络接口上都会用它进行数据包的大小限制。
这个参数定义了可以通过的数据包的最大尺寸。如果一个数据包大于这个参数值时,系统会将其划分成更小的数据包(称为ip碎片)来传输,而接受方则对这些ip碎片再进行重组以还原整个包。这样会导致一个问题:当系统将大数据包划分成ip碎片传输时,第一个碎片含有完整的包头信息(IP+TCP、UDP和ICMP),但是后续的碎片只有包头的部分信息(如源地址、目的地址)。因此,检查后面的ip碎片的头部(象有TCP、UDP和ICMP一样)是不可能的。假如有这样的一条规则:

#iptables -I FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 --destination-port 80 -j ACCEPT

并且这时的FORWARD的policy为DROP时,系统只会让第一个ip碎片通过,而余下的碎片因为包头信息不完整而无法通过。可以通过—fragment/-f 选项来指定第二个及以后的ip碎片解决上述问题。

#iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT

注意现在有许多进行ip碎片攻击的实例,如DoS攻击,因此允许ip碎片通过是有安全隐患的,对于这一点可以采用iptables的匹配扩展来进行限制

0 0
原创粉丝点击