CentOS7安装Nginx+ModSecurity

一、介绍

当学习网络安全时,了解和使用安全设备是必不可少的一部分,其中一种常见的安全设备是Web应用防火墙(WAF)。市场上有许多商业化的WAF,但对于学习目的,我推荐使用一款免费开源的WAF,名为ModSecurity。

ModSecurity是一个开源的、跨平台的Web应用防火墙(WAF),被称为WAF界的“瑞士军刀”。它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。

目前已经支持Nginx和IIS,配合Nginx的灵活和高效,可以打造成生产级的WAF,是保护和审核Web安全的利器。

ModSecurity官网下载地址:ModSecurity中文社区,我下载的是ModSecurity v3.0.4的稳定版,v2.9.*的与Nginx存在兼容问题。

二、功能

SQL Injection (SQLi):阻止SQL注入
Cross Site Scripting (XSS):阻止跨站脚本攻击
Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
PHP Code Injectiod:阻止PHP代码注入
HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
HTTPoxy:阻止利用远程代理感染漏洞进行攻击
Sshllshock:阻止利用Shellshock漏洞进行攻击
Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
Scanner Detection:阻止黑客扫描网站
Metadata/Error Leakages:阻止源代码/错误信息泄露
Project Honey Pot Blacklist:蜜罐项目黑名单
GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断

三、安装与配置

1. 安装后续编译所需依赖

yum install -y gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel lmdb-devel libxml2-devel ssdeep-devel lua-devel libtool autoconf automake wget epel-release openssl-devel

2. 安装ModSecurity

mkdir -p /usr/local/modsecurity     // -p(parents):父文件夹不存在就创建,省得一级一级地创建
​
cd /usr/local/modsecurity 
wget http://www.modsecurity.cn/download/modsecurity/modsecurity-v3.0.3.tar.gz
tar -zxvf modsecurity-v3.0.3.tar.gz
​
mv modsecurity-v3.0.3 /usr/local/modsecurity/modsecurity // 改名
​
cd /usr/local/modsecurity/modsecurity
sh build.sh     // 执行build.sh
./configure     // 配置,无其他参数
make && make instal // 编译

3. 安装ModSecurity-Nginx

modsecurity-nginx是 nginx 和 libmodsecurity 之间的连接器,需要安装。

cd /usr/local/
wget https://codeload.github.com/SpiderLabs/ModSecurity-nginx/zip/refs/heads/master
​
yum -y install unzip    // 如果已经有了的话就不必再安装unzip了
unzip  master           
​
mv ModSecurity-nginx-master /usr/local/modsecurity/modsecurity-nginx    // 改名
​

4. 安装Nginx

由于个人原因 需要安装SSL模块 ,如果不需要SSL 可以编译时使用下面 指令进行编译。

./configure --prefix=/usr/local/nginx --add-module=/usr/local/modsecurity-nginx 

开始执行相关命令安装Nginx

mkdir -p /usr/local/nginx
​
cd /usr/local/nginx
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
​
cd /usr/local/nginx/nginx-1.22.1/       // 转到该目录
./configure --prefix=/usr/app/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module --add-module=/usr/local/modsecurity-nginx 
​
make && make install

四、配置

以上安装均全完成,现在进入配置环节,将ModSecurity 下的配置文件 复制到nginx.config 目录,方便后期更改配置。

mkdir -p /usr/local/nginx/conf/modsecurity
cp /usr/local/modsecurity/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurit/modsecurity.conf    // 重命名
cp /usr/local/modsecurity/modsecurity/unicode.mapping  /usr/app/nginx/conf/modsecurity  // 复制文件

1. 配置nginx.conf

vim /usr/local/nginx/conf/nginx.conf

在http或server节点中添加以下内容(在http节点添加表示全局配置,在server节点添加表示为指定网站配置)。

1689927890_64ba40d235608fa4bbc84.png!small?1689927890499

我这里就添加到server节点,因为我添加到http节点时打不开Nginx服务,所以我索性就添加到server节点,大家如果遇到和我一样的问题,也可以换一个节点添加内容。

打开规则引擎SecRuleEngine On

#SecRuleEngine DetectionOnly
SecRuleEngine On

确保ModSecurity在记录审计日志时保存请求体IJ 改为 C

