WordPress環境設定その4(セキュリティ設定)

WordPressでこのサイトを作ったときの環境構築メモ。
ここでは、セキュリティ設定の話を記載する。

やったこととしては以下の4つ。

  • プラグイン SiteGuard WP Plugin の導入(管理画面のセキュリティ強化)
  • nginxの設定(管理画面ログインのアクセス制限)
  • プラグイン Google Authenticator の導入(管理画面の認証強化)
  • プラグイン iQ Block Countryの導入(特定の国からのアクセス制限)

プラグイン SiteGuard WP Plugin の導入

これは有名なWordPressのセキュリティのプラグイン。
以下のサイトを参考に導入した。

1.WordPressの管理画面のプラグインの追加画面で、「SiteGuard WP Plugin」を検索し、インストールする。

2.プラグインを有効化すると、画面上部にログインURLが変わった旨が表示される。
これは、管理画面へのログインURLがデフォルトのURL(~/wp-admin)から、推測されにくいURL(~/login_XXXXX)に変更するため。

新URLの確認方法は以下。

管理画面の左メニューに「SiteGuard」が追加されているので、それをクリックし、Setting statusの「Rename Login」を押下。

「New Login Path」に表示されているURLが、管理画面へのログインURLとなる。

なお、この設定だけでは、新しいログインURLにアクセスすると404になってしまう。login_XXXXX へのアクセスを wp-login.phpへ向けるように、nginx側の設定が必要となる(nginxの設定の節で記載)。

「SiteGuard WP Plugin」の他の設定については、基本的にはデフォルトのままとした。(設定についての詳細は、上記の参考サイトをご参照のこと。)

ログインURLが分からなくなったら

WordPressのVMインスタンスにログインし、.htaccess ファイルを確認する。

1.GCPのコンソールのVMインスタンス一覧から、WordPressのインスタンスにある「接続」の「SSH」を押下する。

2..htaccessの中身を確認。

$ cat /opt/bitnami/wordpress/.htaccess 

#SITEGUARD_PLUGIN_SETTINGS_START
#==== SITEGUARD_RENAME_LOGIN_SETTINGS_START
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteRule ^wp-signup\.php 404-siteguard [L]
    RewriteRule ^wp-activate\.php 404-siteguard [L]
    RewriteRule ^login_32567(.*)$ wp-login.php$1 [L]
</IfModule>
#==== SITEGUARD_RENAME_LOGIN_SETTINGS_END
#SITEGUARD_PLUGIN_SETTINGS_END

# BEGIN WordPress
# END WordPress

RewriteRule の “login_XXXX(.*)$ wp-login.php$1” の login_XXXX がログインURLとなる。
もし、強制的に元に戻し(wp-loginでログインできるようにする)たければ、上記の.htaccessの中で、”SITEGUARD_RENAME_LOGIN_SETTINGS_START” から “SITEGUARD_RENAME_LOGIN_SETTINGS_END” までの行を削除すれば良い。

画像認証機能(CAPTCHA)について

画像認証機能(CAPTCHA)を有効にしてはみたのだが、設定したその日には正常に機能していたのだが、数日たってみると、以下のように画像が表示されなくなっていた。。なんらかのアップデートが原因か。。?

生成される画像ファイル名とHTMLに埋め込まれているURLが異なっているためだが、要因は分からない。
しかたないので、この機能は無効化し、代わりにGoogle Authenticator のプラグインを導入することにした(以降で記載)。

nginxの設定

nginxの設定としては2点。

  • ログインURL(login_XXXXX )へのアクセスを wp-login.php へ向ける
  • ログイン画面を表示できるIPを制限する(自分のインターネット環境のプロバイダのIPのみ許可)

手順は以下。

1.GCPのコンソールのVMインスタンス一覧から、WordPressのインスタンスにある「接続」の「SSH」を押下すして、VMインスタンスにログインする。

2.nginxの設定ファイルを編集(以下の24~28行目を追加)。
( /opt/bitnami/nginx/conf/server_blocks/wordpress-server-block.conf を編集)

