mod_securityの検知ログ監視設定を作ってみました。

mod_securityを使ったリバースプロキシ型WAFの続きです。
http://www.kurobuti.com/blog/?p=3732

上記URLのままだと、検知ログが分割されて大量に届くのでswatchの設定変更と検知ログをメールで送信するスクリプトを作成しました。

■処理の流れ
swatchがmod_securityの検知ログを検知する。

スクリプトに検知した文字列を渡す。

スクリプトがmod_securityの検知ログを抜き出してメールを送信する。

(1)swatchの設定を変更

[root@example ~]# vi /etc/swatch/log_watch/mod_security.conf
# appoint log to watch.
# |/var/log/httpd/mod_security_audit.log

watchfor /\-\-.*.\-A\-/i
        echo
        pipe "/usr/local/bin/mod_security_log_check.sh"

(2)検知ログをメールで送信するスクリプト作成
[root@example ~]# vi /usr/local/bin/mod_security_log_check.sh
#!/bin/sh
TMP_FILE=/tmp/mod_security.txt
LOG=/var/log/httpd/mod_security_audit.log
MAIL_ADD=root
read LOG_NUMBER

NAME=`echo $LOG_NUMBER | sed -e "s/--//g"`
NAME2=`echo $NAME | sed -e "s/A/Z/g"`
FIRST_NUM=`grep -n "$NAME" "$LOG" | tail -1 | awk -F : '{print $1}'`
END_NUM=`grep -n "$NAME2" "$LOG" | tail -1 | awk -F : '{print $1}'`

sed -n "$FIRST_NUM","$END_NUM"p "$LOG" > "$TMP_FILE"
if [ $? -eq 0 ] ; then
cat "$TMP_FILE" | mail -s "Detection mail" root
rm "$TMP_FILE"
else
echo "$TMP_FILE was not able to be deleted." | mail -s "error" $MAIL_ADD
fi
[root@example ~]# chmod +x /usr/local/bin/mod_security_log_check.sh

(3)mod_securityの設定変更
[root@example ~]# vi /etc/httpd/conf/mod_security.d/mod_security.conf
# Load File.
LoadFile /usr/lib64/libxml2.so
LoadFile /usr/lib64/liblua-5.1.so

# LoadModule
LoadModule      unique_id_module /usr/lib64/httpd/modules/mod_unique_id.so
LoadModule      security2_module /usr/lib64/httpd/modules/mod_security2.so

# Debug Log.
SecDebugLog logs/modsec_debug.log
SecDebugLogLevel 1

# Log File.
#SecAuditEngine On
SecAuditEngine RelevantOnly # 検知したもののみログに記録
SecAuditLogRelevantStatus ^(?:5|4\d[^4]) # 404以外の5xx、4xxをログに記録
SecAuditLog logs/mod_security_audit.log
SecAuditLogType Serial

SecDataDir /tmp

<IfModule mod_security2.c>
 Include conf/mod_security.d/base_rules/*.conf
 Include conf/mod_security.d/modsecurity_crs_10_config.conf
</IfModule>

(4)swatchを再起動
[root@example ~]# service swatch restart
swatch を停止中:                                           [  OK  ]
swatch を起動中:                                           [  OK  ]

(5)apacheを再起動
[root@example ~]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

(6)適当な攻撃をして検知されたメールが届くか確認


4月 30, 2011 at 8:13 pm by 黒ぶちメガネ
Category: Apache, Linux, mod_security