使用 Nginx 缓解 404 炸弹

使用 Nginx 缓解 404 炸弹

我遇到了 404 查询,这导致我的机器瘫痪。我几乎所有的页面都是 http 缓存的,而且我有一些基本的 Dos 保护措施

limit_conn_zone $http_x_forwarded_for zone=addr:10m;
limit_conn addr 8;

limit_req_zone $http_x_forwarded_for zone=one:10m rate=2r/s;
limit_req zone=one burst=50;

client_body_timeout 5s;
client_header_timeout 5s;
send_timeout 10s;

除了上述方法之外,我还能做些什么来防止这些 404 攻击?

答案1

limit_req设置后limit_connnginx您是否在虚拟主机中启用了它们?例如:

server {
    # ...
    location / {
        limit_req zone=one;
        limit_conn addr 10;

    # ...
    }
}

此外,fail2ban 是一个日志解析器,用于在防火墙 (iptables) 中自动创建动态规则。您可以在 fail2ban 中创建一个过滤器和操作,以过滤 404 的原始 IP 并在多次尝试后阻止它们,或者您可以过滤 limit_req 和 limit_conn 日志,以便您可以禁止这些 IP(阻止 404 客户端 IP 可能会导致一些不必要的阻止)。

vim /etc/fail2ban/jail.d/nginx.conf

复制此内容:

[nginx-req-limit]

enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10
  • findtime是发生时间(以秒为单位)maxretry,在本例中,它将在 10 分钟(600 秒)内发生 10 个事件后触发。
  • bantime是防火墙将 IP 列入黑名单的时间。同样以秒为单位。在本例中,它会阻止违规 IP 2 小时(7200 秒)。
  • logpath您在虚拟主机中配置的错误日志是nginx

确保jail.conf包含jail.d/*.conf引用并重新启动服务:

service fail2ban restart

这应该可以帮助您避免 DDoS 攻击。

另一个值得考虑的选项是使用上述评论中提到的 CDN。Cloudflare 有一个不错的免费版本,可以提供很大帮助,它有一个 Web 应用程序防火墙,可以阻止一些恶意机器人和其他东西。专业版/商业版有更多选项,但需要付费。

相关内容