iptables 规则阻止 DDOS

iptables 规则阻止 DDOS

我的服务器正在遭受 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

几个问题:

  1. 使用状态防火墙来抵御 dDoS 攻击通常不是一个好主意:你允许攻击者在你的机器上分配状态(因此是内存),从而帮助了攻击者。状态模块应该被替换为类似--tcp-flags SYN SYN
  2. 最后-j DROP的是一个错误,它意味着丢弃所有低于阈值的数据包。它应该是,-j ACCEPT并且之后有一个 DROP 规则。(如果您没有看到效果,可能是因为您稍后有另一个 ACCEPT 规则,或者一般 ACCEPT 策略。)
  3. 我更喜欢 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

相关内容