wordpress の不正ログイン対策(fail2ban)

Wordpressを設置したサイトへの攻撃,乗っ取りが流行っています.

乗っ取られると

などなど,面倒なことが多々起きます.

根本的対策としては fail2ban の導入がおすすめです.以下の設定を行うだけで,サーバ側で攻撃を自動検出,不正アクセスを自動遮断できるようになります.

fail2ban のインストール

centosfedora なら

$ sudo yum install fail2ban

debianubuntu なら

$ sudo apt-get install fail2ban

でインストールできます

fail2ban の全体設定

/etc/fail2ban/fail2ban.conf を編集します.

  • logtarget は syslog から /var/log/fail2ban.log へ変更
logtarget = /var/log/fail2ban.log
  • 上記変更に合わせて logrotate の設定も変更

/etc/logrotate.d/fail2ban を用意します

(debiancentos では,はじめからファイルが用意されています.その場合は,特に何もしなくてOKです)

wordpress 用の設定

wordpress用に2つのファイルを作成します.

  • /etc/fail2ban/filter.d/apache-wp-login.conf
  • /etc/fail2ban/jail.d/apache-wp-login.conf

前者のファイルは,不正アクセスを検出するためのフィルタです.監視するログのファイル名や,そこに記録される不正アクセスのパターンを記述します.
後者のファイルは,不正アクセス検出後の動作を記述します.

/etc/fail2ban/filter.d/apache-wp-login.conf の中身は以下の通り

[Definition]

failregex = ^<HOST> -.*"POST /wp-login.php HTTP.*$
ignoreregex =

正規表現で wp-login.php へのPOSTリクエストを抽出しています


/etc/fail2ban/jail.d/apache-wp-login.conf の中身は以下の通り

[apache-wp-login]

enabled = true
filter = apache-wp-login
action = iptables[name=HTTP, port="http,https", protocol=tcp]
logpath = /var/log/apache2/access.log
maxretry = 5
findtime = 60
bantime = 900

filterで上記のフィルタを指定し,action でiptablesの書き換えを指示しています,

監視対象として,logpathでapache2 (httpd)のアクセスログのファイル名を指定します.このファイル名は,wordpressの設置状況に応じて適切に書き換える必要があります.

動作確認

wordpressのログイン画面にブラウザでアクセスします.その後,ログインのボタンを連打すると,6回目でアクセスが遮断されるはずです.

アクセス遮断は,上記の bantime の設定値にしたがっていて,900秒間続きます.