Nginxサーバーの応答を遅くする


8

サイトにスパマーがいる。私は 'deny'を使用して彼のIPをブロックすることができましたが、その後彼は彼のIPを変更するだけなので、猫とマウスを彼と一緒にプレイし続ける必要があります。

代わりに、nginxが彼のIPにもっとゆっくりと応答するように設定する方法があるかどうか知りたいです。

そうすれば、サイトが正しく機能していないと判断して、私を一人にしてしまうかもしれません。

ありがとう

回答:


7

Nginxディレクティブをlimit_rate使用すると、応答をレート制限する速度を指定できます。例:

location / {
  if ($slow) {
    limit_rate 4k;
  }
}

Nginxのドキュメントはこちらです。(ドキュメントから、バックエンドが決定を行い、クライアントをレート制限するようにNginxに要求できることがわかります)

この$slow変数セットを取得する方法は、構成によって異なります。最も簡単なのは、geoマッピングを介して設定することです。

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

「ジオ」マッピングは$slow、クライアントIPアドレスに基づく依存関係です。デフォルトは0で、クライアントIPアドレスが1.2.3.0/24サブネット内にある場合は1です。「geo」に関するNginxのドキュメントはこちら

「fail2ban」の使用は、このソリューション全体の合理的な進化です。「fail2ban」を使用して、異常なアクティビティを自動的に検出し、NginxのIPを収集してから、Nginxをリロードして、減速またはブロックする必要があるIPアドレスのリストを再読み取りできます。


5

問題のあるユーザーをだまして、まだ気付かれていないと思わせたい場合は、nginxのリクエスト制限モジュール(http://wiki.nginx.org/HttpLimitReqModule)を使用できます。

最初にリクエスト制限ゾーンを定義します。

http {
    limit_req_zone  $binary_remote_addr  zone=spammers:1m   rate=30r/m;
}

このゾーンは、リクエストを識別して1分あたり30(1/2秒)に制限するために、攻撃者のIPアドレスを使用します。ゾーンのメモリサイズは1 MiBに設定されていることに注意してください。これは、ゾーンが1 MiB /リクエストバケットあたり64バイト= 16384スパマーアドレスを処理できることを意味します(これは、私たちのケースでは多すぎるかもしれません)。必要に応じて、それぞれ調整してください。

次に、(悪、残念なことに)ifケースを使用してリミッターを介して犯罪者を実際にルーティングするディレクティブを定義します。

location / {
    if ($remote_addr = 1.2.3.4) {
        limit_req   zone=spammer  burst=5;
    }
}

サーバーのアクセスログで、作業の成果を確認できます。

攻撃者がIPを変更するたびに構成ファイルを更新する必要があるため(この場合、IPを増やすだけでなく、より多くのifケースを意味します)、このハックはうまく拡張できないことに注意してください。


1
また、私の回答とAlexander Azarovのgeoブロックを組み合わせて、よりスケーラブルにすることもできます。
Panagiotis PJ Papadomitsos

2

このスパマーに対処する最善の方法は、fail2banを適切にインストールして構成することです。Fail2banは、ログファイルのパターンを検索し、サイトをスパムするすべてのIPをブロックします。もちろん、適切なパターンを検索するように構成する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.