我的Web服务器在ELB后面,我想阻止来自某个DDOS攻击的特定用户代理的stream量。 Apache总是看到ELB的IP地址作为最终用户,所以我尝试了下面的尝试:
阻止访问使用重写条件,这个工程,但如果很多命中来,然后服务器负载超过100,所有的Apache线程忙于服务吨的403,所以网站出现合法的请求。
RewriteCond %{HTTP_USER_AGENT} ^SomeThing RewriteRule ^(.*)$ - [F]
用mod_sec块做同样的事情的服务403创造相同的效果上面#2。
使用iptables阻止数据包string模块:阻止具有特定用户代理的数据包。 在这种情况下,iptables发送DROP / REJECT给攻击者,apache没有得到连接现在已经死了的信号,并等待超时导致所有的apache线程超时使用,所以这个方法在这里没有用处。
iptables -I INPUT -i eth0 -p tcp --dport 80 -m string --algo bm --string 'user-agent: SomeThing' -j REJECT
我可以使用iptables的方式,它会从第一个包含user-agent: SomeThing数据包获取IP地址,并阻止所有下一个具有X-Forwarded-For: someIP数据包,时间为4-5小时。 我不想永远阻止IP地址阻塞,因为这些IP地址可以分配给一些合法的用户,并将被阻止。
或者还有其他更好的办法来处理这个攻击吗?
或者,不要使用ELB,而要使用HAProxy推出自己的负载均衡器。
如果您已经使用AWS OpsWorks部署您的网站,则应该知道AWS OpsWorks支持基于HAProxy的负载平衡器层 。
是的,准备一个HAProxy负载平衡器层比简单地启动一个ELB集要关键得多,但最终它可以让你完全自定义iptables设置,甚至使用fail2ban。
编辑:如果configuration厨师食谱不是你的菜(:D),我有一个select。 我刚刚创build了一个名为haproxy-autoscaling的FOSS项目,托pipe在bitbucket上,如果有人关心检查它。 已经快结束了 已经可用,但需要一些手动的manhandling。
url: https : //bitbucket.org/pepoluan/haproxy-autoscaling/overview
在iptables中阻止ip是一个很好的计划,因为它会减less对你的服务器的影响。 但iptables中的规则永远存在,所以你需要别的东西来pipe理黑名单的到期。 fail2ban似乎是这个简单的解决scheme。 另一个问题是,源IP将是内部ELB IP,因此您需要在ELB前面的安全组中进行过滤。
原始客户端IP由ELB在X-Forwarded-For报头中提供。
您可以在您的重写规则中使用X-Forwarded-For。