谁能解释以下规则:
-A default-INPUT -p tcp -m tcp --sport 0:1023 ! --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A default-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
我想我添加它们是为了防止 SYN 泛滥,但我不确定。
-A default-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
现在执行下一个命令:
-A default-INPUT -p tcp -m tcp --sport 0:1023 ! --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
SYN ACK FIN RST URG PSH ALL NONE
。iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
SYN
设置了ACK, FIN and RST
标志且未设置标志的数据包。FIN,RST,ACK
所以我相信这个规则在设置和未设置标志时匹配SYN
;这是SYN设置的反向匹配并且FIN,RST,ACK
未设置。为了理解这个模块的使用,你需要对 TCP 段和它的 3 次握手有一点了解。
这是3次握手:
(来源:cisco.com)
。
因此,TCP 段具有控制连接状态的标志。
TCP 段:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
我认为这不能防止SYN
洪水,主要是因为我还没有尝试过。虽然这个会限制SYN
洪水:
# Limit the number of incoming tcp connections
# Interface 0 incoming syn-flood protection
iptables -N syn_flood
iptables -A INPUT -p tcp --syn -j syn_flood
iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A syn_flood -j DROP
取自:http ://www.cyberciti.biz/tips/howto-limit-linux-syn-attacks.html
第二行是防止无效数据包。
-A default-INPUT -p tcp -m tcp --sport 0:1023 ! --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
拒绝所有设置了 SYN 位和任何其他标志的入站数据包。如果这是服务器,这是有道理的。
任何合法的入站连接都会发送一个设置了 SYN 位的初始数据包,但不会发送其他数据包。使用多个标志是 tcp 堆栈上的攻击媒介,需要丢弃。
另外两个攻击是NULL,没有设置任何标志,而圣诞树,所有标志都设置了。为了防止这些,使用
# Protect against common attacks
# Block tcp packets that have no tcp flags set.
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Block tcp packets that have all tcp flags set.
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP