当前位置: 首页 > news >正文

Ubuntu下Nginx配置ModSecurity详细思路及过程

下面是一个简介:

Ubuntu是一个linux操作系统,Nginx是一个web服务器软件,ModSecurity是一款开源的web应用防火墙(江湖人称“WAF”)。

如果上面的概念没有一定的了解,下面的内容其实也能看。就是不好操作。

一、准备

在安装及配置之前,需要做如下准备:

1.1 安装需要的库

在这之前,你应该配置了

[ubuntu的apt源](https://so.csdn.net/so/search/s.do?q=ubuntu的apt源&from=blog)
apt install g++ flex bison curl apache2-dev doxygen libyajl-dev ssdeep liblua5.2-dev libgeoip-dev libtool dh-autoreconf libcurl4-gnutls-dev libxml2 libpcre++-dev libxml2-dev git liblmdb-dev libpkgconf3 lmdb-doc pkgconf zlib1g-dev libssl-dev -y

1.2 下载需要的源码

1.2.1 nginx

链接

如果是编译安装,对源码版本没有要求,如果是动态加载,首先要查看已经安装的好的nginx版本,下载与已安装的nginx版本一致的源码。

nginx -V

1.2.2 Modsecurity

链接 

1.2.3 Modsecurity-nginx

链接

二、编译安装

思路很简单,就是目前你还没有安装nginx,直接通过编译nginx源码。来生成nginx服务器,在生成的过程中,直接将模块配置好。

2.1 编译Modsecurity

通过下面的步骤,会在当前系统中安装libmodsecurity库。

# 解压源码文件
tar -xvzf modsecurity-v3.0.10.tar.gz# 切换到源码目录
cd modsecurity-v3.0.10# 构建
./build.sh# 配置
./configure# 生成
make# 安装
make install

2.2 编译安装nginx

此方法直接将modsecurity-nginx与nginx一直编译

# 源码下载,可以按自己喜欢的方式来
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
wget https://nginx.org/download/nginx-1.25.2.tar.gz# 解压源码
tar xzf nginx-1.25.2.tar.gz# 创建一个专门的用户
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx#切换到nginx源码目录
cd nginx-1.25.2# 配置
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-compat --with-http_ssl_module --with-http_realip_module --add-dynamic-module=/root/ModSecurity-nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log# 生成
make# 生成模块
make modules# 安装nginx
make install# 创建一个软链接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/# 测试nginx 安装情况
nginx -V

 2.3 配置

2.3.1 配置nginx支持modsecurity

在nginx的主要配置文件中,添加如下内容:

1. 在http模块前添加下面命令加载模块

load_module modules/ngx_http_modsecurity_module.so;

2. 在server模块中添加如下命令:

modsecurity  on;
modsecurity_rules_file  /your rule file path/modsecurity.conf;

以下是我在安装时的配置文件及命令:

命令:

# 备份配置文件
cp /usr/local/nginx/conf/nginx.conf{,.bak}# 编辑配置文件
nano /usr/local/nginx/conf/nginx.conf# 将modsecurity的配置文件添加到指定的位置
cp ~/modsecurity-v3.0.8/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf# modsecurity配置所需要的另一个文件
cp ~/modsecurity-v3.0.8/unicode.mapping /usr/local/nginx/conf/

nginx.conf 配置文件内容如下:

# 加载模块 
load_module modules/ngx_http_modsecurity_module.so;
user  nginx;
worker_processes  1;
pid        /run/nginx.pid;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  nginx.example.com;# 启用模块modsecurity  on;# 加载模块配置文件modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;access_log  /var/log/nginx/access_example.log;error_log  /var/log/nginx/error_example.log;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

测试nginx的配置文件:

sudo nginx -t

 

 2.3.2 配置modsecurity

修改刚才添加到指定位置的modsecurity的配置文件modsecurity.conf:

modsecurity.conf将SecRuleEngine 修改为如下的参数

# SecRuleEngine DetectionOnly
SecRuleEngine on

 同时,下载规则文件:

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs/
cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}

modsecurity.conf中添加如下的参数:

Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf

测试:

nginx -t

 

三 Nginx动态配置

 动态配置与编译配置只有一点不一样,需要自己生成模块。具体生成的的流程如下:

