nginxで指定したIPアドレス以外からはWordPressにログイン出来ないようにする【追記しました】

Pocket

実は最近までlogwatchがnginxのログを取得できていないことを発見.そりゃ異常がわからないよねって話でした.

logwatchでnginxのログを見ると世界中からわざわざ私のworpdressにログインしようとなさっています.

loginerror

これじゃいかんと思ったのですが,SSLを導入するまでのスキルがないので,当面は自宅IPアドレス(幸いなことにADSLなのでIPがほぼ固定なんです)のみからログイン出来るように変更してみます.

Ads

使用している環境

私がblogに使用している環境はCentOS6.6(64bit)で,nginxのバージョンは1.6.2です.WordPressは現時点で最新の4.0.1になっています.

# cat /etc/issue
CentOS release 6.6 (Final)

# nginx -v
nginx version: nginx/1.6.2

変更の手順

nginxの設定では,/etc/nginx/conf.d/にあるconfファイルを読むように/etc/nginx/nginx.confで指定しているので,今回は/etc/nginx/conf.d/default.confを変更してみます.

    location /wp-admin/ {
        proxy_pass http://backend;
        allow xx.xxx.xxx.xxx;
        deny all;
    }

    location /wp-login.php {
        proxy_pass http://backend;
        allow xx.xxx.xxx.xxx;
        deny all;

}

/wp-admin/と/wp-login.phpだけはリバースプロキシキャッシュをオフにしているので項目がありました.ここにallowとdenyを加えるだけ.

これで指定したIPアドレス以外からログインしようとすると403エラーが出るようになりました.

結果どうなるか

nginxのアクセスログを見ると,ちゃんと弾いていることがわかります.

xx.xx.xxx.xx - - [xx/Dec/2014:xx:xx:xx +0900] "GET /wp-login.php HTTP/1.0" 403 162 "-" "-" "-"

このままだと指定したIPからしかログイン出来ないので外出先からログインできません.そんなこともあろうかと自宅のルーターをVPN接続できるようにしているのでiPhoneからやノートPCから自宅経由で接続することでログインできます.

普通はこんな面倒なことしないんでしょうけどね.

追記 admin-ajax.phpが403エラーになる

というわけで一日IPアドレス規制したんですが,どうもよくありません.というのも,/wp-admin/admin-ajax.phpへのアクセスがあるようで,/wp-admin/を規制すると403エラーが出てしまいます.

xxx.xxx.xx.xx - - [10/Dec/2014:xx:xx:xx +0900] "POST /wp-admin/admin-ajax.php HTTP/1.1" 403 564 "http://nan-hen.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7" "-"

logをみるとこんな感じです.admin-ajax.phpはajax処理を行うためのものらしく,これが使えないのはねぇということで,結局はIPアドレス規制をオフにしました.ということで,今のlogは,

xxx.xxx.xxx.xx - - [10/Dec/2014:xx:xx:xx +0900] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 67 "http://nan-hen.com/?p=xxxx" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53" "-"

と200を返すようになりました.

となるとセキュリティ面が心配なんですが,この度なんとかstartsslによるSSL認証をログインとダッシュボードに適用することが出来るようになりました.

詳細はちょっとまだ出せませんが,ログイン画面とダッシュボードをSSLにすることが出来ました.GoogleのSPDYモジュールもconfにSPDYと4字入れるだけで無事に使えるようになりました.

nan-hen_ssl

2件のコメント

  1. 通りすがり

    ajax処理する場合でも
    サーバーにアクセスした人自身がadmin-ajax.phpを呼び出す訳ではないので
    サーバー自身のIPアドレスを許可してたら問題無い気がするのですがどうなんですかね?

    • nanhen

      コメントありがとうございました.
      そうですよね.もちろん,自サーバーIPとlocalhostをallowしてれば大丈夫と思っていたのですがうまくいかなくて…
      現在の所,wp-login.phpだけにIP制限しています.
      これからもよろしくお願いします.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です