数日前、私のサイトの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を使用しますか?:)