公式サイトはこちら。
この通りにやれば動きます。
https://computingpost.medium.com/how-to-install-modsecurity-3-with-nginx-on-almalinux-9-cfc69fecc4b4
パッケージマネージャーデフォルトでないnginxをインストール
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 33 |
# インストール済みのnginxを削除 dnf remove nginx dnf install dnf-utils -y # nginxレポジトリを設定 tee /etc/yum.repos.d/nginx-mainline.repo<<EOF [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/9/x86_64/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF tee /etc/yum.repos.d/nginx-stable.repo<<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/9/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF # nginx インストールする yum-config-manager --enable nginx-mainline dnf -y install nginx systemctl start nginx systemctl enable nginx nginx -v |
nginxソースをダウンロードする
modsecurityをコンパイルするためにnginxのソースを落としてくる
1 2 3 4 5 6 7 8 9 10 |
# nginxソースダウンロード mkdir /usr/local/src/nginx && cd /usr/local/src/nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz tar xvzf nginx-1.25.3.tar.gz # 解凍確認 ls # ファイルが解凍されている nginx-1.25.3 nginx-1.25.3.tar.gz |
mod securityインストール
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 |
dnf install git -y # mod git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/ cd /usr/local/src/ModSecurity/ # epelインストール dnf -y install epel-release dnf -y install epel-next-release # 依存モジュールをインストール dnf install doxygen yajl-devel gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pcre-static pkgconfig libtool httpd-devel redhat-rpm-config wget curl openssl openssl-devel geos geos-devel geocode-glib-devel geolite2-city geolite2-country nano -y # remiインストール dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y # 依存モジュールインストール dnf --enablerepo=remi install GeoIP-devel -y # gitsubmoduleを最新化する git submodule init git submodule update # ビルドする ./build.sh ./configure make make install |
ModSecurity-nginxをインストール
1 2 3 4 5 6 7 8 |
# modsecurity-nginxをダウンロード git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/ # コンパイル cd /usr/local/src/nginx/nginx-1.25.3/ ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx make modules cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/ |
nginx.confにmodsecurityモジュールを読み込ませる
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 |
# nginx.confを編集 vim /etc/nginx/nginx.conf # ngixn.confの先頭に追記 load_module modules/ngx_http_modsecurity_module.so; # serverセクションに追記 modsecurity on; modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf; # modsecurity.confをテンプレートからコピー mkdir /etc/nginx/modsec/ cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf # modsecurity.confを編集 vim /etc/nginx/modsec/modsecurity.conf # 7行目を変更 SecRuleEngine DetectionOnly # 246行目を変更 SecAuditLogParts ABCEFHJKZ # modsec-config.confを編集 vim /etc/nginx/modsec/modsec-config.conf # 以下を追記 include /etc/nginx/modsec/modsecurity.conf # unicode.mappingをコピー cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/ |
nginx起動
1 2 3 4 5 6 7 8 9 |
# nginxコンフィグチェック nginx -t # successfulと出ればOK nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # nginx再起動 systemctl restart nginx |
owaspzapルールセットを設定する
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 |
cd /etc/nginx/modsec # version指定しても良いがstable版をインストールするとよい wget https://github.com/coreruleset/coreruleset/archive/refs/tags/nightly.zip # 解凍 unzip nightly.zip -d /etc/nginx/modsec # コンフィグをテンプレからコピー cp /etc/nginx/modsec/coreruleset-nightly/crs-setup.conf.example /etc/nginx/modsec/coreruleset-nightly/crs-setup.conf # /etc/nginx/modsec/modsec-config.confを設定 vim /etc/nginx/modsec/modsec-config.conf # 追記 include /etc/nginx/modsec/coreruleset-nightly/crs-setup.conf include /etc/nginx/modsec/coreruleset-nightly/rules/*.conf # コンフィグのsyntaxチェック nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # nginx再起動 systemctl restart nginx |
動作確認
403Forbiddenが帰ってくるので動いている。
1 2 3 4 5 6 7 |
[root@mod-security ~]# curl localhost/index.html?exec=/bin/bash -I HTTP/1.1 403 Forbidden Server: nginx/1.25.3 Date: Mon, 08 Jan 2024 16:54:18 GMT Content-Type: text/html Content-Length: 153 Connection: keep-alive |