CentOS 7 ModSecurity 2.9.2のソースファイルからのインストール

# 動作確認環境
事情によりバージョンをダウングレードしました。新しいバージョンでも動作するはずです。

- 仮想環境 VMware Workstation Player 12.5.9
- OS Windows 10 Pro 64bit

# 仮想環境
- OS CentOS 7.4 (1708) minimalインストール
- メモリ 2GB
- HDD 250GB

# 前提条件
- gcc 8.1.0
- cmake 3.11.4
- MySQL 5.7.22
- OpenSSL 1.1.0.h
- Apache 2.4.33
- PHP 7.2.6

# mod_unique_id導入
`/usr/local/src`ディレクトリに移動する。

````
cd /usr/local/src
````
ソースファイルをダウンロードする。

````
wget http://www-eu.apache.org/dist//httpd/httpd-2.4.33.tar.gz
````
ダウンロードしたファイルを展開する。

````
tar zxvf httpd-2.4.33.tar.gz
````
Apacheのインストールディレクトリ配下の`modules/metadata`に移動し、以下を実行する。

````
cd httpd-2.4.33/modules/metadata
/usr/local/apache2/bin/apxs -cia mod_unique_id.so
````

# Apacheを再コンパイル・インストール
Apacheを停止する。

````
systemctl stop httpd
````

展開したディレクトリに移動する。

````
cd /usr/local/src/httpd-2.4.33
````

再コンパイル・インストールする。

````
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr-1.6.3 --with-apr-util=/usr/local/apr-util-1.6.1 --with-pcre=/usr/local/pcre-8.42 --enable-http2 --enable-ssl --with-ssl=/usr/local/openssl --enable-so --enable-mods-shared=all --enable-mpms-shared=all
make
make install
````


# ModSecurityをインストール
`/usr/local/src`ディレクトリに移動する。

````
cd /usr/local/src
````
ソースファイルをダウンロードする。

````
wget https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.2/modsecurity-2.9.2.tar.gz
````
ダウンロードしたファイルを展開する。

````
tar xzvf modsecurity-2.9.2.tar.gz
````

展開したディレクトリに移動する。

````
cd modsecurity-2.9.2
````

コンパイル・インストールする。

````
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr-1.6.3 --with-apu=/usr/local/apr-util-1.6.1
make
make install
````
`mod_security2.so`は`/usr/local/apache2/modules/`に作成されている。

`mod_security2.so`のパーミッションを変更する。

````
chmod 755 /usr/local/apache2/modules/mod_security2.so
````
`modsecurity.conf`をコピーする。

````
cp modsecurity.conf-recommended /usr/local/apache2/conf/modsecurity.conf
````
`modsecurity.conf`のパーミッションを変更する。

````
chmod 644 /usr/local/apache2/conf/modsecurity.conf
````
Apacheのインストールディレクトリに移動する。

````
cd /usr/local/apache2
````
`modsecurity.d`ディレクトリを作成し、移動する。

````
mkdir modsecurity.d
cd modsecurity.d
````
gitリポジトリから`owasp-modsecurity-crsw`をコピーする。

````
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs
````
`owasp-modsecurity-crs`ディレクトリに移動する。

````
cd owasp-modsecurity-crs
````
`crs-setup.conf`をコピーする。

````
cp crs-setup.conf.example crs-setup.conf
````
`REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example`及び`RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example`のファイル名を変更する。

````
mv rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
````

`unicode.mapping`をコピーする。

````
cp /usr/local/src/modsecurity-2.9.2/unicode.mapping /usr/local/apache2/conf/unicode.mapping
````
apache2ディレクトリの所有者、グループを変更する。

````
chown -R apache:apache /usr/local/apache2/
````
`httpd.conf`を編集する。

````
vi ../../conf/httpd.conf
````

以下の内容を`LoadModule～`が書かれた一番下の行に追記する。

````
LoadModule security2_module modules/mod_security2.so
<IfModule security2_module>
<IfModule unique_id_module>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecDebugLog logs/modsec_debug.log
	SecDebugLogLevel 3
	SecTmpDir /tmp/
	SecUploadDir /tmp/
	SecDataDir /tmp/
	SecAuditEngine On
	SecAuditEngine RelevantOnly
	SecAuditLogType concurrent
	SecAuditLogParts ABIDEFGHZ
	SecAuditLogStorageDir /var/log/mod_security/data
	SecAuditLog logs/audit_log
	Include modsecurity.d/owasp-modsecurity-crs/crs-setup.conf
	Include modsecurity.d/owasp-modsecurity-crs/rules/*.conf
</IfModule>
</IfModule>
````
Apacheを起動する。

````
systemctl start httpd
````

# 動作確認
ログに`audit_log`が作成されていれば`ModSecurity`が動作している。
またブラウザで`http://サーバのIPアドレス?union+select`にアクセスし、`Forbidden`と表示されれば動作している。
`modsec_debug.log`には以下のようなログが残される。

````
[20/Mar/2018:16:48:40 +0900] [192.168.10.100/sid#eae3d0][rid#7f31b80d49f0][/][1] Audit log: Failed to create subdirectories: /var/log/mod_security/data/20180320/20180320-1648 (Permission denied)
````
# 参考
[ModSecurity: Open Source Web Application Firewall](https://www.modsecurity.org/)
[Releases · SpiderLabs/ModSecurity · GitHub](https://github.com/SpiderLabs/ModSecurity/releases)
[ModSecurity2のインストール | OpenGroove](https://open-groove.net/modsecurity/install-modsecurity2/)
[CentOS7 apacheにmod_securityの導入と設定 - よくわからないエンジニア](http://www.unknownengineer.net/entry/2017/06/19/233434)

---
[目次](https://qiita.com/knutpb1205/items/3ece0cab588afdb13f02)