基于 Nginx + ModSecurity V3 实现对 web 流量的安全访问控制
off999 2025-01-06 14:49 28 浏览 0 评论
ModSecurity
- ModSecurity 是一个开源的、跨平台的 Web 应用防火墙,它可以通过检查 Web 服务器收发的数据来对网站流量进行安全防护
- 最初设计 ModSecurity 项目时,它只是一个 Apache 模块。随着时间的推移,该项目已经扩展到支持其他平台, 如 Nginx; 为了满足对额外平台支持不断增长的需求,有必要删除该项目底层的 Apache 依赖项,使其更加独立于平台
- 当前 ModSecurity v3 由 Libmodsecurity(对 ModSecurity 平台的完全重写) 和 对应 web 服务器的连接器(模块)组成
- 请求处理阶段 Request Headers、Request Body、Response Headers、Response Body、Logging
组件版本
- nginx v1.20.1
- libmodsecurity v3.05
- ModSecurity-nginx v1.0.2
- coreruleset v3.3.2
- CentOS Linux release 7.6.1810 (Core)
libmodsecurity
基于 SecRules 的 web 流量处理引擎, 提供了加载/解释与 ModSecurity SecRules 格式编写的规则的能力
1、安装 libmodsecurity 所需依赖库
# 安装依赖
yum install -y epel-release git gcc gcc-c++ autoconf libtool pcre-devel libxml2-devel curl-devel yajl-devel flex-devel lua-devel lmdb-devel ssdeep-devel
# 安装依赖项 libmaxminddb
wget -c https://github.com/maxmind/libmaxminddb/releases/download/1.6.0/libmaxminddb-1.6.0.tar.gz
./configure
make && make install
2、下载编译安装 libmodsecurity v3.05
git clone https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
# 下载 libInjection
git submodule init
git submodule update
# 开始构建, 默认安装位置 /usr/local/modsecurity/
./build.sh
./configure && make && make install
# 备注: ./build.sh 执行中提示 `fatal: No names found, cannot describe anything.` 暂时忽略
modsecurity-nginx
nginx 和 libmodsecurity 之间的连接器, 其实就是一个第三方 Nginx 模块, Nginx 可以通过静态或动态方式加载该模块
1、Nginx 的编译安装
wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar xzf nginx-1.20.1.tar.gz && cd nginx-1.20.1
yum install openssl-devel
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-dynamic-module=../ModSecurity-nginx
make -j4
mkdir /var/cache/nginx/ && useradd -r nginx && mkdir /etc/nginx/modules
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
# nginx 配置文件首行添加如下配置, 全局加载该模块
load_module modules/ngx_http_modsecurity_module.so;
2、添加 modsecurity 相关配置文件 modsecurity.conf, main.conf
# 创建配置文件 modsecurity.conf
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.conf 中的对应配置项
vim /etc/nginx/modsec/modsecurity.conf
SecRuleEngine On # 默认 DetectionOnly(开启规则匹配,但不执行任何拦截操作), On(开启规则匹配并进行相应的拦截)
#SecUnicodeMapFile unicode.mapping 20127 # 默认启用, 现变更为注释该行
# 创建主配置 main.conf 及自定义规则
cat > /etc/nginx/modsec/main.conf << EOF
Include /etc/nginx/modsec/modsecurity.conf
# 自定义安全规则, 参数 x 值中包含 test 字符串, 则返回 403 状态
SecRule ARGS:x "@contains test" "id:1234,deny,log,status:403"
SecUploadFileLimit 15 # 配置在multipart POST中处理的最大文件上传数量
EOF
# 在 Nginx 的 server 上下文中添加如下配置
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
3、完整的 Nginx 配置文件如下
cat /etc/nginx/nginx.conf
load_module modules/ngx_http_modsecurity_module.so;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
location / {
root html;
index index.html index.htm;
}
}
}
OWASP
OWASP ModSecurity 核心规则集 (CRS) 是一组通用攻击检测规则, 用于 ModSecurity 或兼容的 Web 应用程序防火墙; CRS 旨在保护 Web 应用程序免受包括 OWASP 前十名在内的各种攻击, 同时将错误警报降至最低
1、在 Modsecurity 中启用 OWASP 核心规则集
# 下载部署 crs
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.tar.gz
tar xzf v3.3.2.tar.gz && cd cd coreruleset-3.3.2/
cp crs-setup.conf.example crs-setup.conf && cd ..
mv coreruleset-3.3.2/ /etc/nginx/modsec/crs3
# 在主配置文件 main.conf 中引用 modsecurity 及 crs 配置
cat > /etc/nginx/modsec/main.conf << EOF
# modsecurity 基本配置
Include /etc/nginx/modsec/modsecurity.conf
# OWASP CRS v3 rules
Include /etc/nginx/modsec/crs3/crs-setup.conf
Include /etc/nginx/modsec/crs3/rules/*.conf
# 自定义规则集
SecRule ARGS:x "@contains test" "id:1234,deny,log,status:403"
EOF
安全验证
1、请求参数 x 不包含字符串 test 的请求, 返回状态 200 http://192.168.31.66/?x=wyun
2、请求参数 x 包含非法字符串 test 的请求, 返回状态 403 http://192.168.31.66/?x=wyuntest
# 在 /var/log/nginx/error.log 中可以看到拦截的详细日志
2021/09/13 19:28:06 [error] 24702#24702: *7 [client 192.168.31.220] ModSecurity: Access denied with code 403 (phase 1). Matched "Operator `Contains' with parameter `test' against variable `ARGS:x' (Value: `test11' ) [file "/etc/nginx/modsec/main.conf"] [line "3"] [id "1234"] [rev ""] [msg ""] [data ""] [severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "192.168.31.66"] [uri "/"] [unique_id "1631532486"] [ref "o0,4v8,6"], client: 192.168.31.220, server: localhost, request: "GET /?x=test11 HTTP/1.1", host: "192.168.31.66"- 上一篇:我的Python_WEB服务器简单配置
- 下一篇:Nginx反向代理
相关推荐
- win7激活在哪里输入激活码(win7系统激活在哪输入激活码)
-
1、右键桌面上的计算机选择“属性”打开。 2、在打开窗口最下方显示需要立即激活Windows,点开激活链接。 3、在弹出的激活窗口中,输入win7激活密钥。 4、激活过程将需要一些时间,请稍候...
- pp助手ios安装官网(pp助手ios版官网网址)
-
为了安装苹果手机pp助手,您需要按照以下步骤进行:1.在您的苹果手机上打开Safari浏览器。2.在浏览器中搜索“pp助手”并打开官方网站。3.下载并安装pp助手。4.一旦下载完成,您需要在“设置”中...
- 笔记本电脑cpu温度高(笔记本电脑CPU温度高怎么设置自动降温)
-
1、小心拆开背盖,清理风扇和排风口,肯定风扇叶片都积满灰尘了,排风口都堵死了。2、清理干净后给本子配个空调,外置风扇就可以,35左右,尤其长时间用一定要加装。3、彻底杀毒。有些病毒也会引起高温。估计到...
-
- 关闭windows更新(组策略关闭windows更新)
-
1、点击左下角开始菜单2、接着点击设置3、点击Windows更新,接着点击高级选项4、点击WindowsUpdate,接着在启动类型中选择禁用,最后点击确定即可1.按Win+R打开运行,输入”services.msc“打开服务。2.找到/...
-
2025-12-08 06:03 off999
- 电脑装linux系统教程(电脑如何装linux系统)
-
1.选择“中文(简体)”,然后点击“安装Ubuntu”。2.点击“继续”。3.然后点击“现在安装”。4.选择地址的时区,然后点击“继续”。5.选择“汉语”,然后点击“继续”。6.输入用户的名字。7.设...
- 文件恢复助手免费(文件恢复助手破解版)
-
文件传输助手删除的信息是不能再进行找回的。查看文件传输助手信息记录的具体操作步骤如下1、首先在手机上点击打开微信应用程序,然后在此应用程序的页面上点击右上角的放大镜图案。2、接着在此页面的搜索栏内输入...
-
- 智能拼音输入法打字(使用智能拼音输入法)
-
要想拼音快速打字,首先你得下载一个适合自己的输入法软件,比如讯飞输入法。每一个输入法软件都带有自动“存储记忆”功能,当你频道输入三次以上,下一次直接就打拼音首字母就可以了。比如:wochifanla。下次打首字母:wcfl。这样就可以...
-
2025-12-08 04:51 off999
- windows系统xp下载(windows系统xp下载官网)
-
下载地方很多的哦,可以安装大番茄一键重装系统,大白菜一键重装系统等重装软件,还可以到系统之家官网下载。也可以买U盘,用U盘进行安装。附:系统之家链接:http://www.xitongzhi...
-
- sd卡怎样格式化(sd卡怎么格式化为内部存储)
-
打开手机设置,点击运存与存储空间。点击格式化SD卡。点击底部的格式化SD卡,等待格式化完成。内存卡怎么格式化1、首先需要将内存卡插在读卡器上,然后插在电脑的USB接口。、2、在电脑上打开此电脑,可以看到读取了内存卡。3、右键点击内存卡,选择...
-
2025-12-08 03:03 off999
- 手机网速太慢了(手机怎么显示网速)
-
1、首先查看手机当前网络情况,在上方信号烂边上的显示,是否为4G,若是3G或者2G(E),根据手机制式设置开启4G网络,同时需要SIM卡也支持哦。开启4G后,上网速度明显提升。2、APN设置:有些网站...
- 电脑摄像头驱动异常怎么办(电脑摄像头驱动异常怎么办啊)
-
1.开始菜单打开或者双击桌面图标打开360驱动大师2.点击全面诊断。3.等待诊断完成,找到需要修复的,点击修复即可。4.点击驱动安装,可以找到可更新的驱动,点击升级即可。 4、接着我们点击主界面上面...
- 不是有效的win32应用程序简单解决办法
-
该错误通常发生在Windows操作系统上运行APK文件或未正确安装软件的情况下。要解决这个问题,可以尝试下载并安装适用于操作系统的相关软件,或者尝试通过安装或更新相关驱动程序来修复。同时,确保从可信的...
- 什么平板好(什么平板好用性价比高又便宜)
-
性价比高的平板电脑推荐:iPad8、联想小新Pad、华为MatePadPro、荣耀平板V6、Apple苹果ipadmini52019款。1、iPad8性能方面,它搭载的是苹果A1的处理器,...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
使用 python-fire 快速构建 CLI_如何搭建python项目架构
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
