mod_security でWAF。

IMGP4038

※写真と本文は関係ありません。


備忘録書いておく。

wordpress(このサイトね)にXSSなどがたくさん来るので試してみた。

インストールはyumで

## mod_security 本体
# yum install mod_security
## ルールセット
# yum install mod_security_crs mod_security_crs-extras

設定は/etc/httpd/conf.d/mod_security.confで。
除外するルール。ホワイトリストのIPアドレスとWAFを発動しないpathを追記。

<IfModule mod_security2.c>
    ……
    # 除外するルールID(日本語クエリパラメータで発動してしまうので除外する)
    SecRuleRemoveById 960024
    # muninのhttp://localhost/server-status/へのアクセスを除外。
    SecRule REMOTE_ADDR "^127\.0\.0\.1$" "phase:1,nolog,allow,id:2013122401"
    # 管理画面へのアクセスは除外。
    SecRule REQUEST_FILENAME "^/wordpress/wp-admin/" "phase:1,nolog,allow,id:2013122501"
    ……
</IfModule>

ルールセットは/usr/lib/modsecurity.d/にあるので、適宜/etc/httpd/modsecurity.d/activated_rules/に置くと適用される。(base_rulesはmod_security_crsインストール時にシンボリックリンクされる)

運用は、ログで『403 Forbidden』されたルールIDを見てSecRuleRemoveByIdに追記する方法かなぁ。
ルールセットはあまり変更しない方がいいような感じかしら?

日本語の情報が少ないので、検索すると少し古い情報で迷う。。最近のVersionはSecRuleにid:が必要とか。ルール書くまで理解するのは大変そう…。