2026年5月20日

2026年5月20日

mod_securityが原因の500エラーの解決方法【WAFルール誤検知】

はじめに

サーバーに設置されているWAF(Web Application Firewall)の一種である mod_security が、WordPressの正常なリクエストを「攻撃」と誤検知してブロックすることがあります。この場合、管理画面での特定の操作(投稿保存・プラグイン設定変更等)だけ500エラーになるという特徴的な症状が出ます。

mod_securityが原因と疑われる症状

  • 特定の管理画面操作(投稿保存・画像アップロード等)だけ500エラーになる
  • フロントは正常だが管理画面の一部だけエラーになる
  • エラーログに ModSecurity403 Forbidden の記録がある
  • プラグイン・テーマ・htaccessを確認しても問題がない

エラーログでmod_securityを確認する

サーバーのエラーログを確認します:

[error] ModSecurity: Access denied with code 500 (phase 2).
Pattern match "..." at ARGS:content.
[file "/etc/modsec/rules/..."] [id "1234567"]
[hostname "example.com"] [uri "/wp-admin/post.php"]

このような記録がある場合、mod_securityのルールが原因です。ルールID(上記の 1234567)をメモしておきます。

解決方法①:ホスティング会社に無効化を依頼する

共有ホスティングの場合、mod_security の設定はホスティング側が管理しています。エラーログのルールIDを伝えて、そのルールの除外(ホワイトリスト登録)を依頼します。

解決方法②:.htaccessでルールを無効化する(cPanel系ホスティング)

cPanel系ホスティング(エックスサーバー・ロリポップ等)の場合、.htaccess でルールを無効化できる場合があります:

# 特定のルールを無効化(ルールIDを使う)
<IfModule mod_security2.c>
  SecRuleRemoveById 1234567
</IfModule>

または、WordPress の管理ページ全体でmod_securityを無効化する:

<IfModule mod_security2.c>
  SecFilterEngine Off
  SecFilterScanPOST Off
</IfModule>

ただし、上記は mod_security2 が使われている場合の記述です。mod_security(v1)の場合は構文が異なります。

解決方法③:VPS・専用サーバーでの設定変更

SSH アクセスがある場合、mod_security の設定ファイルで除外ルールを追加できます:

# /etc/modsecurity/custom_rules.conf
SecRule REQUEST_FILENAME "@contains /wp-admin/" \
  "phase:2,nolog,allow,id:99001"

設定後は Apache を再起動:

sudo service apache2 restart
# または
sudo systemctl restart httpd

CloudflareのWAFが原因の場合

Cloudflare を使っている場合、CloudflareのWAFルールが原因の場合もあります。Cloudflare管理画面 → セキュリティ → WAF → カスタムルール でWordPressの管理URLをホワイトリストに追加します。

注意事項

  • mod_security は攻撃を防ぐセキュリティ機能です。完全に無効化すると脆弱性のリスクが増します。問題のあるルールのみを除外することを推奨します。

まとめ

mod_securityが原因の500エラーは、エラーログでルールIDを確認し、そのルールだけを除外することで解決します。共有ホスティングの場合はサポートへの依頼が最も確実です。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