WordPress の管理画面にアクセス制限をかけたい

セルフホスティング環境で、IP アドレス制限や Basic 認証の設定内容・手順をご紹介します。 

本ドキュメントは root 権限が付与されたセルフホスティング用です。Amimoto マネージドホスティングをご利用の場合はサポートへ以下のフォーマットでご連絡ください。 

● 対象サーバID (例: amimoto.a000)
amimoto.a

● 対象 (いずれかをご選択ください)
・HTTP/HTTPS のサイト全体
・HTTP/HTTPS の WordPress 管理画面 (/wp-login.php, /wp-admin/*) のみ

● アカウント情報 (ご希望が無い場合はランダムで発行いたします)
ユーザID:
パスワード:  

設定方法

WordPress の管理画面にアクセス制限をかける場合は以下のファイル・ディレクトリを対象とします。

  • /wp-login.php
  • /wp-admin/
    ※ただし admin-ajax.php を除く

網元AMIで使用している Nginx では .htaccess が使えませんので、 /etc/nginx/conf.d/default.conf(または /etc/nginx/conf.d/example.com.conf )を編集します。

このファイルは root ユーザーのみが変更出来ますので、以下のようなコマンドでroot ユーザへ切り替えをしてください。

$sudo su -

/etc/nginx/conf.d/default.conf の抜粋


server {
    listen      80 default;
    server_name _;
    root        /var/www/vhosts/i-xxxxxx;
    index       index.html index.htm;
    charset     utf-8;

    access_log  /var/log/nginx/access.log  main;
    error_log   /var/log/nginx/error.log;

    include     /etc/nginx/drop;

    add_header X-Cache-Status $upstream_cache_status;
    expires $expires;

    set $mobile '';
    #include /etc/nginx/mobile-detect;

    include     /etc/nginx/wp-front;

    location ~* /(phpmyadmin|myadmin|pma) { access_log off; return 404; }

    #
    # redirect server error pages to the static page /50x.html
    #
    error_page  502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

IPアドレスで制限する場合

20行目前後(include    /etc/nginx/wp-front; )の行の上に以下のコードを追記してください

location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
    index index.php index.html index.htm;

    # 許可するIPアドレスを記述
    allow 192.168.0.1;
    deny all;

    proxy_no_cache     $do_not_cache;
    proxy_cache_bypass $do_not_cache;

    proxy_redirect     off;
    proxy_cache        czone;
    proxy_cache_key    "$scheme://$host$request_uri$mobile";
    proxy_cache_valid  200 0m;
    proxy_pass http://backend;
}

次のような組み合わせで許可するIPアドレスを追記してください。

allow 192.168.0.1;

Basic 認証で制限する場合

事前に .htpasswd を作成しておきます。
 まず、SSHでインスタンスにログイン後、先ほどと同じように、sudo su - でルートユーザーに変更しておきます。

/etc/nginx/conf.d/ に .htpasswd を作成します。

Basic 認証のユーザー名を「wpbasic」としたい場合は

# htpasswd -c /etc/nginx/conf.d/.htpasswd wpbasic

と入力します。
 コマンドが通ると新しいパスワードとそのパスワードの再入力を求められます。

New password:
Re-type new password:

成功すると Adding password for user wpbasic と表示されます。

成功したら、/etc/nginx/conf.d/default.conf (または /etc/nginx/conf.d/example.com.conf )の20行目前後(include    /etc/nginx/wp-front; )の行の上に以下のコードを追記してください

location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
    index index.php index.html index.htm;

    # Basic認証のメッセージ
    auth_basic "Please enter your ID and password";
    # .htpasswd ファイルのパス
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;

    proxy_no_cache     $do_not_cache;
    proxy_cache_bypass $do_not_cache;

    proxy_redirect     off;
    proxy_cache        czone;
    proxy_cache_key    "$scheme://$host$request_uri$mobile";
    proxy_cache_valid  200 0m;
    proxy_pass http://backend;
}

その後、設定を反映させるために以下のコマンドで Nginx を再起動してください。

# service nginx restart

実際にアクセスをして、設定が正しく動作するかを確認してください。

なお、作業完了後にはサーバからログアウトを行ってください。

# exit
logout

$ exit
logout

Connection to your sever closed.