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

news2024/11/20 11:58:58

下面是一个简介:

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.coloradmin.cn/o/1010910.html

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

相关文章

(典题)线段计数 CF690 div3 F

Problem - F - Codeforces 题意: 思路: 这题没什么性质可言,可以说就是纯纯的套路题 既然存在一条线段和其他所有线段相交,不知道是哪条线段,考虑枚举这条线段,然后计数没有交点的线段个数,取…

输电线路故障诊断(Python代码,逻辑回归、决策树、随机森林、XGBoost和支持向量机五种不同方法诊断)

效果视频:输电线路故障诊断(Python代码,逻辑回归、决策树、随机森林、XGBoost和支持向量机五种不同方法诊断)_哔哩哔哩_bilibili 1.数据 仿真平台 仿真模型分别获取单相接地故障、两相接地故障、两相间短路故障、三相接地故障、…

通过多个url下载合并zip包

在网上随便找两个网络URL入参 {"fileUrls": ["url1","url2","url3""zipName":"xxxx" }Overridepublic void getUrlsToZip(UrlDownLoadFileParam urlDownLoadFileParam,HttpServletResponse response ) throws Ex…

排序算法-归并排序

属性 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序&#…

k8s集群中部署服务之部署描述文件准备

微服务部署描述文件Deploy.yaml 一、各微服务创建部署描述文件 1.1 mall-auth-server --- apiVersion: apps/v1 kind: Deployment metadata:name: mall-auth-servernamespace: sangomalllabels:app: mall-auth-server spec:replicas: 1selector:matchLabels:app: mall-auth-s…

生产消费者模型的介绍以及其的模拟实现

目录 生产者消费者模型的概念 生产者消费者模型的特点 基于阻塞队列BlockingQueue的生产者消费者模型 对基于阻塞队列BlockingQueue的生产者消费者模型的模拟实现 ConProd.c文件的整体代码 BlockQueue.h文件的整体代码 对【基于阻塞队列BlockingQueue的生产者消费者模型…

css 清除浮动方案

清除浮动的三种方案 1. 第一种方案&#xff08;overflow: hidden&#xff09;2. 第二种方案&#xff08;clear&#xff1a;both&#xff09;3. 第三种方案&#xff08;为元素&#xff09; 1. 第一种方案&#xff08;overflow: hidden&#xff09; <style>.container {bac…

以AI对抗AI,大模型安全的“进化论”

点击关注 文丨刘雨琦&#xff0c;编&#xff5c;王一粟 “互联网时代&#xff0c;我们是更危险&#xff0c;还是更安全&#xff1f;” 2016年&#xff0c;互联网正值高速发展之际&#xff0c;电梯广告经常出现这几个大字&#xff0c;两行标语&#xff0c;从病毒木马到网络诈骗…

焕发生机|嵌入式存储eMMC原理解析

1.EMMC背景回顾 EMMC存储的发展历史可以追溯到1997年&#xff0c;当时该技术是为了解决移动设备中存储器的问题而提出的。当时移动设备的存储器主要是NOR flash&#xff0c;这种存储器虽然读写速度快&#xff0c;但是造价高、容量小&#xff0c;不适合大规模应用。而EMMC的出现…

JWT安全及案例实战

文章目录 JWT 安全1. Cookie2. Session3. Token4. JWT4.1 JWT概述4.1.1 JWT头4.1.2 有效载荷4.1.3 签名哈希4.1.4 通信流程 4.2 JWT 漏洞描述4.3 JWT 漏洞原理4.4 JWT 安全防御 5. WebGoat 靶场实验5.1 第四关5.2 第五关5.3 第七关 越权与逻辑漏洞 Web漏洞点只有一个入口&#…

Vue开发小注意点

改bug 更改了配置项啥的&#xff0c;保存刷新发现没变&#xff0c;那就重启项目&#xff01;&#xff01;&#xff01;&#xff01; binding.value 和 e.target.value binding.value Day5 指令的值 e.target.value Day4 表单组件封装 binding.value 和 e.target.valu…

hiredis在vs2010上编译不通过

下载源代码 https://github.com/redis/hiredis 然后单独创建pro文件&#xff0c;将相应的.c和.h文件加进去。 然后使用vs2010&#xff08;带有qt插件&#xff09;打开.pro文件&#xff0c;编译报错 上面的为C99语法&#xff0c;而vs2010不支持。只能选择 https://github.com/…

API原理概念篇(六)玩转正则表达式等常用API

一 玩转正则表达式等常用API ① 正则 1、openresty存在两套正则表达式规范1) lua自身独有的正则规范 备注&#xff1a;大约有5%&#xff5e;15%性能损耗损耗原因&#xff1a;表达式compile成pattern,并不会被缓存,每次都会被重新compile编译2) nginx的符合POSIX规范的PCR…

[Hadoop] start-dfs.sh ssh报错

Permission denied (publickey 决解方案 相关命令 cd ~/.sshssh-keygen -t rsa -p""cat id_rsa.pub >> authorized_keyschmod 0600 authorized_keys 相关链接Hadoop: start-dfs.sh permission denied - Stack Overflow Java HotSpot(TM) Server VM warning…

分享!JetBrains IDE中的GitLab支持

GitLab是流行的基于git的软件开发和部署平台之一&#xff0c;虽然很长一段时间以来&#xff0c;所有基本git操作都已经可以通过GitLab实现&#xff0c;但GitLab集成仍是JetBrains社区的一大最热门请求。为此&#xff0c;JetBrains团队今年与GitLab联手提供了这种类型的集成。 …

【问题记录】解决Git上传文件到GitHub时收到 “GH001: Large files detected” 错误信息!

环境 Windows 11 家庭中文版git version 2.41.0.windows.1GitHub 问题情况 在命令行中使用git上传pdf文件到GitHub服务器时&#xff0c;提示了如下警告信息&#xff1a; 原因是 GitHub 有一个文件大小限制&#xff0c;通常为 100 MB。 如果尝试上传大于此限制的文件&#xff0c…

EMANE中olsrd的调试

1 调试目的 本着学习的态度&#xff0c;对emane tutorial中的示例程序进行重现&#xff0c;以加深对EMANE的理解和掌握。在示例程序0(见https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-0)中介绍了使用olsrlinkview.py脚本来通过可视化界面观察olsr节点的链…

Marin说PCB之封装设计系列---(01)--非金属化孔的设计总结

提到封装设计小编我刚刚开始学习的时候也是一头雾水&#xff0c;在网上各种找视频学习怎么建封装。在这里小编我也推荐一波凡亿PCB商城上是有封装课程的&#xff0c;我当时就是买的凡亿的封装设计课程自己跟着老师学习的&#xff0c;效果还是挺好的。小编我免费给他们做一波推广…

集合减法【新思路】

#include<stdio.h> int main() {int n,m,flag0;int x;int a[100001]{0},b[100001]{0};scanf("%d %d",&n,&m);以集合A所有元素作为数组下标映射值成1 for (int i 0; i < n; i) {scanf("%d", &x);a[x] 1; }以集合B所有元素作为数组下…

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具 1.概述2. 工具使用1.概述 Fuxploider是一款功能强大的开源渗透测试工具,该工具专门针对文件上传漏洞而设计,可以帮助广大研究人员以自动化的方式检测和利用目标站点文件上传表单中的安全问题 由于该工具基于Python 3…