![阻止 AWS ELB 后面的流量](https://linux22.com/image/647798/%E9%98%BB%E6%AD%A2%20AWS%20ELB%20%E5%90%8E%E9%9D%A2%E7%9A%84%E6%B5%81%E9%87%8F.png)
我的 Web 服务器位于 ELB 后面,我想阻止来自某些特定用户代理的流量,这是一种 DDOS 攻击。Apache 始终将 ELB 的 IP 地址视为最终用户,因此我尝试了以下尝试:
- 在 ELB 级别阻止 IP 地址是不可能的,因为它有 20 个 IP 地址的限制,并且每次攻击时 IP 地址都会发生变化。
使用重写条件阻止访问,这种方法有效,但如果出现大量点击,则服务器负载将超过 100,并且所有 Apache 线程都会忙于处理大量 403,因此站点似乎无法处理合法请求。
RewriteCond %{HTTP_USER_AGENT} ^SomeThing RewriteRule ^(.*)$ - [F]
使用 mod_sec 进行阻止与提供 403 的功能相同,从而产生与上面的 #2 相同的效果。
使用 iptables 字符串模块阻止数据包:阻止具有特定用户代理的数据包。在这种情况下,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 这样的方法来获取第一个数据包的 IP 地址,user-agent: SomeThing
并阻止所有后续数据包,持续X-Forwarded-For: someIP
4-5 小时。我不想一直阻止 IP 地址,因为这些 IP 地址可以分配给一些合法用户,而这些用户将被阻止。
或者还有其他更好的方法来处理这次攻击?
答案1
或者,不要使用 ELB,而是使用 HAProxy 推出您自己的负载均衡器。
如果你已经使用AWS OpsWorks,您应该知道 AWS OpsWorks 支持基于 HAProxy 的负载均衡器层。
是的,准备 HAProxy 负载均衡器层比简单地启动 ELB 集要复杂得多,但最终它允许您完全自定义 iptables 设置,甚至使用 fail2ban。
编辑:如果配置 Chef 食谱不是你的强项 (:D),我有一个替代方案。我刚刚创建了一个名为haproxy-自动缩放,托管在 bitbucket 上,如果有人有兴趣查看的话。它快完成了。已经可以使用,但需要一些手动操作。
网址:https://bitbucket.org/pepoluan/haproxy-autoscaling/overview
答案2
在 iptables 中阻止 IP 是一个好计划,因为它将最大限度地减少对服务器的影响。但是 iptables 中的规则永远存在,因此您需要其他东西来管理黑名单的到期时间。 失败2ban似乎是解决这个问题的简单方法。另一个问题是源 IP 将是内部 ELB IP,因此您需要在 ELB 前面的安全组中进行过滤。