延々と続く不正アタックをfail2banでシャットアウト!
先日投稿したWordpessのxmlrpc.phpへのブルートフォースアタックが収まりません。
平均して3回/秒の速度で数時間アタックが続くこともありとても気持ち悪いです。
前回の対応後、サーバが落ちるような事態にはなっていませんがあまりにも気分が悪いので以前導入したfail2banを使ってWordpressに対する不正アタックを遮断してみようと思います。
fail2banのおさらい
以前ログを眺めていて発見したsshdに対する不正アタック対策として導入していたDenyHosts。
が、Ubuntuの公式リポジトリでサポートされなくなってしまい新たに導入したのがfail2banでした。
設定したパターンに沿ってログを確認し、一致するログが現れたら指定された処理(アクセス遮断とか管理者へのメール通知とか)を実行してくれるfail2ban。
さっそく設定を追記してうっとうしいアクセスをぶった切ってやりましょう。
fail2banにWordpress用の設定を施す
それでは早速設定していきます。
# vi /etc/fail2ban/jail.conf ↓以下を追記 ################################################################### # # 同一IPから # ・60秒間に # ・3回以上 # ・filterにマッチ # したら # ・1800(秒間)iptablesによる80番ポートへのアクセスを遮断 # ・今回はメールによる通知は無 ################################################################### [wplogin-iptables] #当該jailの有効(true)/無効(false) enabled = true #ログパターンの記述(後述) filter = apache-wplogin #パケットフィルタによるアクセスの遮断を実行 action = iptables[name=HTTP, port=http, protocol=tcp] #Apache2のアクセスログを監視 logpath = /var/log/apache2/access.log #パターンの出現回数閾値 maxretry = 3 #出現回数を数える時間(秒) findtime = 60 #アクセス遮断を行う時間(秒) bantime = 1800 「:wq」で保存して終了 # vi /etc/fail2ban/filter.d/apache-wplogin.conf 新規作成。以下を追記。 [Definition] failregex = ^<HOST> -.*"POST /wp-login.php HTTP.*$ failregex = ^<HOST> -.*"POST /xmlrpc.php HTTP.*$ ignoreregex = 「:wq」で保存して終了
/etc/fail2ban/jail.confと/etc/fail2ban/filter.d/apache-wplogin.confという二つのファイルを設定します。
jail.confには後述するapache-wplogin.confに記載した条件にマッチしたときの動作を記載します。今回の場合は
- /var/log/apache2/access.logを監視して
- 60秒の間に3回「apache-wplogin.conf」に指定してある特定のログを発見したら
- iptablesによるパケットフィルタリングで1800秒(30分)アクセスを遮断
という内容になります。
※監視対象のログパスはOSや使用環境によって異なる可能性がありますので、各自の環境に合わせて変更してください。
apache-wplogin.confに記載したのはwp-login.phpとwmlrpc.phpに対するPOST要求が発生したときのログを参考に記載しました。
試しにスマホからログイン画面を開いてわざと3回ログイン失敗したら…見事にログイン画面に入れなくなりました!
ログ(/var/log/fail2ban.log)を確認してみると
2016-12-15 13:25:54,020 fail2ban.actions: WARNING [wplogin-iptables] Ban **.***.***.***
というようにアクセスを遮断した記録が残っていました。
ちなみにxmlrpc.phpに対してもアクセスしてみましたが、前回の処置でリダイレクトが発動しているためaccess.logには記録が残りますがBANが作動しないことも分かりました。
とりあえず今回はこれでしばらく様子を見てみることにします。