ModSecurity NGINX 快速入门指南备忘录

起初

理解 ModSecurity 并了解 CRS 的更新方法。
基本上是根据 ModSecurity NGINX 快速入门指南所做的笔记。

将下列内容以中文重述,只需提供一个选项:

积分

    • ModSecurity はルールのDBを使用する

無料:OWASP ModSecurity Core Rule Set
有料:Trustwave 有償ルールセット

ModSecurity 2.9 までは NGINX 環境でパフォーマンスの問題が存在した
ModSecurity 2.9 までは Apache に強く紐づいていたが、3.0 以降はコードを書き換え、Apache 無しで Nginx とネイティブに連携できるようになる
ModSecurity 3.0 のコア機能は libmodsecurity と呼ばれるスタンドアロンエンジンに移動した
ModSecurity dynamic module は libmodsecurity と NGINX connector をシングルパッケージ化している
NGINX Plus distribution はコンパイルされた dynamic module を含む
NGINX OSS ユーザは NGINX version 変更時に毎回コンパイル要

NGINX 安装 ModSecurity 的步骤

    • NGINX(OSS) : コンパイル要

 

    NGINX Plus : NGINXから提供されているコンパイル済み ModSecurity 3.0 dynamic module を利用可能

安装NGINX

事前的准备工作

apt-get install -y apt-utils autoconf automake build-essential \
git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev \
libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev

libmodsecurity は全ての rule と機能を含むコアコンポーネント
2番目のコアコンポーネントは web server に libmodsecurity をリンク(紐づける)コネクタ
コネクタは NGINX 用と Apceh 用で別々に用意している

编译 libmodsecurity

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule init
git submodule update
./build.sh
./Configure
make
make install

通过将 NGINX 连接器下载和动态模块进行编译。

wget https://nginx.org/download/nginx-1.23.3.tar.gz
tar zxvf nginx-1.23.3.tar.gz

cd nginx-1.23.3
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
make modules
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules

修改nginx.conf

    コンパイルした ngx_http_modsecurity_module.so を nginx.conf に追記
# cat /etc/nginx/nginx.conf |grep mod
load_module modules/ngx_http_modsecurity_module.so;

# nginx -t
2023/01/20 03:31:35 [notice] 17570#17570: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/0/0)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
// 設定ファイル確認

# nginx -s reload
2023/01/20 03:32:43 [notice] 17571#17571: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/0/0)
2023/01/20 03:32:43 [notice] 17571#17571: signal process started
// 設定ファイルロード

设置后的操作确认

cat <<EOF > /etc/nginx/conf.d/echo.conf
server {
    location / {
        default_type text/plain;
        return 200 "Thank you for requesting ${request_uri}\n";
    }
}
EOF

# curl -D - http://localhost:80 HTTP/1.1 200 OK

mkdir /etc/nginx/modsec
cd /etc/nginx/modsec
wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
mv modsecurity.conf-recommended modsecurity.conf

ModSecurity的配置

mkdir /etc/nginx/modsec
cd /etc/nginx/modsec
wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
mv modsecurity.conf-recommended modsecurity.conf

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf

cat <<EOF > /etc/nginx/modsec/main.conf
# Include the recommended configuration
Include /etc/nginx/modsec/modsecurity.conf
# A test rule
SecRule ARGS:testparam "@contains test" "id:1234,deny,log,status:403"
EOF

cat <<EOF >/etc/nginx/conf.d/proxy.conf
server {
    listen 80;

    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
    
    location / {
        proxy_pass http://localhost:8085;
        proxy_set_header Host $host;
    }
}
EOF

cp /ModSecurity/unicode.mapping /etc/nginx/modsec/

nginx -t
nginx -s reload

OWASP核心规则集安装

– CRS3 在2016年11月发布。
– crs-setup.conf.example 是CRS的主要配置文件,可设置操作模式等。
– rules/* 是规则文件存储目录。
– 90x文件用于排除误报。
– 91x文件用于检测恶意客户端的规则。
– 92x文件用于检测协议违规的规则。
– 93x和94x文件用于检测应用程序攻击的规则。
– 95x文件用于检测出站数据泄露的规则。
– .data文件用于各种规则所使用的数据。
– 默认情况下,CRS会阻止5分以上的异常分数。

在安装CRS之前,准备漏洞扫描工具。
git clone https://github.com/sullo/nikto

cd nikto
perl program/nikto.pl -h localhost

git clone https://github.com/coreruleset/coreruleset 
cp crs-setup.conf.example crs-setup.conf
echo "Include /etc/nginx/coreruleset/crs-setup.conf" >> /etc/nginx/modsec/main.conf
echo "Include /etc/nginx/coreruleset/rules/*.conf" >> /etc/nginx/modsec/main.conf
// CRS を配置してから再度 nikto を実行して report 数の減少を確認する

“Project Honeypot”是什么?

被称为IP声誉数据库。由社区驱动并管理,将可疑的垃圾邮件发送者、机器人等列入名单。

关于Logging

    ModSecurity はデフォルトで warning 及び error をロギングする
SectionDescriptionAAudit log header(mandatory)BRequest HeadersCRequest bodyDReservedEResponse bodyFResponse headersGReservedHAudit log trailer, which contains additional dataICompact request body alternative (to part C), which excludes filesJInformation on uploaded filesKContains a list of all rules that mathched for the transactionZFinal boundary (mandatory)

在进行生产环境迁移之前

    • Audit ログの無効化(nginx 側のログで十分だから)

 

    静的コンテンツ(.gif|jpg等)は WAF 検査対象から除外する

最后

从git下载ModSecurity的CRS,将crs-setup.conf.example重命名为crs-setup.conf。
可以通过nginx -t & nginx -s reload命令来加载CRS。

ModSecurity在生产环境中的调优重点是禁用日志记录、在Nginx之前引入缓存机制、排除扫描静态内容,以及启用DDOS功能。

不论如何,先通过 DetectionOnly 进行日志确认,然后再调整假阳性的检测结果设置为 On。

广告
将在 10 秒后关闭
bannerAds