我的服务器正在遭受 DDoS 攻击,我的 Apache 日志中的流量如下所示:
ip address - - [11/Apr/2013:01:01:04 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
ip address - - [11/Apr/2013:01:01:05 -0600] "POST / HTTP/1.1" 416 31 "-" "Microsoft Internet Explorer"
我该如何使用 IP 表来阻止这种情况?我正在使用:
-A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j DROP
但似乎没有任何作用。不过我想我需要一些类似的东西。
谢谢
答案1
我不确定如何在 iptables 中执行此操作,但我建议您查看 OSSEC,它会自动阻止重复违规者。您还可以查看 CloudFare,他们也有一个免费套餐,并且专门用于缓解 DDoS,因为您需要做的是丢弃流量前它会到达您。如果地址只有一个 IP 地址,我会永久删除它。
我修改了 iptable 规则这里, 看一看:
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 50 -j DROP
答案2
在没有看到所有的 iptables 和一些显示速率确实超出了您指定的限制的分析的情况下,不可能说出为什么会发生这种情况 - 例如,可能只是您在一个连接上收到了很多请求。
即使您不使用 keepalive,状态防火墙(单独使用)也不是预防 DOS 攻击的有效工具。流量整形会有所帮助 - 但很快就会变得非常复杂。有些 apache 模块支持最低带宽保证 - 这比内核 QOS 的配置简单得多。但我建议使用 fail2ban 来阻止导致问题的 IP 地址。
答案3
几个问题:
- 使用状态防火墙来抵御 dDoS 攻击通常不是一个好主意:你允许攻击者在你的机器上分配状态(因此是内存),从而帮助了攻击者。状态模块应该被替换为类似
--tcp-flags SYN SYN
- 最后
-j DROP
的是一个错误,它意味着丢弃所有低于阈值的数据包。它应该是,-j ACCEPT
并且之后有一个 DROP 规则。(如果您没有看到效果,可能是因为您稍后有另一个 ACCEPT 规则,或者一般 ACCEPT 策略。) - 我更喜欢 hashlimit 模块,它可以处理前缀,而不仅仅是单个 IP 地址
--tcp-flags SYN SYN -m hashlimit --hashlimit-name Web --hashlimit-above 3/second --hashlimit-mode srcip --hashlimit-burst 7 --hashlimit-srcmask 28 -j DROP