コメントアタックという用語で良いのか微妙だが、apacheのログを眺めていると、
wordpressに結構なPOSTリクエストを送ってくる奴がいる。
このブログにPOSTリクエストが送られるのは、
基本的に自分が記事を更新したときだけなので
(コメントなんてほとんどないですからね)
ほぼ、POSTリクエスト = アタックやいかがわしい行為のはず。
ということで、前々から知ってはいたが、全く手を出したことの無い
fail2banの設定をしてみた。
fail2banはログを見て、事前に定義したレシピに
ヒットするとactionを実行(iptablesでブロックとか)するすぐれもの。
wordpressだけでなく、どちらかというと認証が発生する系の
サーバでは設定しといた方がいいなと思う。
sshとか、pop3とか、その手のサービス。
まー。今回はwordpressの設定。
例によってインストールはapt-get一発
(ubuntu14.04)
1 |
$ sudo apt-get install fail2ban |
/etc/fail2ban/jail.confに以下を追加
1 2 3 4 5 6 7 8 |
[apache-wpcm] enabled = true filter = apache-wpcm logpath = /var/log/apache2/blog_access.log action = iptables-multiport[name=apache-wpcm, port="http,https", protocol=tcp] findtime = 3600 ; 1 hour bantime = 86400 ; 1 day maxretry = 5 |
- filterはこれから定義する
- logpathは実際の環境にあったもの
- actionは、これだとiptablesで、http,httpsをブロックする
- findtimeは、検知する間隔
- bantimeは、ブロックする時間
- maxretryは、findtime中この回数だけヒットしたらブロックするって値
上で使うfilterを作る。
/etc/fail2ban/filter.d/apache-wpcm.conf
1 2 3 |
[Definition] failregex = <HOST>.*] "POST /wp-comments-post.php ignoreregex = |
もう、単純に、/wp-comments-post.phpにPOSTしたリクエストを対象とする。
でサービス再起動
1 |
service fail2ban restart |
実際に定義した、filterがログファイルにヒットするかチェックするには、
fail2ban-regex コマンドを使う。ログファイルが大きいと結構時間がかかります。
1 2 3 4 5 6 |
$ fail2ban-regex /var/log/apache2/blog_access.log /etc/fail2ban/filter.d/apache-wpcm.conf -- snip -- Lines: 14770 lines, 0 ignored, 121 matched, 14649 missed Missed line(s):: too many to print. Use --print-all-missed to print all 14649 lines |
14770行チェックして、121マッチとのこと。全くヒットしないとか、ヒットしすぎとかでは無いので
実運用して様子見します。