WordPressセキュリティ
ネット上に何らかのサーバーを公開していると、結構な頻度で攻撃(調査?)を受けます。セキュリティはできるだけ厳しく設定したいですが、厳しくしすぎると必要な機能も動作しなくなる場合があります。今回もまた躓いてしまった様なので備忘録として残します。
WordPressのディレクトリとファイル構成はみんな知っているので、アクセス制限をかけるために.htaccessファイルでIPアドレス制限をかけたりする方法がよく紹介されています。特に「wp-login.php」ファイルと「wp-admin」ディレクトリはサイト管理上重要なため以下の様に.htaccessファイルを設定したりします。
<FilesMatch "wp-login.php|wp-admin">
Order deny allow
Deny from all
Allow from xxx.xxx.xxx.xxx (アクセスできるIPアドレス)
</FilesMatch>
または、wp-adminディレクトリ内に配置する場合は以下の様に記述したりします。
<Limit GET POST PUT>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx (アクセスできるIPアドレス)
</Limit>
ただ、この様な設定を行うと一部のプラグインが動作しなくなる場合があります。私の場合は「WPForms Lite」というお問い合わせ等のフォームを作成するプラグインで作成した画面の実行に支障が出ました。
上記の画面で送信ボタンを押すと画面がフリーズします。ログには以下の様に記録されます。
[04/Oct/2024:17:08:44 +0900] "POST /wp-admin/admin-ajax.php HTTP/1.1" 403 810 "https://mimura-soft.jp/info/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
これは「wp-admin」ディレクトリ内の「admin-ajax.php」ファイルにアクセス権限がないという意味なので、「WPForms Lite」を使用するにはこのファイルのアクセス権限を与えてあげる必要があります。このファイルは他のプラグインでもたまに使われる場合がある様です。
こちらのサイト様を参考に.htaccessファイルを以下の様に変更したところ動作する様になりました。
<Limit GET POST PUT>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx (アクセスできるIPアドレス)
</Limit>
<Files ~ 'admin-ajax.php'>
Order Allow,Deny
Allow from all
</Files>
IPアドレスで制限をかけると、管理している自分のPCからは正常に動作してしまうので、分かりにくいバグでした。この様な制限をかけた場合は、違う(IPアドレス)環境でテストする必要があります。(自分に言っています。)