2026年5月20日
2026年5月20日
mod_securityが原因の403エラーの解決方法【WAF誤検知の対処】
はじめに
mod_security は Apache/Nginx のセキュリティモジュールで、SQLインジェクションやXSSなどの攻撃を検知してブロックします。しかし誤検知も多く、WordPressの管理画面操作や正常なフォーム送信が403エラーになることがあります。
mod_securityが原因の403エラーの特徴
- 投稿を保存しようとすると403になる
- 特定の文字列(HTMLタグ・スクリプト等)を入力すると403になる
- 画像アップロードが403になる
- エラーログに「ModSecurity」の記録がある
.htaccessやプラグインを確認しても問題がない
ステップ1:エラーログでmod_securityを確認する
cPanel → ログ → エラー
または SSH で:
sudo tail -f /var/log/apache2/error.log | grep ModSecurity
以下のような記録があれば mod_security が原因です:
ModSecurity: Access denied with code 403 (phase 2).
Pattern match "..." at ARGS:post_content.
[id "941100"] [hostname "example.com"]
[uri "/wp-admin/post.php"]
ルールID(941100 等)をメモしておきます。
解決方法①:ホスティングサポートに依頼する(推奨)
共有ホスティングでは mod_security の設定変更が制限されていることが多いため、サポートに依頼するのが最も確実です。
伝えるべき情報:
- エラーが発生するURL
- エラーログのルールID(例:941100)
- エラーが起きる操作内容
解決方法②:.htaccessでルールを除外する
cPanel 系ホスティングでは .htaccess でルールを除外できる場合があります:
# 特定のルールIDを除外
<IfModule mod_security2.c>
SecRuleRemoveById 941100
SecRuleRemoveById 942100
</IfModule>
または特定のURLパスに対してmod_securityを無効化:
<IfModule mod_security2.c>
<Location /wp-admin/>
SecRuleEngine Off
</Location>
</IfModule>
解決方法③:CloudflareのWAFルールを確認する
Cloudflare を使っている場合は Cloudflare の WAF が原因の場合もあります:
1. Cloudflare 管理画面 → セキュリティ → WAF
2. ブロックされたリクエストを確認
3. WordPress 管理ページのURLをホワイトリストに追加
解決方法④:VPS・専用サーバーでの設定変更
SSH でサーバーに接続して設定ファイルに除外ルールを追加:
# modsecurityの設定ファイルを編集
sudo nano /etc/modsecurity/custom_rules.conf
# WordPressの管理画面を除外するルール
SecRule REQUEST_FILENAME "@contains /wp-admin/" \
"phase:2,nolog,allow,id:99001"
# Apacheを再起動
sudo service apache2 restart
注意事項
- mod_security を完全に無効化するのはセキュリティリスクがあります。問題のあるルールIDのみを除外することを推奨します。
- 本番環境での設定変更前には必ずバックアップを取ってください。
まとめ
mod_securityによる403エラーは、エラーログでルールIDを確認し、そのルールだけを除外するか、ホスティングサポートに対応を依頼することで解決します。
関連記事: