mod_security を利用する2016/06/16 |
mod_security モジュールを有効にして、Web Application Firewall (WAF) を設定します。
|
|
[1] | mod_security をインストールします。 |
root@www:~# apt-get -y install libapache2-mod-security2
|
[2] | インストールすると security2 モジュールが有効な状態になりますが、ルール未設定の状態です。 ルールの追加は「IncludeOptional」で指定されたディレクトリ配下に配置した conf ファイルで可能となっています。 |
root@www:~# grep -v -E '^?.#|^$' /etc/apache2/mods-available/security2.conf # 追加設定は /etc/modsecurity/ 配下に conf を追加することで可能 <IfModule security2_module> SecDataDir /var/cache/modsecurity IncludeOptional /etc/modsecurity/*.conf </IfModule> # 用意されている推奨設定ファイルをリネームにして有効化 root@www:~# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
root@www:~#
vi /etc/modsecurity/modsecurity.conf # デフォルトは設定ルールにマッチした際に、ブロックせずにロギングのみ行う検知モード # ブロックモードに変更するには「SecRuleEngine On」を指定
# -- Rule engine initialization ----------------------------------------------
# Enable ModSecurity, attaching it to every transaction. Use detection
# only to start with, because that minimises the chances of post-installation
# disruption.
#
SecRuleEngine DetectionOnly
.....
.....
# 187行目:ロギングする種類を選択
SecAuditLogParts ABJDEFHZ
### ロギングの種類概要
A: 監査ログヘッダー(必須項目) B: リクエストヘッダー C: リクエストボディ D: 中間レスポンスヘッダーで予約済みだが未実装 E: 中間レスポンスボディ F: 最終レスポンスヘッダー G: 最終レスポンスボディで予約済みだが未実装 H: 監査ログの追加情報 I: 添付ファイルなどのマルチパートフォームデータを除くリクエストボディ J: 添付ファイルなどのマルチパートフォームデータの情報 K: アクションにマッチした全てのルール情報 Z: 一つのレコードの最終行に付加される境界線(必須項目) |
[3] |
セキュリティルールの書式は以下のようになっています。
⇒ SecRule VARIABLES OPERATOR [ACTIONS]
各パラメータの種類は非常に多いため、詳細は以下の公式ドキュメントを参照ください。
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual |
[4] | セキュリティルールの設定例を以下に示します。 |
root@www:~#
vi /etc/modsecurity/rules-01.conf # ルールにマッチした時のデフォルトアクションを定義 # レスポンスボディフェーズで処理を停止しログを記録して 406 を返す SecDefaultAction "phase:2,deny,log,status:406" # リクエスト URI に「etc/passwd」が含まれる SecRule REQUEST_URI "etc/passwd" "id:'500001'" # リクエスト URI に「../」が含まれる SecRule REQUEST_URI "\.\./" "id:'500002'" # 引数に「<SCRIPT」(小文字含む) が含まれる SecRule ARGS "<[Ss][Cc][Rr][Ii][Pp][Tt]" "id:'500003'" # 引数に「SELECT FROM」(小文字含む) が含まれる SecRule ARGS "[Ss][Ee][Ll][Ee][Cc][Tt][[:space:]]+[Ff][Rr][Oo][Mm]" "id:'500004'" systemctl restart apache2
|
[5] | 設定した文字列を含めてアクセスし、動作確認してください。 |
[6] | mod_security のログは以下の場所に保管されています。パターンマッチした場合は以下のようなログが記録されます。 |
root@www:~# cat /var/log/apache2/modsec_audit.log --b679270f-A-- [17/Jun/2016:11:56:26 +0900] V2Nm2goAAB8AAAurUwAAAAAA 10.0.0.18 56003 10.0.0.31 80 --b679270f-B-- GET /?../../etc/passwd HTTP/1.1 Host: www.srv.world User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive --b679270f-F-- HTTP/1.1 406 Not Acceptable Content-Length: 330 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 ..... ..... |
Sponsored Link |