# wget http://www.modsecurity.org/download/mod_security-1.8.6.tar.gz
# tar zxfv mod_security-1.8.6.tar.gz
# cd mod_security-1.8.6/apache2
# /usr/sbin/apxs2-prefork -c mod_security.c
# cp .libs/mod_security.so /usr/lib/apache2/
# cd /usr/lib/apache2-prefork
# ln -s ../apache2/mod_security.so mod_security.so
# mkdir /etc/apache2/modsec
# cd /etc/apache2/modsec
# vi xss.rules
[i]を押す。
# スクリプトを呼び出せるタグは禁止
SecFilter "<[[:space:]]*script.*>"
SecFilter "<[[:space:]]*style.*>"
SecFilter "<[[:space:]]*link.*>"
SecFilter "<[[:space:]]*body[[:space:]]*>"
# 疑似プロトコルは禁止
SecFilter "javascript:"
SecFilter "vbscript:"
SecFilter "about:"
# スクリプトを呼び出せるので禁止
SecFilter "expression\("
SecFilter "&{.*};"
# イベントハンドラは禁止
SecFilter "onError"
SecFilter "onUnload"
SecFilter "onBlur"
SecFilter "onFocus"
SecFilter "onClick"
SecFilter "onMouseOver"
SecFilter "onMouseOut"
SecFilter "onSubmit"
SecFilter "onReset"
SecFilter "onChange"
SecFilter "onSelect"
SecFilter "onAbort"
# CookieやBasic認証情報にアクセスできるので禁止
SecFilter "document\.cookie"
SecFilter "Microsoft\.XMLHTTP"
# 改行コードは禁止(ただし、TEXTAREAが存在する場合はこのままではダメ)
SecFilter "\x0d"
SecFilter "\x0a"
[Esc]、[:]、[w]、[q]で保存
# wget http://www.snort.org/dl/rules/snortrules-snapshot-2_2.tar.gz
# tar zxfv snortrules-snapshot-2_2.tar.gz
# cd rules
# wget http://www.modsecurity.org/documentation/snort2modsec.pl
# perl snort2modsec.pl web-attacks.rules > /etc/apache2/modsec/web-attacks.rules
# perl snort2modsec.pl web-cgi.rules > /etc/apache2/modsec/web-cgi.rules
# perl snort2modsec.pl web-client.rules > /etc/apache2/modsec/web-client.rules
# perl snort2modsec.pl web-coldfusion.rules > /etc/apache2/modsec/web-coldfusion.rules
# perl snort2modsec.pl web-frontpage.rules > /etc/apache2/modsec/web-frontpage.rules
# perl snort2modsec.pl web-iis.rules > /etc/apache2/modsec/web-iis.rules
# perl snort2modsec.pl web-misc.rules > /etc/apache2/modsec/web-misc.rules
# perl snort2modsec.pl web-php.rules > /etc/apache2/modsec/web-php.rules
# vi /etc/apache2/conf.d/modsec.conf
[i]を押す。
<IfModule mod_security.c>
SecFilterEngine On
SecFilterScanPOST On
SecFilterSelective HTTP_Transfer-Encoding "!^$"
SecFilterDefaultAction "deny,log,status:406"
SecFilterCheckURLEncoding On
SecFilterDebugLog /var/log/apache2/modsec_log
SecFilterDebugLevel 1
SecAuditEngine RelevantOnly
SecAuditLog /var/log/apache2/audit_log
Include /etc/apache2/modsec/xss.rules
Include /etc/apache2/modsec/web-attacks.rules
Include /etc/apache2/modsec/web-cgi.rules
Include /etc/apache2/modsec/web-client.rules
Include /etc/apache2/modsec/web-coldfusion.rules
Include /etc/apache2/modsec/web-frontpage.rules
Include /etc/apache2/modsec/web-iis.rules
Include /etc/apache2/modsec/web-misc.rules
Include /etc/apache2/modsec/web-php.rules
</IfModule>
[Esc]、[:]、[w]、[q]で保存
[CGI名での除外方法]
# wf_reg.cgi/wforum.cgi以外で改行コードがあったら規制する。
SecFilterSelective THE_REQUEST "!(/wf_regi\.cgi|wforum\.cgi)"
chain
SecFilter "\x0d"
SecFilterSelective THE_REQUEST "!(/wf_regi\.cgi|wforum\.cgi)"
chain
SecFilter "\x0a"
[ペイロードの特徴での除外方法]
# POST_PAYLOAD中に「message=」という記述があるもの以外で改行コードがあったら規制する。
SecFilterSelective POST_PAYLOAD "!(message=)" chain
SecFilter "\x0d"
SecFilterSelective POST_PAYLOAD "!(message=)" chain
SecFilter "\x0a"