我遇到了 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_conn
nginx您是否在虚拟主机中启用了它们?例如:
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 应用程序防火墙,可以阻止一些恶意机器人和其他东西。专业版/商业版有更多选项,但需要付费。