百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

基于 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"

相关推荐

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更新)
关闭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

怎样用手机做word文档(手机怎么做word文档)
  • 怎样用手机做word文档(手机怎么做word文档)
  • 怎样用手机做word文档(手机怎么做word文档)
  • 怎样用手机做word文档(手机怎么做word文档)
  • 怎样用手机做word文档(手机怎么做word文档)
windows系统xp下载(windows系统xp下载官网)

下载地方很多的哦,可以安装大番茄一键重装系统,大白菜一键重装系统等重装软件,还可以到系统之家官网下载。也可以买U盘,用U盘进行安装。附:系统之家链接:http://www.xitongzhi...

sd卡怎样格式化(sd卡怎么格式化为内部存储)
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的处理器,...

取消回复欢迎 发表评论: