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规则:

四、总结

懂思路更重要

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈C++|模板篇

一.模板模板概念 模板就是建立通用的模具,大大提高复用性 模板的特点: 1.模板不可以直接使用,它只是一个框架 2.模板的通用并不是万能的 C另一种编程思想称为泛型编程,主要利用的技术就是模板。 C提供两种模板机制:函数模板和类模…

宋浩概率论笔记(八)假设检验

宋浩系列全系列的最后一更! 本章考察频率很低,核心在于记忆检验不同参数时用到的分布~

【项目实战】【已开源】USB2.0 HUB 集线器的制作教程(详细步骤以及电路图解释)

写在前面 本文是一篇关于 USB2.0 HUB 集线器的制作教程,包括详细的步骤以及电路图解释。 本文记录了笔者制作 USB2.0 HUB 集线器的心路历程,希望对你有帮助。 本文以笔记形式呈现,通过搜集互联网多方资料写成,非盈利性质&#xf…

许战海战略文库|品类缩量时代:制造型企业如何跨品类打造份额产品?

所有商业战略的本质是围绕着竞争优势与竞争效率展开的。早期,所有品牌立足于从局部竞争优势出发。因此,品牌创建初期大多立足于单个品类。后期增长受限,就要跨品类持续扩大竞争优势,将局部竞争优势转化为长期竞争优势,如果固化不前很难获得增…

腾讯mini项目-【指标监控服务重构】2023-07-19

今日已办 OpenTelemetry Logs 通过日志记录 API 支持日志收集 集成现有的日志记录库和日志收集工具 Overview 日志记录 API - Logging API,允许您检测应用程序并生成结构化日志旨在与其他 telemerty data(例如metric和trace)配合使用&am…

Java代码审计16之fastjson反序列化漏洞(1)

文章目录 1、简介fastjson2、fastjson的使用2.1、将类序列化为字符串2.2、将字符串还原为对象2.3、小结以上2.4、稍微扩展思路 3、fastjson漏洞利⽤原理与dnslog4、JdbcRowSetImpl利用链4.1、JdbcRowSetImpl的基本知识4.2、利用代码复现4.3、生成poc4.4、模拟真实场景4.5、利用…

MongoDB差异数据对比的快速指南

MongoDB是一种非关系型数据库,它以灵活的 JSON-like 文档的形式存储数据,这种特性使其在处理大量数据和实现快速开发时更具有优势。而由于其灵活的数据模型和强大的性能,MongoDB 被广泛应用在各种业务场景中。随着业务的发展和数据的增长&…

Excel VLOOKUP 初学者教程:通过示例学习

目录 前言 一、VLOOKUP的用法 二、应用VLOOKUP的步骤 三、VLOOKUP用于近似匹配 四、在同一个表里放置不同的VLOOKUP函数 结论 前言 Vlookup(V 代表“垂直”)是 excel 中的内置函数,允许在 excel 的不同列之间建立关系。 换句话说&#x…

iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机?

iPhone苹果手机15机型区域版本识别代码 CH代码为国行 LL代码为美版 ZP代码为港版 iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机? 1、打开苹果iPhone15手机桌面上的「设置」; 2、在iPhone苹果15手机设置内找到「通用」并点击打开&…

【OJ比赛日历】快周末了,不来一场比赛吗? #09.16-09.22 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 2023-09-16(周六) #3场比赛2023-09-17…

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)

前言 书接上文【FPGA项目】沙盘演练——基础版报文收发_子墨祭的博客-CSDN博客,前面我们做了基础版的报文收发,相信对逻辑设计有了一定的认知,在此基础上,继续完善一个实际报文收发可能会遇到的一些处理: 报文处理握手…

公交查询系统

目录 需求分析 1 概述 2 课题分析 3 实现功能步骤 4 项目背景 概要设计 1 系统流程图. 2 功能模块. 3 各功能模块 4 数据存储 5 类设计 三、详细设计 1公交线路查询系统用户界面 2公交信息存储模快 3公交信息查询模块 4用户信息输入和输出模块 四、调试分析 五、使用说明 六、…

STM32外部复位IC与看门狗冲突,无法复位问题解决方案

使用STM32H743制作了一款飞控,外部复位IC采用MAX809STR,打板完后,烧录飞控固件后大量板子无法正常启动,怀疑是晶振没有起振或MCU未焊接好,检查后均焊接正常,编写裸机LED定时闪烁验证程序可正常运行。经网上查询资料锁定…

Python 环境搭建,集成开发环境IDE: PyCharm

Python 环境搭建,集成开发环境IDE: PyCharm 一、Python 环境搭建二、Python下载三、Python安装四、环境变量配置五、Python 环境变量六、运行Python1、交互式解释器:2、命令行脚本3、集成开发环境(IDE:Integrated Development Environment&am…

Hadoop-Hive

1. hive安装部署 2. hive基础 3. hive高级查询 4. Hive函数及性能优化 1.hive安装部署 解压tar -xvf ./apache-hive-3.1.2-bin.tar.gz -C /opt/soft/ 改名mv apache-hive-3.1.2-bin/ hive312 配置环境变量:vim /etc/profile #hive export HIVE_HOME/opt/soft/hive…

软件测试的基本流程是什么?软件测试流程详细介绍

软件测试和软件开发一样,是一个比较复杂的工作过程,如果无章法可循,随意进行测试势必会造成测试工作的混乱。为了使测试工作标准化、规范化,并且快速、高效、高质量地完成测试工作,需要制订完整且具体的测试流程。 01…

JavaScript的DOM操作(二)

一、元素的特性attribute 1.元素的属性和特性 前面我们已经学习了如何获取节点,以及节点通常所包含的属性,接下来我们来仔细研究元素Element。 我们知道,一个元素除了有开始标签、结束标签、内容之外,还有很多的属性&#xff0…

【算法与数据结构】450、LeetCode删除二叉搜索树中的节点

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题首先要分析删除节点的五种情况: 1、没有找到节点2、找到节点 左右子树为空左子树为空…

微信小程序项目开发Day1

没接触过,直接看视频学习: 千锋教育微信小程序开发制作前端教程,零基础轻松入门玩转微信小程序_哔哩哔哩_bilibili千锋教育微信小程序开发制作前端教程,零基础轻松入门玩转微信小程序共计56条视频,包括:学…

软件工程课件

软件工程 考点概述软件工程概述能力成度模型能力成熟度模型集成软件过程模型逆向工程软件需求需求获取数据流图 需求定义 考点概述 重点章节 软件工程概述 之前老版教程的,之前考过 能力成度模型 记忆 能力等级 和 特点 能力成熟度模型集成 相比于CMM,第…