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の設定画面の警告も消えてるはず。
以上です。