3.1 流程简介

setp 1: 安装nginx,如下命令:

sudo  apt install nginx

查看nginx版本: 

nginx -V

setp 2: 下载好需要的源码。

setp 3: 编译安装Modsecruity,见2.1

setp 4: 编译生成Modsecurity-nginx,见3.2

setp 5: 配置nginx支持modsecurity,具体思路见2.3.1

setp 6: 配置modsecurity,见2.3.2

3.2 生成模块

进入nginx源码目录 。

cd nginx-1.18.0/

 配置模块:

./configure --with-compat --add-dynamic-module=../ModSecurity-nginx

编译生成:

make modules

 复制模块到nginx的模块目录下:

cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules

objs:nginx源码目录下放置生成模块的位置

/usr/share/nginx/modules:nginx应用放置模块的位置。

此处稍微详细的说明一下。在我安装完nginx后,其模块配置是通过一个个单独的配置文件引入的。

首先可以看下在服务器中的模块位置并不是 /usr/share/nginx/modules

 而在 /usr/share/nginx/modules中的包含的文件如下:

其中配置文件的内容如下:

 那么这个文件在那里使用呢?

通过下图可以看到,这些文件通过软链接链接到/etc/nginx/modules-enabled/文件夹下面。

 而这些文件则通过nginx的主配置文件进行包含,从而完成模块的动态加载。

以上是模块动态加载的详细分析,后面模块的配置参见2.3.2 

三、测试

现在是对同一个包含有sql注入的请求的在打开规则和没有打开规则的测试:

未打开规则 :

正常响应nginx的欢迎页面。

打开modsecurity规则:

四、总结

懂思路更重要

相关文章:

Ubuntu下Nginx配置ModSecurity详细思路及过程

下面是一个简介: Ubuntu是一个linux操作系统,Nginx是一个web服务器软件,ModSecurity是一款开源的web应用防火墙(江湖人称“WAF”)。 如果上面的概念没有一定的了解,下面的内容其实也能看。就是不好操作。…...

入职美团近三个月,闲聊几句

校招入职美团近3个月,随便聊聊 今天和组内的小伙伴们团建来着,聊了很多,感触颇深,碎碎念一下。 作为组内的唯一的校招生,刚入职时面对复杂的业务,各种不熟悉的工具,真的是一脸懵。至少对我自己…...

setInterval倒计时切换页面后不准

背景 最近在做一个倒计时时,发现当切换浏览器tab后,再切回倒计时页面,倒计时的数据不准,比真正的剩余时间多,短时间还好,时间长了,计时器的误差会很大。 原因 倒计时是用setInterval每1000毫…...

信息安全三级概述

信息安全三级概述...

深入JVM:探索Java虚拟机

文章目录 1. JVM简介1.1 定义与核心作用1.2 JVM的跨平台特性 2. JVM内部结构深度探索2.1 类加载机制2.1.1 双亲委派模型2.1.2 OSGI框架2.1.3 类加载器分类 2.2 JVM运行时数据区2.2.1 程序计数器2.2.2 本地方法栈2.2.3 Java虚拟机栈 2.2.4 堆2.2.5 元数据区 2.3 JVM内存区域的性…...

【计算机网络】 RTT和RTO

文章目录 RTT——往返时延RTO(Retransmission Timeout)——超时重传时间 RTT——往返时延 RTT(Round-Trip Time)是计算机网络中的一个重要的性能指标,表示从发送端发送数据开始,到发送端接收到来自接收端的…...

Zabbix监控组件及流程

Zabbix 由5大组件构成 Zabbix Web、Zabbix Server、Zabbix Proxy、Zabbix Database、Zabbix Agent Zabbix监控系统具体监控系统流程如图: Zabbix Web Zabbix Web是基于PHP语言编写的WEB UI界面,展示Zabbix整个监控平台监控数据、配置信息、方便对整个…...

Type-C协议Ver2.0(学习笔记)

题记 本文以TYPE-C协议Ver2.0版本为基础,以直译为主,同时备注作者学习中遇到的问题与理解,如发现文中描述和协议原文有误,欢迎批评指正,感谢! 1 简介 随着USB接口的持续成功,需要调整USB技术…...

