まず第一に、他の人が私の Web サイトのコンテンツをクロールすることに私は反対しません。私は必ずしも他の人のクロールを厳密に制限するわけではありませんが、一部の人々のクロールにはまったく利益がありません。彼らは 1 つのスクリプトまたは複数のスクリプトを使用します。サーバーのコンテンツを取得することは、DDO と何ら変わりません。
私のサーバーでは現在そのような状況が発生しています。一時停止せずに悪意のあるクロールが行われ、ログ分析に深刻な影響を及ぼし、サーバーの負荷も増加しました。
この動作を防ぐにはどうすればよいですか? nginx サーバーを使用していますが、私の知る限り、特定の IP に対してのみ deny
しか実行できませんが、拒否は今後もログに表示されますが、403 になります。さらに、手動による拒否は受動的すぎるため、特定の IP へのアクセス数が急激に増加したことを賢明に判断して、その IP を禁止できるでしょうか。
某草草2017-05-16 17:32:17
1. ngx_http_limit_conn_module は、単一 IP の接続数を制限するために使用できます
http://nginx.org/en/docs/http/ngx_htt...
2. ngx_http_limit_req_module を使用して、単一 IP の 1 秒あたりのリクエスト数を制限できます
http://nginx.org/en/docs/http/ngx_htt...
3. nginx_limit_speed_module を使用して IP 速度を制限できます
https://github.com/yaoweibin/nginx_li...
世界只因有你2017-05-16 17:32:17
主にfail2ban (http://www.fail2ban.org/)を使用した解決策も提供します。 failed2ban はログをスキャンすることで iptable の使用を禁止するかどうかを非同期に決定するため、元のシステムへの影響は比較的小さく、nginx の再設定は必要ありません。ただし、アクセス数が多すぎるかどうかはわかりません。
まず/etc/fail2ban/jail.conf
に
次に/etc/fail2ban/filter.d/nginx-bansniffer.conf
を見つけて、404の判定を
最後に fail2ban
サービスを再起動します。上記の設定では、120 秒ごとに 120 回以上のアクセスがある IP アドレスを 1 時間禁止します。
高洛峰2017-05-16 17:32:17
1. ユーザーエージェントに基づいてスパイダークローリングを防止します
リーリー2. オペレーティング システムのファイアウォールにルールを作成して、同じ IP への同時接続の数を制限します
Linux での iptables を例にとると、次の設定では、1 分間に同じ IP に対して最大 15 個の接続の確立が制限され、超過した接続は iptables によって破棄され、nginx に到達しません。
リーリー
ブラックリスト内の IP については、スクリプトを使用して iptables または nginx.conf に自動的に書き込み、数分間ブロックするか、許可されるアクセス頻度を減らします