我试图弄清楚这些 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
我一直试图自己用谷歌搜索这个问题,但我并不完全确定。
据我了解,这些规则适用于使用TCP特定端口上的协议(本例中为 HTTP 和 HTTPS)并拒绝在特定时间段内发送超过 20 个的 IP 地址。但我不明白以下属性到底起什么作用,也不明白 REJECT 实际上是怎样工作的。
- --syn
- –connlimit-高于 20
- –connlimit-mask 16
- REJECT --reject-使用 tcp-reset
限制适用于什么时间范围?这些 IP 地址是否会被阻止?如果会,会阻止多长时间?
答案1
以下是上述 iptables 规则中那些参数的含义。
--syn
这实际上是 的缩写--tcp-flags SYN,RST,ACK,FIN SYN
,表示对于此 iptables 规则检查的数据包,应检查 TCP 标志 SYN、RST、ACK 和 FIN。只有设置了 TCP 标志 SYN 的数据包才应匹配。
--connlimit-above 20
这实际上是论点的一部分-m connlimit --connlimit-above 20
,表示将数据包与连接限制相匹配。如果数据包与超过前 20 个连接的任何连接相关,则丢弃数据包。
--connlimit-mask 16
这允许您限制允许数据包来自哪些子网掩码。此参数表示仅将每个 255.255.0.0 子网的连接数限制为 16 个。因此,通过结合使用这两个参数,您可以控制一次可以从 255.255.0.0 子网建立多少个连接。
REJECT --reject-with tcp-reset
这表示任何匹配的数据包都应被丢弃。通过告诉 iptables 使用 tcp-reset 丢弃数据包,您是在说原始源必须重新开始对话(并且如果他们发出相同的请求,它也将被拒绝)。
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html
答案2
由于没有声誉,因此无法添加评论,但有一条注释需要添加:
--connlimit-above 16
意思是,如果来自同一 IP 地址的现有 ESTABLISHED 连接数超过 16 个。