iptables规则阻止DDOS

我的服务器正在进行ddos攻击,其中的apache日志中的stream量出现如下所示:

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 

但是这似乎没有做任何事情。 我认为我需要沿着这条线。

谢谢

我不知道如何在iptables中做到这一点,但我build议你看看OSSEC,它自动阻止重复的罪犯。 您还可以看看CloudFare,他们也有一个免费的软件包,专门用于减轻DDoS攻击,因为您需要做的就是在stream量到达之前将其丢弃。 如果地址只是一个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 

没有看到你所有的iptables和一些分析显示,速度确实超过了你指定的限制,这是不可能的,为什么会发生这种情况 – 例如,可能只是因为你通过一个连接获得大量的请求。

即使你没有使用Keepalive,一个有状态的防火墙(自己)也不是一个非常有效的防范DOS攻击的工具。 stream量整形有帮助 – 但这很快就变得非常复杂。 有一些支持最低带宽保证的apache模块 – 比内核QOSconfiguration简单得多。 但我会build议使用fail2ban来阻止导致问题的IP地址。

几个问题:

  1. 使用针对dDoS的状态防火墙通常是一个坏主意:通过允许攻击者在您的机器上分配状态(因此内存)来帮助攻击者。 状态模块应该被简单地replace为--tcp-flags SYN SYN
  2. 最后的-j DROP是一个错误,它意味着丢弃所有低于所有数据包的数据包。 它应该是-j ACCEPT然后有一个DROP规则。 (如果您没有看到任何效果,则可能是因为稍后有另一个“接受”规则或一般的“接受”策略。)
  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