我有一个网站,在过去的一个月里,每天的同一时间都会受到 DDOS 攻击,在花了一个月的时间研究和查明错误之后,我们制定了一个 bash 脚本,如果连接在一分钟内达到最大连接数 80+,则 IP 被禁止并放入 IPTABLES。
这种方法效果很好,持续了两天,我觉得我终于解决了这个问题。
但遗憾的是,现在该人发送了多个 IP,每个 IP 只有一个连接(查看此处的输出http://pastebin.com/7AJqBfJa)这将导致网站瘫痪,就像一个 IP 每分钟发送 150 个连接时的情况一样。
当然,这与防止 DDOS 完全不同,我正在寻求专家和任何愿意关心、能提供建议的人的帮助。目前,我不知道如何解决这个问题,任何帮助都将不胜感激。
答案1
正如 Niall 提到的,mod_evasive 在这种情况下非常有效,我最近使用它来阻止我的一个网站上遇到的非常类似的问题。它有助于解决您在单个 IP 上没有收到大量连接但确实看到服务器上出现不自然模式的情况。
就我而言,我也在博客中提到过这里然后,我安装了 mod_evasive 并使用以下设置对其进行了配置:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 100
DOSPageInterval 3
DOSSiteInterval 5
DOSBlockingPeriod 300
DOSLogDir "/var/log/httpd/modevasive/"
DOSEmailNotify [email protected]
</IfModule>
基本上,如果单个 IP 在 5 秒内请求同一资源(文件)3 次;或者在 5 秒内对任何文件点击 100 次;Apache 将拒绝对该文件的进一步请求。
如果您想增强此脚本;您可以在参数被命中时触发系统命令。就我而言,我将此命令添加到上面的配置中:
DOSSystemCommand "/usr/bin/sudo /usr/sbin/csf -td %s 3600"
这使得我的防火墙脑脊液封锁 IP 一小时。您可以轻松编写 iptables 脚本来执行相同操作,但 CSF 对我来说更简单。
无论如何,希望这能帮助你抓住 DDOS 攻击者!
答案2
你可以使用 iptables 来限制每个 IP 与服务的连接数,以缓解 DDoS 攻击,直到你的 iptables 脚本捕获它们
iptables -A INPUT -p tcp -m limit --limit 3/s --dport DESTINATIONPORT --limit-burst 10 -m state --state NEW -j ACCEPT
这会将新连接数限制为每秒 3 个,最大突发连接数为 10 个。
请务必根据你的需求进行微调,每秒 3 个连接数相当低,具体取决于你的服务器正在运行的流量
答案3
假设您正在运行 Apache,mod_evasive 可能会有用。