![レート制限が誤って設定されたボット](https://rvso.com/image/658338/%E3%83%AC%E3%83%BC%E3%83%88%E5%88%B6%E9%99%90%E3%81%8C%E8%AA%A4%E3%81%A3%E3%81%A6%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%9C%E3%83%83%E3%83%88.png)
定期的にスクレイピングされるロード バランサーの背後に Nginx / PHP-FPM があります。スクレイパーの多くは、アプリケーションの 404 ページをかなり激しく攻撃します。
Nginxで、おそらくレート制限モジュールまたは、1 分あたり 100 件を超えるリクエストで 404 エラーが発生した後に x-forward-for に基づいてすべてのトラフィックをブロックする別のモジュールはありますか?
私が見つけた文書は制限要求モジュールページの戻りステータスではなくリソースに基づいているようです。
トラフィックが十分にあるため、各ノードは十分な 404 トラフィックを受信しており、誰をまとめてブロックするかについて通信する必要はありません。
答え1
確かに、limit_req_zone モジュールを使用して nginx でこれを実行できます。
nginx.conf でゾーンを設定します:
limit_req_zone $binary_remote_addr zone=one:1000m rate=100r/m;
X_Forwarded_For
の代わりにtooを使うこともできますbinary_remote_addr
。
サイト構成の場所ブロックでゾーンを参照するだけです:
limit_req zone=one burst=10 nodelay;
ドキュメント: nginx.org/en/docs/http/ngx_http_limit_req_module.html を参照してください。
答え2
fail2banを使用し、nginxで次のjailを使用して、誤って設定されたボットのレート制限を行うことができます。
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local の一番下にこれを追加します
[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