---
title: "4-2-3　ModSecurity_V3遮断（Nginx）"
canonical: "https://manual.shadan-kun.com/space/KSK2INST/85000230/4-2-3%E3%80%80ModSecurity_V3%E9%81%AE%E6%96%AD%EF%BC%88Nginx%EF%BC%89"
format: markdown
---
> ⚠️ **注意**
> ⚠️ 
> ⚠️ - 本遮断方式を利用するにあたり、Nginxの動的モジュールを生成する必要があります。
> ⚠️ - 本マニュアルでは、ModSecurity-NginxコネクタをNginxの動的モジュールとして生成する方法について説明します。Nginxの動的モジュール生成時に使用するconfigureオプションについては、ご利用のNginxに適した設定に読み替えてください。
> ⚠️ - GCCバージョンが14以上の場合、ModSecurity-Nginxコネクタはmodsecurity-nginx-v1.0.4 をご利用ください。modsecurity-nginx-v1.0.3 は、GCCバージョン14以上でのビルドに失敗することを確認しております。
> ⚠️ - RHEL10系ではGCCバージョンが14以上であることを確認しております。
> ⚠️ - GCCバージョンが15以上の場合、ModSecurity本体は modsecurity-v3.0.14 をご利用ください。modsecurity-v3.0.13 以下のバージョン は、GCCバージョン15以上でのビルドに失敗することを確認しております。
> ⚠️ - Ubuntu26.04ではGCCバージョンが15以上であることを確認しております。


#### STEP1　ModSecurityインストール、ModSecurity-Nginxコネクタ生成

##### 1-1　ModSecurityインストール

(1) ModSecurityのソースコードを任意のパスにダウンロードして展開します。（ここでは、/usr/local/srcにダウンロードしています。）

```
# cd /usr/local/src
# wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.10/modsecurity-v3.0.10.tar.gz
# tar xvzf modsecurity-v3.0.10.tar.gz
```

Ubuntu26.04 の場合は v3.0.14 をご利用ください。

```
# cd /usr/local/src
# wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.14/modsecurity-v3.0.14.tar.gz
# tar xvzf modsecurity-v3.0.14.tar.gz
```


(2) ModSecurityのビルドに必要なモジュールをインストールします。既にインストール済みのモジュールはインストール不要です。

**【RedHat系】**

```
# yum -y install pcre2-devel make gcc gcc-c++ automake autoconf libtool libxml2-devel curl-devel zlib-devel
```

**【Ubuntu系】**

```
# apt -y install make build-essential libxml2-dev libcurl4-openssl-dev libpcre2-dev zlib1g-dev
```


(3) ModSecurityをビルド、インストールします。

```
# cd modsecurity-v3.0.10
# ./configure --with-pcre2
# make
# make install
```

Ubuntu26.04 の場合は v3.0.14 をご利用ください。

```
# cd modsecurity-v3.0.14
# ./configure --with-pcre2
# make
# make install
```


##### 1-2　ModSecurity-Nginxコネクタ生成

(1) ModSecurity-Nginxコネクタのソースコードを任意のパスにダウンロードして展開します（ここでは、/usr/local/srcにダウンロードしています）。

**【modsecurity-nginx-v1.0.3 を利用する場合】**

```
# cd /usr/local/src
# wget https://github.com/SpiderLabs/ModSecurity-nginx/releases/download/v1.0.3/modsecurity-nginx-v1.0.3.tar.gz
# tar xvfz modsecurity-nginx-v1.0.3.tar.gz
```

**【modsecurity-nginx-v1.0.4 を利用する場合】**

```
# cd /usr/local/src
# wget https://github.com/owasp-modsecurity/ModSecurity-nginx/releases/download/v1.0.4/ModSecurity-nginx-v1.0.4.tar.gz
# tar xvfz ModSecurity-nginx-v1.0.4.tar.gz
```


(2) エージェントをインストールするサーバで利用しているNginxのバージョンのソースコードを任意のパスにダウンロードして展開します（本マニュアルでは、Nginxのバージョン1.25.2の例を記載しています。ここでは、/usr/local/srcにダウンロードしています）。

```
# cd /usr/local/src
# curl -OL http://nginx.org/download/nginx-1.25.2.tar.gz
# tar xvfz nginx-1.25.2.tar.gz
```


(3) ModSecurity-Nginxコネクタを生成します。

**【modsecurity-nginx-v1.0.3 を利用する場合】**

※configureスクリプトのオプションに`--add-dynamic-module=/usr/local/src/modsecurity-nginx-v1.0.3`が必要です。コマンド例を以下に記載します（上記以外のオプションはご利用のNginxに適した設定に読み替えてください）。

```
【コマンド例1】--with-compatをconfigureオプションに設定
# cd /usr/local/src/nginx-1.25.2
# ./configure --add-dynamic-module=/usr/local/src/modsecurity-nginx-v1.0.3 --with-compat
# make modules

【コマンド例2】nginxのconfigureオプションを確認してconfigureオプションに設定
# nginx -V
nginx version: nginx/1.25.2
built by gcc 11.3.1 20221121 (Red Hat 11.3.1-4) (GCC)
built with OpenSSL 3.0.8 7 Feb 2023
TLS SNI support enabled
configure arguments: --with-http_gunzip_module --with-http_ssl_module --with-http_v2_module

# cd /usr/local/src/nginx-1.25.2
# ./configure --add-dynamic-module=/usr/local/src/modsecurity-nginx-v1.0.3 --with-http_gunzip_module --with-http_ssl_module --with-http_v2_module
# make modules
```

**【modsecurity-nginx-v1.0.4 を利用する場合】**

