我问了一个IT 安全 StackExchange 上的问题关于如何防范 DoS 攻击。其中一个解决方案是安装 Fail2Ban。
我与服务器管理员进行了交流,他们告诉我默认安装了 Fail2ban 来监视失败的 SSH 登录尝试。他们问我是否想让它监视服务器上的其他服务。
我应该通过 Fail2ban 监视哪些服务以防止 DoS 攻击?
这是否只是 HTTP 服务 - 在 x 时间内监视来自同一 IP 的多个请求?
其中一个攻击者似乎使用该命令创建了大量与 MySQL 数据库的连接sleep
。
答案1
Fail2Ban 最有效的方法是禁止“失败尝试”的 IP。因此,它实际上并不是监视实际 DoS 攻击的最合适工具。我设置了 Fail2Ban 来监视 Apache 的 httpd-error 日志文件。5 分钟内有 20 个“坏”请求的 IP 将被禁止 5 分钟。这可以减少脚本小子等,但实际上根本无法防止有针对性的攻击。
Mod_evasive 和 mod_security cam 有助于减少潜在的 DoS 载体,但如果不知道您的网站如何运作,我就无法提供任何灵丹妙药解决方案。
答案2
有一种相当普遍的误解,认为执行某种阻止可以防止或至少显著缓解 DoS 攻击。虽然这可能适用于简单粗暴的攻击,但事实是真正有效的 DoS 攻击不需要受攻击系统的响应。只需用入站数据包淹没系统即可实现预期效果,甚至这些数据包是什么都无关紧要。这有两个原因。
- 网络带宽可能因攻击而饱和
- 目标系统必须检查每个数据包才能知道如何处理,这会使其非常忙碌,无法处理任何“真实”流量。
由此可见,fail2ban 或者其他类似的措施最多只能对那些监听目标响应的攻击产生最小的影响。
答案3
我在服务器上配置了 fail2ban,在 5 次尝试失败后,对内部用户使用豁免 IP 范围的登录进行 15 分钟的封禁。我收到了很多来自中国的登录尝试,虽然没有针对性,但在凌晨 1 点到 6 点之间每天仍有大约 5-10k 次登录尝试。虽然它很有用,但它对 DoS 没有任何影响。
需要在网络边界的第 3 层或第 4 层处理 DoS 攻击。如果攻击到达服务器,您的服务器就会被关闭。
答案4
请参阅本文,了解如何使用 fail2ban 保护 Apache,包括针对 DoS 攻击的自定义规则https://komunity.komand.com/learn/article/server-administration/how-to-protect-ssh-and-apache-using-fail2ban-on-ubuntu-linux/