はじめに
WordPressでUltimate Memberプラグインを使っていたら、メール設定画面にアクセスすると「403 Error」が表示されるトラブルに遭遇しました。「現在、このページへのアクセスは禁止されています」というメッセージが出て先に進めません。この記事では原因の特定から解決までの過程を共有します。
エラーの状況
Ultimate Member(会員管理プラグイン)の設定画面で「Emails」タブをクリックすると、以下のようなURLにアクセスしようとします。
/wp-admin/admin.php?page=um_options&tab=email&email=checkmail_email
このとき「403 Error」が表示され、管理画面にアクセスできなくなります。
.htaccessファイルの確認
最初に思いついたのは、.htaccessファイルにアクセス制限の設定があるかもしれないという点です。確認してみると、通常のWordPress標準の.htaccessファイルだけで、特別な制限は設定されていませんでした。
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Code language: PHP (php)
.htaccessとは?
.htaccessは「エイチティーアクセス」と読み、Apacheサーバーの設定を変更するための特別なファイルです。このファイルを使うと、サーバー全体の設定を変えなくても、特定のフォルダの設定だけを変更できます。
.htaccessは、マンションの各部屋のルールブックのようなものです。マンション全体のルールとは別に、自分の部屋だけの特別なルールを決められます。
WordPressでは、URLの書き換えなどの重要な設定が.htaccessに書かれています。
.htaccessでできることの例:
- URLの書き換え(きれいなURLにする)
- 特定のIPアドレスからのアクセスを禁止する
- パスワード保護を設定する
- ファイルの圧縮設定
パーミッション(アクセス権限)の問題
FTPクライアント(FileZilla)でサーバーに接続し、wp-adminディレクトリのパーミッションを確認してみると「flcdmpe 0705」と表示されていました。
この表記は、FileZillaの特殊な表示形式で、数字部分「0705」が実際のUNIXパーミッションを表しています:
- 0:特殊フラグ
- 7:所有者の権限(読み取り+書き込み+実行)
- 0:グループの権限(権限なし)
- 5:その他ユーザーの権限(読み取り+実行)
グループに権限が全くない(0)状態になっています。
パーミッションの修正
wp-adminディレクトリのパーミッションを「0755」に変更することにしました。これは:
- 所有者:読み取り+書き込み+実行(7)
- グループ:読み取り+実行(5)
- その他:読み取り+実行(5)
この設定により、サーバープログラムがグループユーザーとしてファイルにアクセスできるようになります。冷蔵庫の中身を家族全員が見られるようにするようなものです。
しかし、パーミッションを修正しても問題は解決しませんでした。
URLパラメータの調査
問題のURLをよく見ると、email=checkmail_emailというパラメータが含まれています。試しにこの部分をaemail=checkmail_emailと変更してアクセスしてみると、エラーは出るものの画面は表示されるようになりました。
これは「email」というパラメータ名自体に問題があることを示しています。
真の原因:mod_security(WAF)の制限
調査の結果、このエラーはサーバーの「mod_security」という機能が原因だとわかりました。mod_securityはWebアプリケーションファイアウォール(WAF)の一種で、URLに「email」という文字列が含まれていると、潜在的な攻撃として検知してブロックすることがあります。
玄関に警備員を置いているようなもので、危険そうな人(この場合は「email」という言葉を含むURL)を自動的に入れないようにしているのです。
WAF(ウェブアプリケーションファイアウォール)とは?
WAFは「ウェブアプリケーションファイアウォール」の略です。これはウェブサイトを外部からの攻撃から守るための防御システムです。
身近な例で言うと、WAFはお店の警備員のようなものです。お店に入ってくるお客さんの中から、怪しい人や危険な人だけを見分けて入店を断ります。WAFもウェブサイトに来るアクセスの中から、攻撃や不正なものだけを見分けてブロックします。
WAFは次のようなことをしてくれます:
- 悪意のあるプログラムコードをブロック
- 不審なURLからのアクセスを防止
- データの盗難や改ざんを防止
記事では「emailという文字列がURLに含まれると危険と判断される」という例が出ていましたね。これは実際によくある設定です。攻撃者がよく使うパターンをWAFが知っていて、それに似た動きを見つけるとブロックするのです。
mod_securityとは?
mod_securityは、Apache(ウェブサーバーの一種)用のWAFの代表的なものです。無料で使えて、多くのレンタルサーバーに標準で導入されています。
mod_securityの働きを例えると、ちょうど図書館の防犯ゲートのようなものです。本を無断で持ち出そうとすると警報が鳴りますよね。mod_securityも同じように、危険なアクセスを検知すると警報を出し、そのアクセスをブロックします。
記事にある「URLに「email」という文字列が含まれているとブロックする」というのは、mod_securityのルールの一例です。これは迷惑メール送信ツールなどの悪用を防ぐために設定されていることがあります。
ロリポップ!サーバーでの対応方法
ロリポップ!サーバーを使用している場合、mod_securityの設定は.htaccessから直接変更することができません。
対応方法は以下の通りです:
- ロリポップ!の「ユーザー専用ページ」にログイン
- 「WAF設定」画面にアクセス
- WAFの設定を調整
ただし、WAFを完全に無効化することはセキュリティリスクが高まるため、推奨できません。
まとめ
この事例から学べることは:
- 403エラーは単純なパーミッションの問題だけでなく、サーバーのセキュリティ設定が原因かもしれない
- URLパラメータの一部を変更することで、一時的な回避策になる場合がある
- レンタルサーバーでは、自分で変更できる設定に限りがあるため、サポートに相談することも重要
WordPressとUltimate Memberプラグインを使う際に同様の問題に遭遇した方の参考になれば幸いです。