レート制限が誤って設定されたボット

レート制限が誤って設定されたボット

定期的にスクレイピングされるロード バランサーの背後に 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

参照:nginx のチュートリアル

関連情報