昨日、「話題になっているセキュリティに関する記事を読んで超訳解説してみる」という記事を書いていて、ブルートフォースアタックがだんだん気になってきました。WordPressはどのurlからログイン出来るか分かっているので、プログラムを作って地道に総当たりでログインを試みられたらできちゃいそうな気もしてきます。
仕事ではそういう場合の対策用にログインを数回失敗したら時間をおかないとログインを試みられなかったり、何度も同じことをすればログインをできなくしたりする機能のプログラムを作ったことがあります。似たようなモノを作ろうかと思ったのですが、ググってみたら良いプラグインがありましたのでそれを入れることにします。
limit login attempts というプラグイン
ログイン失敗回数を制限して不正ログインを検知するWordPressプラグイン「Limit Login Attempts」
こちらのblogに詳しい使い方が載っていましたので読んだところ、求めている機能が備わっているようでしたので早速使ってみたいと思います。
ダッシュボード>プラグイン>新規追加 で limit login attempts を検索、
今すぐインストール をクリックして、
プラグインを有効化 をクリックします。
日本語化する
ダッシュボード>設定>limit login attempts
デフォルトは英語です。先ほど参照したblogで日本語化ファイルがあるということが分かったので、日本語化してみたいと思います。日本語化ファイルは、
ShingoFukuyama/limit-login-attempts-ja.po
ここにあります。
右ブロックの一番下、 Download ZIP というボタンをクリックしてzipファイルをダウンロードして解凍します。
解凍するとこれらのファイルが見えますので、limit-login-attempts-ja.moというファイルを、wp-content\plugins\limit-login-attempts の下に置きます。すると、
日本語化されました。
設定をしてみる
日本語化ファイルを独自で検索していたときに見つけた
Limit Login Attemptsの日本語化をしてみた
を見ると、設定を変えないとまずいらしいところ
ApacheやNginxでリバースプロキシを構築している場合はLimit Login Attemptsをお勧めします。その場合、リバースプロキシを利用するにチェックを入れてください。そうしないと全てがループバックアドレス127.0.0.1になるので、他人がアタックしてきた際に127.0.0.1がロックを受けて自分自身も閉め出されて何十時間もログインできなくなったり…(まぁ管理者が間抜けなことにログイン出来なくなったとしても設定データをデータベースから直接削除または更新すればいいだけですが)。
があったので、変えてみました。
リバースプロキシで接続 の方にチェックを入れます。
あとどんな攻撃がくるのか分からないのでとりあえず、
管理者のメールに通知 ( 4回のロックで) にチェックを入れてみました。
設定を変更 を押して設定終了です。
たくさん間違えてロックされてみる!
ということでわざと間違えて入力してみます。
1回目、エラー:ユーザー名またはパスワードが正しくありません。残り3回まで間違えることができます というメッセージが表示されました!
2回、3回と間違えていよいよあと1回です。
4回間違えると、このように エラー:ユーザー名またはパスワードが正しくありません。エラー:ログイン失敗数が一定数になりました。20分後に再度ログインを試みて下さい。 というメッセージが出ました。
20分経つまでは、たとえ正しいIDとパスワードを入れてもログイン出来ません。
管理画面で見てみる
このようにログインを試みられて失敗している状態を管理画面から見ることが出来ます。
ダッシュボード>設定>limit login attempts を見ると、
ロックのログ という項目が増えて、ログが表示されているのが分かります。
もしどうしても入れなくなったら??
何かの間違いで自分のIDでどうしても入れなくなったら、データベースの プレフィックス_options というテーブルの、
limit_login_retries
limit_login_retries_valid
limit_login_lockouts
limit_login_logged
limit_login_lockouts_total
このあたりのデータがロックされた情報のようですので、削除すれば入れるようになると思います。
DELETE FROM `プレフィックス_options` WHERE option_name IN ( 'limit_login_retries', 'limit_login_retries_valid', 'limit_login_lockouts', 'limit_login_logged', 'limit_login_lockouts_total' );
delete文はこんな感じでしょうか?データを削除するのでもしやる場合は自己責任で、できればDBをバックアップしてからやってみてください。
コメント