手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 Apache WAF の設定

Ubuntu 26.04 サーバー管理ガイドに戻る

Apache で WAF を使う場合、Ubuntu 26.04 では ModSecurity と CRS を組み合わせる構成が基本になります。

WAF は入れるだけで安全になるものではなく、検知、ログ確認、除外設定、誤検知調整まで含めて運用するものです。この記事では導入と基本設定を扱います。

パッケージをインストールする

sudo apt update
sudo apt install -y libapache2-mod-security2 modsecurity-crs

モジュールを有効化する

sudo a2enmod unique_id
sudo a2enmod security2

ModSecurity の基本設定を確認する

sudo ls -l /etc/modsecurity
sudo sed -n '1,120p' /etc/modsecurity/modsecurity.conf-recommended 2>/dev/null || true

DetectionOnly で始める

最初から遮断モードにすると、アプリケーション通信を止める可能性があります。まずは DetectionOnly でログを見て、問題がなければ段階的に On にします。

sudo tee /etc/modsecurity/modsecurity.conf >/dev/null <<'EOF'
SecRuleEngine DetectionOnly
SecRequestBodyAccess On
SecResponseBodyAccess Off
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus "^(?:5|4(?!04))"
SecAuditLog /var/log/apache2/modsec_audit.log
SecStatusEngine Off
EOF

遮断モードにする場合

検証後に遮断する場合は SecRuleEngine On に変更します。運用中のサイトでは、まず検知ログを確認してから切り替えます。

sudo sed -i 's/^SecRuleEngine .*/SecRuleEngine On/' /etc/modsecurity/modsecurity.conf

設定を検証して反映する

sudo apache2ctl -t
sudo systemctl restart apache2
systemctl status apache2 --no-pager

WAF ログを確認する

sudo tail -n 80 /var/log/apache2/modsec_audit.log 2>/dev/null || true
journalctl -u apache2 --since "1 hour ago" --no-pager

除外設定を考える

WordPress の REST API や管理画面などでは、WAF ルールが本文や JSON を誤検知することがあります。除外は全体で無効化するのではなく、URI、phase、rule ID、target を絞って行います。

<IfModule security2_module>
  SecRule REQUEST_URI "@rx ^/wp-json/wp/v2/posts(?:/.*)?$" \
    "id:1002101,phase:1,pass,nolog,ctl:ruleRemoveTargetById=941160;ARGS:content"
</IfModule>

まとめ

Apache WAF は ModSecurity と CRS の導入だけでなく、DetectionOnly での観察、ログ確認、誤検知除外まで含めて運用します。公開サービスに入れる場合は、遮断より先にログを読む段階を必ず作るのが安全です。

Ubuntu 26.04 サーバー管理ガイドに戻る

Ubuntu 26.04 Apache WAF の設定

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る