※configureスクリプトのオプションに`--add-dynamic-module=/usr/local/src/ModSecurity-nginx-v1.0.4`が必要です。コマンド例を以下に記載します（上記以外のオプションはご利用のNginxに適した設定に読み替えてください）。

```
【コマンド例1】--with-compatをconfigureオプションに設定
# cd /usr/local/src/nginx-1.26.3
# ./configure --add-dynamic-module=/usr/local/src/ModSecurity-nginx-v1.0.4 --with-compat
# make modules

【コマンド例2】nginxのconfigureオプションを確認してconfigureオプションに設定
# nginx -V
nginx version: nginx/1.26.3
built with OpenSSL 3.2.2 4 Jun 2024
TLS SNI support enabled
configure arguments: --with-http_gunzip_module --with-http_ssl_module --with-http_v2_module

# cd /usr/local/src/nginx-1.26.3
# ./configure --add-dynamic-module=/usr/local/src/ModSecurity-nginx-v1.0.4 --with-http_gunzip_module --with-http_ssl_module --with-http_v2_module
# make modules
```


> Macro (anchor)

(4) ModSecurity-Nginxコネクタを任意のパスに配置します（ここでは、/usr/local/nginx/sbinに配置しています）。

```
# cp /usr/local/src/nginx-1.25.2/objs/ngx_http_modsecurity_module.so /usr/local/nginx/sbin
```


#### STEP2　構成ファイルを取得

ModSecurity遮断の構成ファイル「shadan-kun-v2_modsecurity_sh.tar」をダウンロード・展開します。

```
# wget https://docs.shadan-kun.com/manual/shadan-kun-v2_modsecurity_sh.tar
# tar xvf shadan-kun-v2_modsecurity_sh.tar
```

SHA256ハッシュ値：`55d4ea5f9da1155a8d0f258281a0bf877cda2847aff26a7b9eb18aa3bba4e91d`


【展開後のファイル構成】

| **ファイルパス** | **内容** |
| --- | --- |
| shadan-kun-v2_modsecurity_sh/CHANGELOG.md | 変更履歴 |
| shadan-kun-v2_modsecurity_sh/**firewall-drop.sh** | ルール変更制御プログラム |
| shadan-kun-v2_modsecurity_sh/**modsecurity.sh** | ルール生成プログラム |
| shadan-kun-v2_modsecurity_sh/**modsecurity.conf** | 初期configファイル |


#### STEP3　ファイル配置・更新

ファイル配置および環境依存箇所の更新を実施します。

> ✅ **補足**
> ✅ 
> ✅ - 本項以降のエージェントのインストールディレクトリは「/var/shadan-kun」とします。


##### **(1) firewall-drop.sh**

「shadan-kun-v2_modsecurity_sh.tar」内のfirewall-drop.shを配置します。

```
ファイルパス：
/var/shadan-kun/active-response/bin/firewall-drop.sh

パーミッション：
-rwxr-xr-x 1 root ossec 6841 May 31 22:34 firewall-drop.sh
```

> ✅ **補足**
> ✅ 
> ✅ - 既存ファイルが存在する場合は上書きで保存してください。


##### > Macro (anchor)

**(2) modsecurity.conf**

「shadan-kun-v2_modsecurity_sh.tar」内のmodsecurity.confを配置します。

```
ファイルパス（例）：
/usr/local/nginx/conf/modsecurity.conf
```

> ✅ **補足**
> ✅ 
> ✅ - ファイルの名称はModSecurityバージョンにより異なります。本手順では**modsecurity.conf**で統一します。
> ✅ - 既存ファイルが存在する場合は上書きで保存してください。


##### **(3) modsecurity.sh**

1.「shadan-kun-v2_modsecurity_sh.tar」内のmodsecurity.shを配置します。

```
ファイルパス：
/var/shadan-kun/active-response/bin/modsecurity.sh

パーミッション：
-rwxr-xr-x 1 root ossec 6841 May 31 22:34 modsecurity.sh
```


2. ご利用環境にあわせてファイル内容を編集します。

| **3行目** | mod_security の設定ファイルのパスを指定  
（記入例）`MODSECURITY_CONF=/usr/local/nginx/conf/modsecurity.conf` |
| --- | --- |
| **7行目** | Webサーバの再起動コマンドを記載  
（記入例）`service nginx reload > /dev/null 2>&1` |


#### STEP4　ログフォーマット変更・ModSecurity有効化

(1)送信元IPアドレスが取得できるようにnginx.confのログフォーマットの変更を行います。

※nginx.conf 記入例： X-Forwarded-Forで送信元IPアドレスを取得

```
log_format  main  '$http_x_forwarded_for $remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent"';
```


(2)nginx.confにModSecurityを有効化する設定を追加します。

load_moduleに「[STEP1-2 (4)](https://csc-document.atlassian.net/wiki/spaces/DRAFTKSK2INST/pages/85262337)」で配置したModSecurity-Nginxコネクタのパスを設定します。

```
load_module /usr/local/nginx/sbin/ngx_http_modsecurity_module.so;
```


ModSecurityを有効にします。

```
modsecurity on;
```


modsecurity_rules_fileに「[STEP3 (2)](https://csc-document.atlassian.net/wiki/spaces/DRAFTKSK2INST/pages/85262337)」で配置したmodsecurity.confのパスを設定します。

```
modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;
```


※nginx.conf 記入例： ModSecurityを有効化する設定

```
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

load_module /usr/local/nginx/sbin/ngx_http_modsecurity_module.so;

events {
    worker_connections  1024;
}

http {
    modsecurity on;
    modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;

    include       mime.types;
    default_type  application/octet-stream;
```


#### STEP5　サービス再起動

(1) Nginxを再起動します。

```
# systemctl restart nginx
```


(2) エージェントを再起動します。

```
# /var/shadan-kun/bin/ossec-control restart
```