ModSecurity
ModSecurity はオープンソースの WAF (Web Application Firewall) である。
インストール
EPEL リポジトリーからインストール
CentOS 6 以前では EPEL リポジトリーに、CentOS 7 では標準リポジトリーにパッケージが存在する。
yum install mod_security*
systemctl restart httpd
EPEL でインストールされるファイルは以下の通り。
/etc/httpd/conf.d/mod_security.conf
/etc/httpd/conf.modules.d/10-mod_security.conf
/etc/httpd/modsecurity.d
/etc/httpd/modsecurity.d/activated_rules
/usr/lib64/httpd/modules/mod_security2.so
/usr/share/doc/mod_security-2.7.3
/usr/share/doc/mod_security-2.7.3/CHANGES
/usr/share/doc/mod_security-2.7.3/LICENSE
/usr/share/doc/mod_security-2.7.3/NOTICE
/usr/share/doc/mod_security-2.7.3/README.TXT
/var/lib/mod_security
Atomic リポジトリーからインストール
CentOS 6 以前では EPEL リポジトリーに、CentOS 7 では標準リポジトリーにパッケージが存在するが 2.7.3 以前と古いので、最新版をパッケージでインストールするには Atomic リポジトリーからインストールする。バージョンは 2.9.1 になる。
ただし EPEL リポジトリーと違い、設定を自身で用意する必要がある。
curl -s http://www.atomicorp.com/installers/atomic | sh
yum install mod_security
Atomic でインストールされるファイルは以下の通り。
/etc/httpd/conf.d/00_mod_security.conf
/etc/httpd/modsecurity.d
/usr/lib64/httpd/modules/mod_security2.so
/usr/share/doc/mod_security-2.9.1
/usr/share/doc/mod_security-2.9.1/CHANGES
/usr/share/doc/mod_security-2.9.1/LICENSE
/usr/share/doc/mod_security-2.9.1/README.TXT
/usr/share/doc/mod_security-2.9.1/doc
/usr/share/doc/mod_security-2.9.1/doc/README.txt
/usr/share/doc/mod_security-2.9.1/doc/doxygen-apache.conf
/usr/share/doc/mod_security-2.9.1/doc/doxygen-iis.conf
/usr/share/doc/mod_security-2.9.1/doc/doxygen-logo.png
/usr/share/doc/mod_security-2.9.1/doc/doxygen-nginx.conf
/usr/share/doc/mod_security-2.9.1/doc/doxygen-standalone.conf
/usr/share/doc/mod_security-2.9.1/modsecurity.conf-recommended
Atomic での設定方法は検証中…
curl -L https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.0.0.tar.gz -o owasp-modsecurity-crs-3.0.0.tar.gz
tar xf owasp-modsecurity-crs-3.0.0.tar.gz
設定
modsec_audit.log に偽陽性の id が出力されるので SecRuleRemoveById
として指定してやると除外される。
fgrep '[id "' /var/log/httpd/modsec_audit.log
出力例
Message: Access denied with code 403 (phase 2). Pattern match "^[\\d.:]+$" at REQUEST_HEADERS:Host. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_21_protocol_anomalies.conf"] [line "98"] [id "960017"] [rev "2"] [msg "Host header is a numeric IP address"] [data "192.168.56.101"] [severity "WARNING"] [ver "OWASP_CRS/2.2.6"] [maturity "9"] [accuracy "9"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [tag "http://technet.microsoft.com/en-us/magazine/2005.01.hackerbasher.aspx"]
cat << "_EOF_" >> /etc/httpd/conf.d/mod_security_rule_remove.conf
SecRuleRemoveById 960017
_EOF_
systemctl restart httpd
正規の操作を繰り返しながら、つまずくたびに以下を実行するのでもいいかもしれない。
grep -o 'id "[0-9]*' /var/log/httpd/modsec_audit.log | uniq | sort | sed -e 's/id "/SecRuleRemoveById /' > /etc/httpd/conf.d/mod_security_rule_remove.conf