WordPressの現実的なセキュリティ対策 【趣味ブロガー向け】

  • 投稿 : 2013-09-15
  • 更新 : 2014-06-11
「WordPressの管理画面」に対するセキュリティ向上を目的とした国外IPアドレスからのアクセス制限の実施および「WordPress国外IPアクセス制限」機能、「管理ツール(ダッシュボード)の国外IPアクセス制限」機能の追加について - ネットオウル株式会社

今まで上記の機能で、勝手にやってくれてたんですが、現状のところだとなにもしれくれないようで同様のことを実施したので記事にまとめました。

「Limit Login Attempts」を入れていたので、ブルートフォースアタックしてることが分かったので、本日対策してみました。

簡単にできること

プラグインを導入することは簡単にできると思うので、とりあえずは導入しておいた方がよいでしょう。

■Limit Login Attempts
http://wordpress.org/plugins/limit-login-attempts/
■SI CAPTCHA Anti-Spam
http://wordpress.org/plugins/si-captcha-for-wordpress/

1つ目は、一定回数パスワードを間違えると、そのIPアドレスからログインできないようにロックが自動的にかかるというプラグインです。ロックがかかるとメールで通知するようにしておけば、よいかと思います。

2つ目は、ログイン画面で、画像認証を追加するプラグインです。コメント欄に画像認証をつけるプラグインとして紹介されてることが多いですが、ログイン画面にもつけれます。

プラグインを導入しておけば、ブルートフォースアタックが開始されれば、メールで、【[某氏の猫空] ログイン失敗回数が一定数になりました。】な感じで通知されると思います。実際に、メールが来ました・・・(^^;

理想は、通知されないようにIPアドレス制限などをしておくべきですが、よくわからない場合はできないですので、プラグインを導入してるだけでもかなりマシ?かと思います。

でも今回の私の件をみると、パスワードロックさえも想定済みで、IPかえて連続してやってきてるみたいなんですけど・・・

参考:
WordPressのユーザー名、「admin」と「ドメイン関連名」が危険というのは、本当だった 【Limit Login Attemptsの導入の薦め】

wp-login.phpへのアクセス制限

.htaccessに以下を追加します。
<Files wp-login.php>
Order deny,allow
Deny from all
Allow from 111.222.33.44
Allow from 111.222.33.55
Allow from 111.222.33.81
</Files>

wp-login.phpをIP制限します。上記の例だと3つのIPだけ許可してることになります。
この手の設定で、IPアドレスはいろいろ変わるからとかいうことで、どうしたらよいかがわからない場合がありますが、その時はとりあえずは日本国内のIPはすべて許可しておけばよいかと思います。

海外からの不正アクセスだけでも制限しておくだけでもかなりマシです。

WordPressの管理画面へのアクセスを国内だけに制限する 【wp-admin】

上記記事のサンプルのように、Allow fromを追加すれば、ほぼ国内のIPだけ許可という状態になります。

※.htaccessファイルは、wp-login.phpと同じフォルダにあるものに追加です。
※<Files wp-login.php>のようにファイル名が指定されているのにも注意してください。

wp-adminフォルダのアクセス制限

Order deny,allow
Deny from all
Allow from 111.222.33.44
Allow from 111.222.33.55
Allow from 111.222.33.81
<FilesMatch "(admin-ajax\.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

wp-adminも同様に制限しておきましょう。
ただし、admin-ajax.phpは除外しておいた方が良いらしいです。

※.htaccessファイルは、wp-adminフォルダにおいてください。
参考:
WordPressの管理画面に制限をかける(ver3.5.1) | Gatespace's Blog
Re: WordPress使いならこれだけはやっておきたい本当のセキュリティ対策10項目 | memo.dogmap.jp

追記:2014/06/11
wp-adminフォルダは、どれだけ除外したらよいのか僕にはわからなかったので、現状はやっていません。
wp-login.phpだけ制限してます。

アクセス制限して、海外出張の時に自身がログインできなくなったらどうしたらよいの?

格安?のレンタルサーバーの場合、管理画面のところで、WEBベースで使えるFTPライクなものがツールとしてついてることが多いと思います。これを利用して、htaccessを編集するなり、一時的にリネームするなりすれば、ログインできると思います。

これだと、ブラウザ経由で作業できるので、たいていの場合なんとでもなるかと思います。

wp-login.php に Basic 認証をかける

参考:
WordPressのログイン画面にBasic認証をかけて二重ロックする | memocarilog

wp-config.phpの保護

1.wp-config.phpを1つ上の階層(フォルダ)に移動させる

注: Version 2.6 から、wp-config.php ファイルを WordPress ディレクトリの真上のディレクトリに移動できるようになりました(参照)。
wp-config.php の編集 - WordPress Codex 日本語版

WPが標準で対応している機能なので、ファイルを1つ上のフォルダに移動させるだけで終わりです。

ただし1つ上のフォルダが非公開ディレクトリでないと意味がありません。また一部のプラグインが対応していない可能性があるので、プラグインが動かなくなる場合があります。

2.wp-config.phpのパーミッションを見直す

また、弊社推奨のパーミッションにつきましては、
 ●モジュール版の場合は「404」
 ●CGI版の場合は「400」
 ●両方が混在する場合「404」
となっております(※)。
バリューサーバーの推奨設定はモジュール版/CGI版/混在とも全て「400」になります。
WordPressの改竄対策でのパーミッション

パーミッションについては、レンタルサーバーの説明のどこかに書いていない場合は、直接問い合わせたほうがよいかと思います。
PHPがどのモードで、どのユーザとして動作してるかによって、パーミッションが変わるんですね。

その他

追記:2014/01/16
WordPressのログイン画面への不正なアクセスを素早く検知するために Login Alertプラグインを導入する

ログイン成功時に、メール通知するプラグインを導入するのもよいかもと思います。

スポンサーリンク