我正在尝试弄清楚如何保护我的服务器免受僵尸网络的攻击(我只是猜测)
每天,越来越多的 IP 用无效请求填满我的应用程序日志(例如:对应该只接收 POST 请求的 url 发出 GET 请求)
首先,我考虑根据以下两个因素记录所有这些 IP:a)它们发出的无效请求和 b)单位时间内的请求量,然后运行一个 cron 来抓取这些 IP,并向 iptables 添加规则以丢弃它们的数据包。
但读了一些相关内容后,我发现这种方法会引起很多问题:
- 被禁止的 IP 可能是来自有效用户,他们的 PC 被感染了,我不想永久禁止他们。我认为禁止他们一天就足够了。有没有办法给规则设置到期时间?或者我必须保存“基本”iptables 配置,然后在一天结束时删除所有规则并重新加载该基本配置?
- 这些 IP 可能完全是假的。我不知道这是可能的 =s。如何保护服务器免受此类攻击?
- 如果我们添加太多规则,iptables 可能会降低服务器速度。有人提到,无需向 iptables 添加规则即可禁止 IP。这可能吗?有没有可扩展的方法来禁止大量 IP?
有什么想法吗?
答案1
这是所有联网计算机都会遇到的互联网噪音的一部分,不幸的是,我们生活在一个不完美的世界。试图阻止它就像玩猫捉老鼠的游戏。您可以使用 Iptables 速率限制器来限制来自 IP 的传入请求数量,但仅此而已。
相反,要确保您的应用程序和操作系统是安全的。尽可能及时更新安全补丁并遵循安全编码指南。还要正确配置服务,最大的安全漏洞之一就是错误配置的服务。
答案2
不必担心 IP 禁止规则 - 正如您所怀疑的,源 IP 可以被伪造,自动禁止只会对您的主机创建另一个拒绝服务攻击媒介。
在大多数情况下,您可以忽略无效请求 - 这些是蠕虫或自动脚本,它们盲目地试图利用可能存在也可能不存在的安全漏洞。请遵循 Sameer 的建议,修补您的系统和应用程序(尤其是您的 PHP 应用程序,因为它们通常非常错误并且经常被利用)。仅当流量影响服务器性能时才采取行动(例如,大量非合法请求正在使用大量服务器资源)。即使是大量的 iptables 规则也几乎不会对现代硬件造成任何负载。
答案3
如果您想使用 iptables 进行 IP 禁止,请使用 fail2ban。它将监视您的日志文件以查找不良 IP,并在规定的时间内阻止它们。
查看对 Apache 使用类似 mod_security 的第 7 层防火墙。
最近我为一位客户解决了一系列重大性能问题。他们有超过 7000 条 iptables 规则来将各种 IP 列入黑名单。删除这些规则解决了重大网络性能问题。看来 iptables 无法处理超过几千条规则。
为不需要的主机创建黑洞路由可能效果更好。这可能意味着会有很多额外的小路由,但 Linux 可以很好地处理这种情况。