智慧工地:实现作业区域安全管控

智慧工地是围绕工程现场人、机、料、法、环及施工过程中质量、安全、进度、成本等各项数据满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效。 建设工程安全文明施工与质量提升,全方位的监测施工人员、各类器械设备、消防安全隐患,并提前对风险进行预警…...

【Unity插件】实现多人在线游戏——Mirror插件的使用介绍

文章目录 前言导入Mirror插件 简单介绍一、RPC调用二、错误注意 基本使用一、创建场景的网络管理器二、创建一个玩家三、添加玩家初始生成位置四、玩家控制五、同步摄像机六、同步不同角色的名字和颜色修改七、同步动画八、同步子弹方法一方法二 九、聊天功能十、场景同步切换十…...

GeoSOS-FLUS未来土地利用变化情景模拟模型

软件简介 适用场景 GeoSOS-FLUS软件能较好的应用于土地利用变化模拟与未来土地利用情景 的预测和分析中,是进行地理空间模拟、参与空间优化、辅助决策制定的有效工 具。FLUS 模型可直接用于: 城市发展模拟及城市增长边界划定;城市内 部高分…...

IntelliJ IDEA使用_Debug操作

文章目录 版本说明图标和快捷键查看变量计算表达式条件断点多线程调试 版本说明 当前的IntelliJ IDEA 的版本是2021.2.2(下载IntelliJ IDEA) ps:不同版本一些图标和设置位置可能会存在差异,但应该大部分都差不多。 图标和快捷键…...

市场的新宠:4G智能手表

现在人们提到智能手表,健康监测、运动记录、接打电话等定是他不可或缺的功能,而其中通讯功能在绝大数多的智能手表上都是通过蓝牙实现的,需要让手表通过蓝牙连接到手机端来进行。在没有手机的情况下,配置再高的蓝牙智能手表也是“…...

Pytorch Advanced(一) Generative Adversarial Networks

生成对抗神经网络GAN,发挥神经网络的想象力,可以说是十分厉害了 参考 1、AI作家 2、将模糊图变清晰(去雨,去雾,去抖动,去马赛克等),这需要AI具有“想象力”,能脑补情节; 3、进行数…...

Python实操如何去除EXCEL表格中的公式并保留原有的数值

import xlwings as xw app xw.App(visibleTrue, add_bookFalse) # 创建一个不可见的Excel应用程序实例 wb app.books.open(rE:\公式.xlsx) # 打开Excel文件 sheet wb.sheets[DC] # 修改为你的工作表名称 # 假设需要清除公式的范围是A1到B10range_to_clear sheet.range(A…...

MFC串口通信控件MSCOMM32.OCX的安装注册

MSCOMM32.OCX是一个与Microsoft Corporation开发的MSComm控件相关联的文件。MSComm控件是软件应用程序用来与调制解调器、条形码读取器和其他串行设备等设备建立串行通信的通信控件。 下载地址1 https://download.csdn.net/download/m0_60352504/88345092 下载地址2 https://ww…...

27.顺序表练习题目(1)(2023王道数据结构2.2.3前8题)

