我正在寻找一种仅使用 IPTables 的解决方案,用于阻止在短时间内(例如 1 分钟)在某个端口上建立过多(例如超过 5 次)连接或重新连接的任何 IP 地址。被阻止的地址应锁定至少 30 分钟。
答案1
您给出的解决方案会降低新连接的速度,但源可以在 180 秒后恢复,甚至可能发现每 60 秒一次是可以的。如果您希望像您要求的那样将其禁止至少 30 分钟(也请查看 --rcheck 选项而不是 --update),您需要将源添加到另一个最近的源列表中,而不是丢弃数据包。因此它变成:
iptables -N BANNING
iptables -A BANNING -m recent --set --name BANNED --rsource
iptables -A INPUT -m recent --name BANNED --update --seconds 1800 --reap -j DROP
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j BANNING
答案2
感谢 Zoredache 向我指出了该链接。在网上搜索后,我在 Devon Hillard 的技术博客上找到了类似的解决方案。
这两个简单的规则就可以完成这项工作。
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
iptables -I INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP