AWS bitnami (LAMP)環境でmod_security(WEB APPLICATION FIREWALL)の導入
2019/12/14
2020/01/06
タグ: AWS, bitnami, mod_security, WAF
AWSの環境でLAMP入れている環境でWAF(mod_security2)を導入する作業があった。bitnamiのLAMPは最初からWEBサーバがチューニングされていて手っ取り早く下手なコンフィグをユーザ自身が行うより全然良いものです。一方ではやはりオリジナリティが高いため、AWSのbitnami特有のディレクトリ構成になっている。また、bitnami固有のコマンドで操作するためUbuntuの標準的なWEBサーバのコマンドは利用できない。有効にするのに少し面倒くさくa2enmodは使えません。
mod_securityのインストール
標準的なインストールは簡単です。AWSのLAMPはUbuntuが古いためmod_securityが古く最新のCRSも使えなく、新しいバージョン入れたい人はコンパイルしたほうが良い。今回は面倒くさいのでOS標準をそのまま使うことにした。
1 |
$ sudo apt-get -y install libapache2-mod-security2 |
パッケージインストールは至ってシンプルでこれだけ。
設定をイネーブルするには?
bitnami環境はフォルダー構造やはり独特ですね。パッケージをインストールするとconfファイルがbitnami配下と/etc/modsecurityの両方にできる。/home/bitnami/stack/apache2/confの配下にあるhttpd.confがグローバル設定の本体なのでまずはこの設定の中を編集してゆく。bitnami直下のmodesecurity.confは無視とする。
1 2 3 4 5 6 |
#この2行が必要 LoadModule security2_module modules/mod_security2.so LoadModule unique_id_module modules/mod_unique_id.so #最下行に追加 Include "/etc/modsecurity/modsecurity.conf" |
細かいルール用読み込み設定をmodsecurity2に施す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# cd /etc/modsecurity # mkdir conf.d <--- オリジナルルール(xxxx.conf)は適当な名前でここへ放り込んでください # vi modsecurity.conf <--recommend-sampleを名前を修正して編集 SecRuleEngine On 途中省略 <IfModule security2_module> SecDataDir /var/cache/modsecurity IncludeOptional /etc/modsecurity/conf.d/*.conf IncludeOptional /usr/share/modsecurity-crs/*.conf IncludeOptional /usr/share/modsecurity-crs/rules/*.conf </IfModule> |
WEBサーバを再起動します。
1 |
$ sudo /opt/bitnami/ctlscript.sh restart apache |
再起動後に反映がうまく行ってれば/home/bitnami/stack/apache2/logsの配下にmodsec_audit.logが出来ているはずです。初期はデバッグログも有効にしてmodsec_debug.logも閲覧できるようにしたほうが設定ミスや失敗がわかりやすくて良いと思います。
モジュールのロード状況の確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_event_module (shared) authn_file_module (shared) authn_core_module (shared) authz_host_module (shared) authz_groupfile_module (shared) authz_user_module (shared) authz_core_module (shared) access_compat_module (shared) auth_basic_module (shared) socache_shmcb_module (shared) reqtimeout_module (shared) ext_filter_module (shared) filter_module (shared) deflate_module (shared) mime_module (shared) log_config_module (shared) env_module (shared) expires_module (shared) headers_module (shared) security2_module (shared) <--- これが必要 unique_id_module (shared) <---これが必要 setenvif_module (shared) version_module (shared) proxy_module (shared) proxy_connect_module (shared) proxy_ftp_module (shared) 途中省略 |