ServersMan@VPS:WAF(Web Application Firewall)の導入【ModSecurity編】

インターネット上に公開されたサイトである以上、外部から脆弱性を狙う攻撃の脅威は避けられません。WAF(Web Application Firewall) を導入することで、プログラムを修正することなく透過的に脅威からサーバーを守ることが期待できます。今回は、Apacheモジュールとして動作する「ModSecurity」をServersMan@VPSにインストールします。ModSecurity はオープンソースで開発されている WAFであり、無償で利用することができます。(2015/04/11作成)

Security www_slon_pics / Pixabay

WAF(Web Application Firewall)とは…

Webサーバー上にアプリケーションを作り込んでデータを更新したり最新の状況を表示したりするタイプのサイトを,不正な攻撃から守るための装置やソフトウエアのこと。 こうしたサイトにはオンライン・バンキング・やショッピング・サイトなどがある。

0.環境

[crayon]
$ cat /etc/redhat-release
CentOS release 5.11 (Final)

$ /usr/sbin/httpd -v
Server version: Apache/2.2.3
Server built: Sep 16 2014 11:29:05
[/crayon]

※本インストールには、EPEL(エンタープライズ Linux 用の拡張パッケージ)のリポジトリを有効化にしておく必要があります。

1.導入

[crayon]
$ sudo yum install mod_security mod_security_crs mod_security_crs-extras
[/crayon]

2.設定

[crayon]
$ sudo vi /etc/httpd/conf.d/mod_security.conf
[/crayon]

ModSecurityで「SQLインジェクション」や「クロスサイトスクリプティング」に関するチェックのみ行う場合。

[crayon]
# Include modsecurity.d/activated_rules/*.conf
Include modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf
Include modsecurity.d/activated_rules/modsecurity_crs_41_xss_attacks.conf
[/crayon]

SecRuleEngine 設定を “DetectionOnly” に設定。攻撃を検知した場合に、リクエストをブロックせずに、検知内容をログ出力します。

[crayon]
# SecRuleEngine On
SecRuleEngine DetectionOnly
[/crayon]

3.設定反映(試験運用)

[crayon]
$ sudo /etc/init.d/httpd restart
[/crayon]

4.偽陽性判定がある場合

auditログを確認しid ( [id “XXXXXX”] ) をチェックします。
[crayon]
$ sudo tail -f /var/log/httpd/modsec_audit.log
[/crayon]

※Wordpress固有の対応

WordPressのインストールされた環境に「ModSecurity」 を導入する場合、問題のないリクエストであってもデフォルトでは偽陽性判定がされます。”SecRuleRemoveById” を用いて、偽陽性判定のあるリクエストを除外します。以下の「ModSecurity」用ファイルを作成し「Apache」のコフィグレーション(httpd.conf)に読み込ませます。

[crayon]
Include conf.d/set_wp_modsecurity.inc
[/crayon]

[crayon]

SecRuleRemoveById 960024
SecRuleRemoveById 960015
SecRuleRemoveById 981172
SecRuleRemoveById 950001
SecRuleRemoveById 950005
SecRuleRemoveById 950006
SecRuleRemoveById 950007
SecRuleRemoveById 950901
SecRuleRemoveById 958011
SecRuleRemoveById 958030
SecRuleRemoveById 958976
SecRuleRemoveById 959073
SecRuleRemoveById 959070
SecRuleRemoveById 959071
SecRuleRemoveById 959072
SecRuleRemoveById 959151
SecRuleRemoveById 960015
SecRuleRemoveById 960024
SecRuleRemoveById 973300
SecRuleRemoveById 973302
SecRuleRemoveById 973304
SecRuleRemoveById 973305
SecRuleRemoveById 973306
SecRuleRemoveById 973308
SecRuleRemoveById 973316
SecRuleRemoveById 973332
SecRuleRemoveById 973333
SecRuleRemoveById 973334
SecRuleRemoveById 973335
SecRuleRemoveById 981172
SecRuleRemoveById 981173
SecRuleRemoveById 981231
SecRuleRemoveById 981240
SecRuleRemoveById 981241
SecRuleRemoveById 981242
SecRuleRemoveById 981243
SecRuleRemoveById 981244
SecRuleRemoveById 981245
SecRuleRemoveById 981246
SecRuleRemoveById 981247
SecRuleRemoveById 981248
SecRuleRemoveById 981249
SecRuleRemoveById 981251
SecRuleRemoveById 981255
SecRuleRemoveById 981256
SecRuleRemoveById 981257
SecRuleRemoveById 981260
SecRuleRemoveById 981276
SecRuleRemoveById 981317
SecRuleRemoveById 981318
SecRuleRemoveById 981319
SecRuleRemoveById 981320

[/crayon]

※「/var/lib/mod_security」ディレクトリについて

auditログ確認時、下記のパーミッションエラーが出力される場合は、対象ディレクトリが「httpd」の動作ユーザーの権限ではない可能性があります。「chown」にて適切に権限付与する必要があります。

[crayon]
(抜粋)
Message: Failed to access DBM file “/var/lib/mod_security/global”: Permission denied
Message: Failed to access DBM file “/var/lib/mod_security/ip”: Permission denied
[/crayon]

5.本番運用

SecRuleEngine 設定を “DetectionOnly” → “On” に設定します。

[crayon]
$ sudo vi /etc/httpd/conf.d/mod_security.conf
[/crayon]

[crayon]
SecRuleEngine On
# SecRuleEngine DetectionOnly
[/crayon]

以上

About yoshimasa

埼玉県さいたま市在住、2男3女のパパです。Linux系の技術情報を中心にまとめています。1978年2月生まれ。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください