いよいよ mod_security2 の設定をつくり、攻撃から身を守れるようにしていきます。
ただ、難問が待っています。
この mod_security2 って奴、設定項目が膨大で、理解するのに(たぶん)大変苦労する点です。
まあ、マニュアルをみてみればわかるのですが…
http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual
項目が多すぎてさっぱりわかりません。
Configuration Directives の項目を今見たら、76項目ですか?
使いこなせるようになるには、ちょっとお時間がかかっちゃいそうです。
しかし心配は無用。
cookpadのようなカンジの、mod_security2レシピ集があるんです。
それが modsecurity_crs http://sourceforge.net/projects/mod-security/files/modsecurity-crs/0-CURRENT/
です。(crs = Core Rule Set の略)
本稿執筆段階では 2.2.5 が最新版です。
ただ、この crs に書いてあるsecurityレシピ、全部いっきに使おうとすると、
イロイロ問題が出ます。
そこで本稿第2稿では、拾ってきたレシピを設置してすぐ使えるよう準備する だけ の方法を紹介するにとどめます(本稿では設置のみで使いません)。
まずはダウンロードしてきます。
CLIWebwブラウザ w3m を使用してページを開き、エンターキーで modsecurity-crs_2.2.5.tar.gz を選択してダウンロードしました。
[code.zobe.jp]# w3m http://sourceforge.net/projects/mod-security/files/modsecurity-crs/0-CURRENT/ [code.zobe.jp]# gzip -cd modsecurity-crs_2.2.5.tar.gz | tar xvf -
これを当方の環境では、CentOS5の httpd 用etcファイルの配置を鑑みて、
/etc/httpd の下に移動し、名前を crs にすることにしました。
[code.zobe.jp]# mv ./modsecurity-crs_2.2.5 crs [code.zobe.jp]# mv ./crs /etc/httpd/
いろいろと思い悩んだ結果、うちの環境では、運用ルールを以下のように定めました。
- /etc/httpd/conf/httpd.conf が /etc/httpd/conf.d/mod_security.conf を呼び出す(元々ある設定)
- /etc/httpd/conf.d/mod_security.conf が /etc/httpd/crs/modsecurity_crs_10_config.conf を呼び出す。
- /etc/httpd/conf.d/mod_security.conf が /etc/httpd/crs/activated_rules/*.conf を呼び出す。
- ルールの追加は /etc/httpd/crs/activated_rules/ に conf ファイルを置いて httpd を再起動。
- ルールの削除は /etc/httpd/crs/activated_rules/ から conf ファイルを消して httpd を再起動。
そしてこのような配置に向けて、次の作業にかかります。
まずは空っぽだった conf.d/mod_security.conf に設定を作成します。
crs/modsecurity_crs_10_setup.conf.example
の最初のセクション
「 Recommended Base Configuration 」
を読むと、
「mod_security.conf-recommended」というおすすめ mod_security.conf の設定サンプルがあるから
それを使ってね、と言われます。
拾ってきて配置します。からっぽだったファイルは名前を変えて避けておきましょう。
[code.zobe.jp]# cd /etc/httpd/conf.d/ [code.zobe.jp]# wget http://mod-security.svn.sourceforge.net/viewvc/mod-security/m2/trunk/modsecurity.conf-recommended [code.zobe.jp]# mv mod_security.conf mod_security.conf.old [code.zobe.jp]# mv modsecurity.conf-recommended mod_security.conf
さらに当方では次のようにこの mod_security.conf を一部書き換えました。
○動作モードを「検出するだけ」から「オン(ルールセットによる通信遮断を許可する)」に設定を変更する
SecRuleEngine DetectionOnly
↓
SecRuleEngine On
○デバッグ出力を、CentOSのhttpdの出力先ルールに準じて出力するように設定を有効にする
#SecDebugLog /opt/modsecurity/var/log/debug.log
#SecDebugLogLevel 3
↓
SecDebugLog /var/log/httpd/modsec_debug.log
SecDebugLogLevel 3
○ログ出力を、CentOSのhttpdの出力先ルールに準じて出力するように設定を変更する
SecAuditLog /var/log/modsec_audit.log
↓
SecAuditLog /var/log/httpd/modsec_audit.log
○crsのルールセットを、上で取り決めた運用方針通りに読み込むように追加指定する。
※ </IfModule> の直前に追記します
Include crs/modsecurity_crs_10_config.conf
Include crs/activated_rules/*.conf
そして最後に
/etc/httpd/crs/modsecurity_crs_10_config.conf
を準備します。
[code.zobe.jp]# cp /etc/httpd/crs/modsecurity_crs_10_setup.conf.example /etc/httpd/crs/modsecurity_crs_10_config.conf
ここまでで
「mod_security2がcrsのなんのルールセットも使用しないが、あとでいつでもルールを追加可能」
な状態をつくることができました。
今までの作業にミスがないか、確認できたら完了です。
[code.zobe.jp]# service httpd restart
次稿でようやく、slowhttptest による攻撃を防ぐ crs ルールセットの設定およびチューニング方法を紹介します。
1 ping
[…] これらをコピーして使用できるようにします(ディレクトリ配置が前に書いた記事の通りになっていることが前提)。 […]