我有一台 AWS 服务器,目前正通过 DNS 放大遭受 DDoS 攻击。我已为 VPC ACL 设置了 CloudWatch 日志,它记录了大量被拒绝的 DNS 流量。尽管这些流量被拒绝,但我的主服务器仍无法访问。
我在同一个 VPC 和子网上有一个辅助服务器,可以毫无问题地访问。
为什么我可以访问其中一个,但不能访问另一个?ACL 应该在子网级别过滤流量。因此,如果其中一个无法访问,则两个也应该无法访问,但事实并非如此。
那么如何缓解 AWS 上的 DNS 放大攻击?AWS 的管道肯定足够大。为什么 ACL 没有发挥作用?
答案1
我会添加一个缓存/DDOS 保护层,即 Cloudflare。他们过去曾阻止过对我的网站的大多数 DDOS 攻击。
答案2
我最终解决了这个问题。
实际上有几个问题。我只阻止了 UDP 端口 53(DNS),但结果发现还有其他端口受到攻击。由于我的服务器只是一个 Web 服务器,因此我能够阻止 ACL 中的所有 UDP 流量。这解决了攻击的一方面。
他们还用来自受感染 WordPress 安装的大型帖子请求来使我的 Web 服务器超载。我能够在 Nginx 配置中添加几行代码,以丢弃来自 WordPress 用户代理的请求并阻止大型帖子请求。
http
这些是我在Nginx 配置部分使用的设置
client_max_body_size 10k;
client_body_buffer_size 10k;
client_header_buffer_size 1k;
large_client_header_buffers 2 1k;
client_body_timeout 6;
client_header_timeout 6;
keepalive_timeout 5;
send_timeout 10;
然后在server
Nginx 配置部分,我为 WordPress 设置了一个 drop,并使用 wget 发起请求
if ($http_user_agent ~* (wordpress|wget)) {
return 403;
}
这些设置使得服务器更难关闭
我还使用 iptables 来限制传入的 http 连接
# Rate limit new connections to port 80
-A INPUT -p tcp -m recent --dport 80 -m state --state NEW --set
-A INPUT -p tcp -m recent --dport 80 -m state --state NEW --update --seconds 20 --hitcount 20 -j DROP
然后我使用 iptables 来限制 80 端口的最大同时连接数。
# Limit concurrent connections for a class B to port 80
-A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 16 --connlimit-saddr -j REJECT --reject-with tcp-reset
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
这些因素加在一起让我的服务器更难受到 DDoS 攻击。我现在使用多个前端服务器将代理请求反向发送到后端服务器。我设置了 DNS 轮询来公开多个 IP 地址。这最后一步增加了我在突破所有其他防御措施的攻击中可以处理的总带宽量。
到目前为止,其余的攻击还无法摧毁我的服务器。