○ modsecurity-apacheのインストール

・apache(httpサーバ)への不正アクセスを監視します
・modsecurity-apache_2.5.11をソースからインストールし、設定します
・xoopsなどのユーザからの書込で、不正アクセスになる場合があります
・make はメンテナンスマシンで行っています

・httpリクエストにhtmlのタグを含めるとエラーになる場合が多い
・不特定多数の書き込みが発生する動的なサイトにはむかない

・新規インストールした openssl を使います
・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:modsecurity-apache_2.5.11.tar.gz  (http://www.modsecurity.org/)
:lua-5.1.4-3.fc11.src.rpm (http://ftp.riken.jp/Linux/fedora/)

○参照ファイル

:パッケージの追加
:最初の設定 (Xen)
:httpd/phpのインストール

○インストール環境

:OS CentOS 5.4
:selinux disabled or permissive
:インストール先 
:作業 /usr/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○lua-5.1.4

・modsecurity-apache_2.5.11で必要です
・fedoraのパッケージをCentOS用にアレンジします
・md5チェックができないので、--nomd5オプションでインストールします

# cd /usr/src
[root@jupiter:/usr/src]
# mkdir lua
# rpm -ivh --nomd5 lua-5.1.4-3.fc11.src.rpm
# cd redhat/SPECS
[root@jupiter:/usr/src/redhat/SPECS]
# rpmbuild -ba --clean --rmsource --define 'dist .C54' lua.spec
# mv lua.spec /usr/src/lua
# cd ../RPMS/i386
[root@jupiter:/usr/src/redhat/RPMS/i386]

・作成されたパッケージ
 lua-5.1.4-3.C54.i386.rpm
 lua-devel-5.1.4-3.C54.i386.rpm
 lua-static-5.1.4-3.C54.i386.rpm

# rm *debuginfo*
# mv *.rpm /usr/src/lua
# cd ../../SRPMS
[root@jupiter:/usr/src/redhat/SRPMS]

・作成されたパッケージ
 lua-5.1.4-3.C54.src.rpm

# mv *.rpm /usr/src/lua

・インストール

# cd /usr/src/lua
[root@jupiter:/usr/src/lua]
# rpm -Uvh lua-static* lua-devel* lua-5.1.4-3.C54.i386.rpm

○キャッシュ情報の更新と確認

# cd ~
[root@jupiter:~]
# ldconfig
# ldconfig -p | grep lua



○modsecurity-apache_2.5.11

○ソースの展開・インストール

・apr-1-config、apu-1-configスクリプトのリンクを作ります

# cd /usr/local/bin
[root@jupiter:/usr/local/bin]
# ln -s /usr/local/apache2/bin/apr-1-config apr-config
# ln -s /usr/local/apache2/bin/apu-1-config apu-config

# cd /usr/src
[root@jupiter:/usr/src]
# tar zxvf modsecurity-apache_2.5.11.tar.gz
# chown -R root:root modsecurity-apache_2.5.11
# cd modsecurity-apache_2.5.11/apache2
[root@jupiter:/usr/src/modsecurity-apache_2.5.11/apache2]
# ./configure
# make
# make test
# make install

・ルールのコピー

# mkdir /etc/httpd/modsecurity
# cd ../rules
[root@jupiter:/usr/src/modsecurity-apache_2.5.11/rules]
# cp -a *.conf /etc/httpd/modsecurity
# cp -a base_rules/* /etc/httpd/modsecurity
# cd /usr/src
[root@jupiter:/usr/src]
# tar jcvf modsecurity-apache_2.5.11-100120.tar.bz2 modsecurity-apache_2.5.11/



○modsecurityの設定

○apacheのconfigファイルの修正

:/etc/httpd/conf/httpd.conf

・省略

Include /etc/httpd/conf/extra/mod_security.conf

:/etc/httpd/conf/extra/mod_security.conf

・et_sql_injectionとet_web_rulesはSNORT_RULESから作成されたものです
・有効にする場合は #記号 を外します

LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua-5.1.so
LoadModule security2_module modules/mod_security2.so

<IfModule security2_module>
    Include /etc/httpd/modsecurity/modsecurity_crs_10_config.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_10_global_config.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_20_protocol_violations.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_21_protocol_anomalies.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_23_request_limits.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_30_http_policy.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_35_bad_robots.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_40_generic_attacks.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_41_phpids_filters.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_41_sql_injection_attacks.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_41_xss_attacks.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_45_trojans.conf
#   Include /etc/httpd/modsecurity/modsecurity_crs_46_et_sql_injection.conf
#   Include /etc/httpd/modsecurity/modsecurity_crs_46_et_web_rules.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_47_common_exceptions.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_48_local_exceptions.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_49_enforcement.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_50_outbound.conf
    Include /etc/httpd/modsecurity/modsecurity_crs_60_correlation.conf
</IfModule>

○modsecyurityのconfigファイルの修正

・レスポンスボディをバッファして解析するかどうか(SecResponseBodyAccess)
・ステータスコードでaudit_logへの出力を制御 (SecAuditLogRelevantStatus)
・ログの出力先をapacheの設定に合わせます

:/etc/httpd/modsecurity/modsecurity_crs_10_config.conf

・省略

SecResponseBodyAccess Off

・省略

SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus "^(?:5|40[^4]|41[^0]|42)"

・省略

SecAuditLog /var/log/httpd/modsec_audit_log
SecAuditLogParts "ABIFHZ"

・省略

SecDebugLog /var/log/httpd/modsec_debug_log

・省略

・id番号により、ルールを無効にする

:/etc/httpd/modsecurity/modsecurity_crs_48_local_exceptions.conf

# 特定のリモートアドレスからのアクセスを無視する
SecRule REMOTE_ADDR "^192\.168\.0\.3$" \
phase:1,nolog,allow,ctl:ruleEngine=Off

# IPアドレスによるアクセスの警告が気になる場合
SecRuleRemoveById 960017

# mod_deflateに対する警告が気になる場合
SecRuleRemoveById 960903

# Xoopsのpico、multipart/form-dataへの対応
SecRule &TX:/arg_name_content_id/ "@gt 0" \
"phase:2,t:none,nolog,pass,setvar:tx.anomaly_score=-20"

# Xoopsのmynews(pico)のアップデートへの対応
SecRule &TX:/arg_name_dirname/ "@gt 0" \
"phase:2,t:none,nolog,pass,setvar:tx.anomaly_score=-20"

SecRule REQUEST_BODY ".mynews=" \
"phase:2,t:none,nolog,pass,setvar:tx.anomaly_score=-20"

・modsecurityを無効にする場合

:/etc/httpd/modsecurity/modsecurity_crs_10_config.conf

SecRuleEngine Off

○selinuxヘの対応 (selinuxが有効の場合)

・新規インストールファイルのselinuxラベルを修正

# cd ~
[root@jupiter:~]
# restorecon -Rv /etc
# restorecon -Rv /usr/local

○apacheのリスタート

[root@jupiter:~]
# service httpd configtest
# service httpd restart

○ Copyright(c) 528p.com All Rights Reserved.