使用 iptables 在一分钟内建立 N 个连接后永久禁止

使用 iptables 在一分钟内建立 N 个连接后永久禁止

我正在尝试制定一些可以实现此目的的 iptables 规则:

如果源 IP 在一分钟内尝试连接 3 次或更多,则禁止该 IP,直到另行通知。

我对 iptables 不太熟悉,而且这比我想象的要难实现。我发​​现的大多数示例只阻塞 60 秒。如果有人能告诉我如何做到这一点,我将不胜感激。

答案1

您可以使用 fail2ban 自动管理您的 iptables。它会监控日志文件并根据您可以配置的标准采取行动。默认情况下,它可以处理多种不同的连接类型。使用这个框架,我相信您可以阻止任何您想要的行为。

https://www.fail2ban.org/wiki/index.php/Main_Page

摘自自述文件:

Fail2Ban 会扫描日志文件(如 [file:///var/log/pwdfail pwdfail])并禁止密码输入次数过多的 IP 地址。它会更新防火墙规则以拒绝该 IP 地址。这些规则可由用户定义。Fail2Ban 可以读取多个日志文件(如 sshd 或 Apache Web 服务器日志文件)。此 README 是 Fail2Ban 的简要介绍。项目网站上提供了更多文档、常见问题解答和操作方法。

答案2

看起来 ipset 模块可能是完成我想要做的事情的最直接的方法。不过它确实需要先创建一个 ipset。

这是我所想到的并且似乎有效:

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j SET --add-set blocked src

iptables -A INPUT -p tcp --dport 80 -m set --match-set blocked src -j DROP

答案3

有一个 --hitcount 选项,用于指定失败尝试的次数。我建议您在测试计算机或其他计算机上测试此操作,而不是通过 SSH 连接到远程服务器,因为您可能会被锁定。除非您有 KVM 控制台访问权限。

这里给出了类似的答案: 在 CentOS 中自动拒绝黑客攻击?

如需更多秒数,只需指定您的值即可。

需要始终牢记的是,DROP 规则必须位于规则的末尾。通常,iptables 规则文件位于 /etc/sysconfig/iptables

对于其他选项,您可以检查https://linux.die.net/man/8/iptables。您几乎可以在 linux.die.net 页面上找到任何内容。其中包括 linux 手册页等。

要检查被禁止的 IP 列表,您可以运行:iptables -L INPUT -v -n 查看更多: https://www.cyberciti.biz/faq/linux-howto-check-ip-blocked-against-iptables/

我个人认为这个指南很有用:https://linuxacademy.com/howtoguides/posts/show/topic/15473-introduction-to-iptables

相关内容