WordPressを死守せよ!~管理画面にIP制限をかける方法~

2013年4月17日 | tadashige seki

aaaaaaaaaaaaaaaa

このところ、WordPressを狙った大規模な攻撃が行われています。

こちらの記事によると

According to reports, they are seeing a large botnet with more than 90,000 servers
attempting to log in by cycling different usernames and passwords against the WordPress access points:
wp-login.php and /wp-admin.

とのことで、/wp-login.phpと/wp-adminディレクトリが狙われているとのことです。

その対策として、こちらの記事では

admin という管理者ユーザ名を変更すること *2
簡単に推測できない強力なパスワードを設定すること

の2つを推奨しています。これらも対策として非常に基本的かつ重要なことですが、会社などで利用しているのであれば、会社のIPアドレスからのみログインできるように制限を加えればより安全ですね。

そこで、nginxとapacheのIP制限についてまとめたいと思います。

nginxの場合

下記内容をnginx設定ファイルに追記します。

server {
    # wp-adminのIP制限。allow~に続いて許可するIPアドレスを書きます。
    # deny all;の行は消してはいけません。
    location /wp-admin {
        allow xxx.xxx.xxx.xxx;
        allow yyy.yyy.yyy.yyy;
        deny all;
    }
 
    # wp-login.phpのIP制限。wp-adminの場合と内容は一緒です。
    location = /wp-login.php {
        allow xxx.xxx.xxx.xxx;
        allow yyy.yyy.yyy.yyy;
        deny all;
        # PHPを動作させるための設定も忘れずに書きます
        fastcgi_pass x.x.x.x:yyyy;
        などなど。。。
    }
}

共通して注意したいのは、

deny all;

をallowより先に書いてはいけません。denyが現れた段階で残りのallow行は無視されます。

wp-adminの制限はわかりやすいと思います。wp-login.phpですが、ここでは「=」修飾子を使って制限対象を「/wp-login.php」に限定しています。今回のように対象となるファイルが決まっている時には、この書き方のほうが直感的でわかりやすいと思います。また、IP制限の記述だけですとPHPとして動作しなくなるので、忘れずにPHPの設定を書いておきましょう。

設定を書き換えたら「/path/to/bin/nginx -t」を実行して設定ファイルにミスがないか確認をします。問題なければnginxを再起動します。

apacheの場合

.htaccessが使えるようであれば、下記内容を/wp-admin/に設置します。

order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx

また、wp-login.phpのあるディレクトリの中に下記内容で.htaccessを設置します。

<Files "wp-login.php">
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>

動作確認

nginx、apacheのいずれの場合も、

  • 許可されたIPアドレスから接続できること
  • それ以外のIPアドレスからアクセス出来ないこと

を確認しましょう。

おまけ

WordPressのプラグインで、特定のIPアドレスから何度もログインしようとした場合に、そのIPアドレスを一定時間ブロックするものもあるようです。

固定IPアドレスがなくて制限をかけられない場合は、このようなプラグインを使うのもひとつの手です。

Limit Login Attempts

PICK UP

ライター

情シス6年を経て2013年からインフラチームに入りました。

お問い合わせ

サービスに関するご相談は
こちらよりお気軽にお問い合わせください。

e-Agencyの様々な情報をSNSでお届けします!