#SecAuditLogParts ABIJDEFHZ
SecAuditLogParts ABCDEFHZ

添加防护规则文件

Include /usr/local/nginx/conf/modsecurity/crs-setup.conf
Include /usr/local/nginx/conf/modsecurity/rules/*.conf

1689927923_64ba40f33185e4231e879.png!small?1689927923151

2.下载防护规则文件

cd /usr/app/modsecurity
wget http://www.modsecurity.cn/download/corerule/owasp-modsecurity-crs-3.3-dev.zip  // 无论是ModSecurity是1.6.1版本还是1.22.1版本都可以用这个规则文件,亲测可用。
unzip owasp-modsecurity-crs-3.3-dev.zip
​
cd owasp-modsecurity-crs-3.3-dev
cp crs-setup.conf.example /usr/local/nginx/conf/modsecurity/crs-setup.conf  // 复制并改名
cp -r rules /usr/app/nginx/conf/modsecurity/
cd /usr/local/nginx/conf/modsecurity/rules
​
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

四、测试

1. 启动Nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
​
注:如果启动不了,试试用systemctl service start Nginx 来启动服务

Nginx 常用命令如下:

# 启动 Nginx
systemctl start nginx
​
# 停止 Nginx
systemctl stop nginx
​
# 重启 Nginx
systemctl restart nginx
​
# 查看 Nginx 状态
systemctl status nginx

2. 测试防护效果

curl -I http://localhost 

返回状态码200,代表正常访问成功,Nginx首页内容:

HTTP/1.1 200 OK
Server: nginx/1.22.1
Date: Wed, 19 Jul 2023 12:43:40 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 19 Jul 2023 11:18:47 GMT
Connection: keep-alive
ETag: "64b7c697-267"
Accept-Ranges: bytes

试一下SQL注入攻击

返回状态码是400,被拦截了,说明WAF起作用了

HTTP/1.1 400 Bad Request
Server: nginx/1.22.1
Date: Wed, 19 Jul 2023 12:45:33 GMT
Content-Type: text/html
Content-Length: 157
Connection: close

至此,在CentOS7中安装ModSecurity+Nginx就结束了,如果有什么不足之处还望指正,谢谢。

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

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

相关文章

SpringMVC自定义注解和使用

一.引言 1.简介: 在Spring MVC中,我们可以使用自定义注解来扩展和定制化我们的应用程序。自定义注解是一种通过Java的注解机制定义的特殊注解,可以应用于控制器类、方法或者方法参数上,以实现不同的功能和行为。(注解…

【小记录】jupyter notebook新版本

手欠升级 😅今天手贱,在anaconda navigator里面更新了最新版本的spyder,然后莫名奇妙地jupyter notebook就打不开了😅,报错说缺少模块”ModuleNotFoundError: No module named jupyter_server.contents“,…

4G版本云音响设置教程腾讯云平台版本

文章目录 4G本云音响设置教程介绍一、申请设备三元素1.腾讯云物联网平台2.创建产品3.设置产品参数4.添加设备5.获取三元素 二、设置设备三元素1.打开MQTTConfigTools2.计算MQTT参数3.使用USB连接设备4.设置参数 三、腾讯云物联网套件协议使用说明1.推送协议信息2.topic规则说明…

解决连接数据库提示:Public Key Retrieval is not allowed

最近在使用新的用户连接mysql时,总是提示:Public Key Retrieval is not allowed 解决方法一:在(连接属性)添加allowPublicKeyRetrievaltrue 解决方法二(不建议):先在cmd上登录

分类预测 | Matlab实现RBF-Adaboost多特征分类预测

分类预测 | Matlab实现RBF-Adaboost多特征分类预测 目录 分类预测 | Matlab实现RBF-Adaboost多特征分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于RBF-Adaboost数据分类预测(Matlab完整程序和数据) 2.多特征输入…

编译工具:CMake(八) | cmake 常用指令

编译工具:CMake(八) | cmake 常用指令 基本指令 基本指令 ADD_DEFINITIONS向 C/C编译器添加-D 定义,比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC),参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #end…

canvas-绘图库fabric.js简介

一般情况下简单的绘制,其实canvas原生方法也可以满足,比如画个线,绘制个圆形、正方形、加个文案。 let canvas document.getElementById(canvas);canvas.width 1200;canvas.height 600;canvas.style.width 1200px;canvas.style.height 6…

C++ - AVL 树 介绍 和 实现 (上篇)

前言 之前我介绍了 二叉搜索树,可看一下博客:C - 搜索二叉树_chihiro1122的博客-CSDN博客 二叉搜索树的效率可以达到 O(log n) 。这个复杂度的算法的效率是非常恐怖的,2 的 30 次方大概是 10亿左右。也就是说 如果用暴力查找 需要找 10 亿次&…

护网行动,最全攻略来啦!!!

随着网络技术的不断发展,网络领域被发现的安全威胁越来越多。 病毒入侵、数据窃取、网络攻击等安全事件时常发生,网络已然成为各国无声较量的重要战略空间。 为应对网络安全威胁,严守网络安全底线,公安部自2016年开始组织多家机构…

Windows:虚拟内存的使用

文章目录 简介如何开启并设置虚拟内存如何查看虚拟内存参考文献 简介 windows里什么是虚拟内存? 其实类似Linux里的交换内存/交换页,即将硬盘上一块空间作为虚拟的内存,当物理内存不足时,则可以将不常用的数据从物理内存中转移到…

Godot 和 VScode配置C#环境注意事项

前言 尽管有些博主会建议如果我们熟悉C#的话,最好还是使用GDscript,而且对于小白上手也相对简单,但是C#的性能终究还是比动态语言好,也相比CPP简单些,尽管现在Godot还是有些问题,比如不像unity那样适配swit…

学习笔记-接口测试(postman、jmeter)

目录 一、什么是接口测试 二、前端和后端 三、get请求和post请求的区别 四、cookie和session 五、接口测试的依据 六、HTTP状态码 七、通用接口用例 八、postman接口测试 九、Jmeter接口测试 一、什么是接口测试 通常做的接口测试指的是系统对外的接口,比…

【Spring面试】八、事务相关

文章目录 Q1、事务的四大特性是什么?Q2、Spring支持的事务管理类型有哪些?Spring事务实现方式有哪些?Q3、说一下Spring的事务传播行为Q4、说一下Spring的事务隔离Q5、Spring事务的实现原理Q6、Spring事务传播行为的实现原理是什么&#xff1f…

MySQL数据库查缺补漏——基础篇

MySQL数据库查缺补漏-基础篇 基础篇 net start mysql80[服务名] net stop mysql80 create database pshdhx default charset utf8mb4; 为什么不使用utf8?因为其字符占用三个字节,有四个字节的字符,所有需要设置为utf8mb4; 数值类型&…

SpringCloud Ribbon--负载均衡 原理及应用实例

😀前言 本篇博文是关于SpringCloud Ribbon的基本介绍,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力…

​​​​MyBatis友人帐之基础入门

一、简介 1.1什么是MyBatis MyBatis 是一个开源的、轻量级的数据持久层框架,它可以简化 JDBC 的操作,让开发者只需要关注 SQL 语句本身,而不用处理加载驱动、创建连接、创建语句等繁琐的过程。 MyBatis 支持自定义 SQL、存储过程和高级映射&…

Kotlin中函数的基本用法以及函数类型

函数的基本用法 1、函数的基本格式 2、函数的缺省值 可以为函数设置指定的初始值&#xff0c;而不必要传入值 private fun fix(name: String,age: Int 2){println(name age) }fun main(args: Array<String>) {fix("张三") }输出结果为&#xff1a;张三2 …

论文笔记 DETR

detr 摘要和引言 2020论文facebook不需要proposal&#xff0c;不需要基于anchor的先验知识(比如预训练的模型)&#xff0c;也不需要NMS进行筛选&#xff0c;直接端到端不需要后处理利用transformer的全局建模能力&#xff0c;看成集合预测问题&#xff0c;不会输出很多冗余的…

浅谈DBT的一些不足之处

DBT的好处是显而易见的&#xff0c;它支持连接多达41种数据库。而且不需要你写DDL语句&#xff0c;只要写select语句&#xff0c;DBT会自动帮你推断schema结构&#xff0c;将数据写入到数据库中&#xff1a; 但是使用了一段时间之后&#xff0c;发现DBT也存在着如下这些不足之处…

竞赛 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE&#xff08;递归特征消除法&#xff09;4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…