【这里所有解答都写的是全部代码,目的是让大家能够直接复制上手运行,感受代码的运行过程,而不单单只是写了一个函数】 试题1:(王道2023数据结构综合应用题1) 从顺序表中删除具有最小值的元素(…...

Unity VideoPlayer 指定位置开始播放

如果 source是 videoclip(以下两种方式都可以): _videoPlayer.Play();Debug.Log("time: " _videoPlayer.clip.length);_videoPlayer.time 10; [SerializeField] VideoPlayer videoPlayer;public void SetClipWithTime(VideoClip…...

美团多场景建模的探索与实践

本文介绍了美团到家/站外投放团队在多场景建模技术方向上的探索与实践。基于外部投放的业务背景,本文提出了一种自适应的场景知识迁移和场景聚合技术,解决了在投放中面临外部海量流量带来的场景数量丰富、场景间差异大的问题,取得了明显的效果…...

第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…...

React中的页面跳转方式详解

在React中,页面跳转通常通过路由来实现。React有多种路由库可供选择,其中最常用的是React Router。React Router提供了几种不同的跳转方式,包括使用组件进行页面跳转、使用组件进行重定向,以及使用编程式导航进行跳转。 使用组件进…...

Golang代码漏洞扫描工具介绍——govulncheck

Golang Golang作为一款近年来最火热的服务端语言之一,深受广大程序员的喜爱,笔者最近也在用,特别是高并发的场景下,golang易用性的优势十分明显,但笔者这次想要介绍的并不是golang本身,而且golang代码的漏洞…...

第31章_瑞萨MCU零基础入门系列教程之WIFI蓝牙模块驱动实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...

arkworks工具栈概览

1. 引言 arkworks定位为zkSNARK编程的Rust生态。其开源代码见: https://github.com/arkworks-rs/ arkworks目前已广泛用于大量项目中,如:Aleo、anoma、celo、Espresso、Findora、Manta、Mina、Nimiq、penumbra等等。 参与arkworks开源实现…...

华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。

现象: 系统出现异常,手动执行过程提示如上。 问题排查: 1.直接执行的过程事务挂起(排除) 2.重启数据库实例(重启后无效) 3.过程中套用过程,套用的过程中使用事务,因为…...

二刷力扣--字符串

字符串 摘自Python文档-标准库: 在Python中, 字符串是由 Unicode 码位构成的不可变序列。 由于不存在单独的“字符”类型,对字符串做索引操作将产生一个长度为 1 的字符串。 也就是说,对于一个非空字符串 s, s[0] s[0:1]。 不存…...

如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用

推荐:使用NSDT场景编辑器快速搭建3D应用场景 概述 在这篇博文中,引用了几种文件扩展名和模型格式。在开始之前,最好了解以下内容: OBJ – 对象文件,一种标准的 3D 图像格式,可以通过各种 3D 图像编辑程序…...

零基础学前端(四)重点讲解 CSS

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 3. 初学者切忌,不要眼花缭乱,不要四处找其它文档,要坚定一个教授者的方式,将其学通透&#xff…...

类和对象【初始化列表与友元】

全文目录 初始化列表特性 explicit关键字static成员特性 友元友元函数友元类内部类特性 初始化列表 构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。 对象的初始化是在初始化列表进行…...

太阳能 技术支持 东莞网站建设/如何优化网站快速排名

梦晨 明敏 发自 凹非寺量子位 | 公众号 QbitAI一觉醒来,机器学习社区炸了锅。因为最新研究发现,只要对GPT-3说一句“让我们一步一步地思考”,就能让它正确回答出以前不会的问题。比如下面这个例子:16个球中有一半是高尔夫球&#…...

兼职做任务赚钱的网站有哪些/最新搜索引擎排名

1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 618 Solved: 217[Submit][Status]Description 农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个…...

哪做网站最好/如何让网站快速收录

环境变量一些命令shell脚本中经常出现各种环境变量,因此要写脚本,必须先来了解环境变量.常见的处理环境变量的命令,列举在下面set 用来显示本地变量env 用来显示环境变量export 用来显示和设置环境变量source 后面跟一个文件,可以直接执行文件里的脚本命令并更新常见的环境变量…...

建设一个企业网站到底要多少钱/广州今日新闻头条新闻

渐变边框可以使用border-image&#xff0c;但带有圆角的渐变边框单靠border-image却无法实现&#xff0c;那有哪些方法可以实现圆角渐变边框呢&#xff1f;css实用小知识&#xff0c;你肯定用得上 方案一&#xff1a;使用border-imageclip-path实现 <style> .radius-gra…...

网站推广优化如何做/北京seo学校

拆书&#xff0c;读书&#xff0c;帮你选技术书。橡皮擦 “读” “选” 技术书。 打开任意一个购书网站都包含着大量的技术书籍&#xff0c;如何选到一本好技术书成了我们打工人的难题。 很早以前萌生过这样一个想法&#xff0c;如果有人帮我先读一下技术书籍&#xff0c;告诉…...

bs系统做的网站有什么特点/爱链接

2019独角兽企业重金招聘Python工程师标准>>> 近期的一个项目中用到将oracle blob转换为base64的字符串 //转换成base64编码&#xff08;不换行&#xff09;需要commons-codec1.5jar //换行使用encoder.encode(user.getZp()); Action中 String cardBase64encoder.enc…...