我试图弄清楚这些 iptables 规则实际上做了什么,但我不是很有经验。
这是两条规则:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 16 -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 20 --connlimit-mask 16 -j REJECT --reject-with tcp-reset
我一直在尝试为自己搜索此内容,但我并不完全确定。
据我了解,这些规则适用于在特定端口(本例中为 HTTP 和 HTTPS)上使用TCP协议与服务器的传入连接,并拒绝在特定时间段内发送超过 20 个的 IP 地址。但我不明白以下属性到底是做什么的,或者 REJECT 是如何工作的。
- --syn
- --connlimit-20 以上
- --connlimit-掩码 16
- REJECT --reject-with tcp-reset
限制适用的时间范围是什么?这些 IP 地址会被阻止,如果是,会持续多长时间?
以下是上述 iptables 规则中这些参数的含义。
这实际上是缩写
--tcp-flags SYN,RST,ACK,FIN SYN
,表示对于这个 iptables 规则检查的数据包,应该检查 TCP 标志 SYN、RST、ACK 和 FIN。只有设置了 TCP 标志 SYN 的数据包才应该匹配。这实际上是参数的一部分,
-m connlimit --connlimit-above 20
并表示将数据包与连接限制匹配。如果数据包与超过前 20 个连接的任何连接相关,则丢弃这些数据包。这允许您限制将允许来自哪些子网掩码的数据包。此参数转换为仅将每个 255.255.0.0 子网的连接数限制为 16。因此,通过将两者结合使用,您可以控制一次可以从 255.255.0.0 子网建立多少连接。
这表示任何匹配的数据包都应该被丢弃。通过使用 tcp-reset 告诉 iptables 丢弃数据包,您是在说原始源必须重新开始对话(如果它们发出相同的请求,它也会被拒绝)。
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html
http://ipset.netfilter.org/iptables-extensions.man.html