server {
    # Port to listen on, can also be set in IP:PORT format
    listen 80 default_server;
    root /opt/bitnami/wordpress;
    # Catch-all server block
    # See: https://nginx.org/en/docs/http/server_names.html#miscellaneous_names
    server_name _;
    # BEGIN Fix for WordPress plugins and themes
    # Certain WordPress plugins and themes do not properly link to PHP files because of symbolic links
    # https://github.com/bitnami/bitnami-docker-wordpress-nginx/issues/43
    rewrite ^/bitnami/wordpress(/.*) $1 last;
    # END Fix for WordPress plugins and themes
    # BEGIN WordPress
    # https://wordpress.org/support/article/nginx/#general-wordpress-rules
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    location /login_32567 {
        allow 60.112.76.205;
        deny all;
        try_files $uri /wp-login.php?$args;
    }
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
    # END WordPress
    include  "/opt/bitnami/nginx/conf/bitnami/*.conf";
}
  • ログインURL(login_XXXXX )へのアクセスを wp-login.php へ向ける ⇒ 27行目
  • ログイン画面を表示できるIPを制限する ⇒ 25、26行目

3.設定の構文チェック

$ sudo nginx -t
nginx: the configuration file /opt/bitnami/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/bitnami/nginx/conf/nginx.conf test is successful

上記のように、syntax is ok が出力されることを確認。

4.設定をリロード

$ sudo nginx -s reload

http://(WordPressのVMのIP)/login_XXXXX にアクセスし、ログイン画面が正常に表示されることを確認する。

なお、この設定では、https://(ドメイン)/login_XXXXX でアクセスすると、ログイン画面は表示されないので注意。(ドメインでアクセスすると、間にCloudflareが入るので、VMインスタンスへのアクセスはCloudflareのIPからのアクセスとなるため。)

プラグイン Google Authenticator の導入

管理画面への二段階認証のために、Google Authenticatorを導入。

1.スマホにGoogle Authenticatorのアプリをインストールしておく。

2.WordPressの管理画面のプラグインの追加画面で、「Google Authenticator」を検索し、インストールし、有効にする。

3.管理画面のUsersメニューを表示し、ログインしているユーザの設定画面を表示する。
その中の、Google Authenticator Settingsの項で、Activeにチェックを入れる。

4.スマホのGoogle Authenticatorのアプリで、上記のSecretで表示されているキーを入力するか、QRコードを表示してスマホで読み込むかして、認証設定を追加する。

プラグイン iQ Block Countryの導入

これは特定の国からのアクセスを制限するプラグイン。
Cloud Storageの無料枠では、1GBの下り(外向き)ネットワークは無料だが、「中国とオーストラリアを除く」となっているので、これらの国からのアクセスを制限することにする。

iQ Block Countryの導入

1.WordPressの管理画面のプラグインの追加画面で、「iQ Block Country」を検索し、インストールし、有効にする。

2.管理画面の左メニューから「Settings」>「iQ Block Country」を選択する。

3.「Frontend」タブを選択し、「Block countries selected below:」をチェックし、「Select the countries:」に「China」と「Australia」を選択する。

GeoIP2 Country データベースの導入

iQ Block Countryを導入しただけでは、IPと国との紐付けるデータベース(MaxMind の GeoIP 2データベース)が無いため、IP制限ができていない(設定画面の上部に警告が出ている。)
以降は、そのデータベースを導入する手順。

1.MaxMindのサインアップページでアカウントを作成する。

上記に必要事項を入力し、Continueボタンを押下すると、アカウント作成が完了。

2.MaxMindのページにログインして、左メニューの「Download Files」をクリックする。

3.GeoLite2 Country の Download GZIP リンクをクリックし、ファイルをダウンロードする。

4.ダウンロードしたgzipファイルを、WordPressのVMインスタンスに転送し、解凍する。

5.解凍したファイル「GeoLite2-Country.mmdb」を「/opt/bitnami/wordpress/wp-content/uploads/」配下に置く。

以上で導入は終わり。iQ Block Countrの設定画面の警告も消えてるはず。

以上です。