本記事はWAF (Web Application Firewall)ソフトでApacheモジュールの一つである、ModSecurityのインストール及び簡易的な設定方法を記載する。本運用を考慮した設定は本記事では割愛するが、必要な参考リンクは適時記載するので参照されたし。
概要 (全体像)
ModSecurity:TrustWave社がGPLv2 ライセンスのもと提供しているOSSのWAF。
ModSecurity: Open Source Web Application Firewall
下記の資料にWAFの概要からModSecurityの導入〜運用までの検討ポイントが記載されている。
IPA 独立行政法人 情報処理推進機構:Web Application Firewall 読本
OWASP Core Rule Set:OWASP(Open Web Application Security Project)がGPLv2 ライセンスのもと提供しているModSecurityのルール(シグネチャ)。
Category:OWASP ModSecurity Core Rule Set Project – OWASP
Category:OWASP Best Practices: Use of Web Application Firewalls – OWASP
OWASP
当サイトを含む下手なブログ記事等を参照するよりも先ずは公式と上記のリンクを読んだ方が理解が早い。
前提環境
当記事ではVMWare上のDebian 6 (64bit)、Apache/2.2.16 (Debian)で実施。尚、当該仮想OSはホスト名「debian」で名前解決するよう設定しており、一部のブラウザのスクリーンショットで使用されている。
インストール方法
公式サイトをご参照。
ModSecurity: Open Source Web Application Firewall – Download
Reference Manual · SpiderLabs/ModSecurity Wiki – Installation for Apache · GitHub
最新のv2.7.7を使用したい場合は、ソースからmake installする。下記は当方環境でのapt-getでのインストール例。
# apt-get install libapache-mod-security Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: mod-security-common The following NEW packages will be installed: libapache-mod-security mod-security-common 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 1,083 kB of archives. After this operation, 3,314 kB of additional disk space will be used. Do you want to continue [Y/n]? Get:1 http://ftp.riken.jp/Linux/debian/debian/ squeeze/main mod-security-common all 2.5.12-1+squeeze3 [960 kB] Get:2 http://ftp.riken.jp/Linux/debian/debian/ squeeze/main libapache-mod-security amd64 2.5.12-1+squeeze3 [123 kB] Fetched 1,083 kB in 0s (1,325 kB/s) Selecting previously deselected package mod-security-common. (Reading database ... 126120 files and directories currently installed.) Unpacking mod-security-common (from .../mod-security-common_2.5.12-1+squeeze3_all.deb) ... Selecting previously deselected package libapache-mod-security. Unpacking libapache-mod-security (from .../libapache-mod-security_2.5.12-1+squeeze3_amd64.deb) ... Setting up mod-security-common (2.5.12-1+squeeze3) ... Setting up libapache-mod-security (2.5.12-1+squeeze3) ... Reloading web server config: apache2.
私の環境だと公式とは指定パッケージ名が下記の通り異なった。
※ ‘libapache-mod-security’ instead of ‘libapache2-mod-security2’となる。
設定方法
設定の要領はApacheに対する設定と変わらず。以下にmodsecurityの動きを確認できる簡単なサンプルを示す。「←」以降はコメントである為、実際には打ち込まない。
# vi /etc/apache2/apache2.conf
<前略>SecRuleEngine On ← modsecurityを有効化 SecDefaultAction "phase:2,deny,log,auditlog,status:406" ← ルールにマッチした際のデフォルトのアクションを設定。ここでは、レスポンスコード406で拒否しログに書き込む。 SecRule REQUEST_URI dirty "id:'3000001'" ← フィルタするルールを設定。ここではルールiD 3000001、リクエストURIに文字列「dirty」の場合にデフォルトのアクション↑を実行 SecRule ARGS "delete[[:space:]]+from" "id:'3000002'" ← SQLインジェクションのフィルタの一例 SecRule ARGS "