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 をロギングする
在进行生产环境迁移之前
-
- 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。