Fail2banとnginx:特定のURLへの不要なトラフィックをブロックする

良い一日!



数日前、私のサイトの1つで、パスワードの推測による疑わしいアクティビティに気付きました。 これは、数百万のメールボックスとパスワードが含まれるファイルがネットワークに到達したときに発生しました。 iptablesで複数のアドレスを禁止した後、攻撃者は多数のアドレスからパスワードを取得し始め、それらを手動で禁止することはすでに不便になりました。 この問題がどのように解決されたかは、カットの下で説明します。



おそらく、一部の人々にとって「真実」について以下に説明しますが、私にとっては、このようなfail2ban機能は新しく、本当に役立ちました。 次の「方法」はredhat-based-linuxに有効ですが、どのディストリビューションにも簡単に適用できます。



rpmforgeが接続されていない場合は、接続します。



wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt rpm -i rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
      
      





nginx limit_reqモジュールを事前設定します。



http {}セクションに追加します

 limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
      
      





ゾーンの特定のパラメーターを個別に選択します;それらはモジュールのヘルプで説明されています。



サーバーの{}セクションで、悪意のあるトラフィックが到着するURLをキャプチャする場所を追加します(私の場合、これは/ auth /です):

 location /auth/ { limit_req zone=one burst=10 nodelay; try_files $uri /index.php?q=$uri&$args; }
      
      





または、たとえば、ワードプレスの場合:

 location = /wp-login.php { limit_req zone=one burst=10 nodelay; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; }
      
      





どこでも間違いを犯していないことを確認し、nginxを再起動します。

 nginx -t && service nginx restart
      
      





すべてが正しく構成されていて、悪意のあるトラフィックがまだサーバーに到着している場合、次のエントリがnignxエラーログに書き込まれます。

 2014/09/11 02:15:11 [error] 17515#0: *1977466 limiting requests, excess: 10.540 by zone "one", client: 93.170.112.10, server: , request: "GET /auth/ HTTP/1.1", host: ""
      
      





これは、サイバー犯罪者の1秒あたりの接続制限が有効になったことを意味します。

次に、直接ロックに移動します-fail2banをインストールします:

 yum install fail2ban -y
      
      





次の内容のお気に入りのエディターを使用して、ファイル/etc/fail2ban/filter.d/nginx-req-limit.confを作成します。

 [Definition] failregex = ^\s*\[error\] \d+#\d+: \*\d+ limiting requests, excess: [\d\.]+ by zone "[^"]+", client: <HOST> ignoreregex =
      
      





デフォルトのjail.confを取る

 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
      
      





自分でパラメータを選択します。それらの詳細はこちら

/etc/fail2ban/action.d/sendmail.confを編集し、必要なアドレスをdestおよびsenderに追加します(サーバーにsendmailが構成されている場合、メールを送信します)

fail2banを実行します。

 service fail2ban start
      
      





ログを調べます。

tail -f /var/log/fail2ban.log

フォームのレコードがある場合:

 2014-09-10 21:32:20,575 fail2ban.actions: WARNING [nginx-req-limit] Ban 178.92.194.221 2014-09-10 21:37:33,136 fail2ban.actions: WARNING [nginx-req-limit] Ban 37.144.59.125
      
      





その後、すべてが正常に実行され、攻撃者は禁止に成功します。



利益!



PSそして、どのようにfail2banを使用しますか?:)



All Articles