任何人都可以解释以下规则:
-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种方式的握手:
(来源: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位置1,但是没有其他任何一个。使用多个标志是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