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

2023-09-14 12:21:02

下面是一个简介:

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

四、总结

懂思路更重要

技术交流:490765184@qq.com

更多推荐

如何使用Java语言判断出geek是字符串参数类型,888是整数参数类型,[hello,world]是数组参数类型,2.5是双精度浮点数类型?

如何使用Java语言判断出geek是字符串参数类型,888是整数参数类型,[hello,world]是数组参数类型,2.5是双精度浮点数类型?Java是一种静态类型的编程语言,这意味着我们需要在编译时为变量指定具体的类型。但是,你可以使用instanceof关键字来检查某个对象是否属于某个特定类。以下是一个示例,用于检

Confidential Compute Architecture - Arm构架的TEE新模式

1简介如今,云计算在分布式计算资源按需使用方面起着重要的作用。许多公司,如亚马逊、谷歌或微软都提供云服务,但使用这些服务需要信任服务提供商。这意味着一方面依赖提供商对抗攻击者,但另一方面也要信任提供商本身。恶意的提供商可能最终滥用其客户的敏感数据。使用可信执行环境(TEE)可以帮助增加对提供商的信任。在传输过程中,通常

C++——string的模拟实现+详细讲解

文章目录迭代器构造函数拷贝构造函数赋值运算符重载函数析构函数获取字符串函数获取字符串的字符个数访问类对象中的成员实现对类对象中成员的访问和操作实现对类对象中的成员的常量访问字符串容量调整字符串大小调整尾部插入字符尾部插入字符串重载函数符+=字符串尾部添加字符字符串尾部添加字符串指定位置插入字符指定位置插入字符串删除指定

【数据结构】二叉树链式结构的实现(三)

目录一,二叉树的链式结构二,二叉链的接口实现1,二叉链的创建2,接口函数3,动态创立新结点4,创建二叉树5,前序遍历6,中序遍历7,后序遍历三,结点个数以及高度等1,接口函数2,结点个数3,叶子结点个数4,二叉树高度5,二叉树第k层结点个数6,二叉树查找值为x的结点一,二叉树的链式结构二叉树的链式存储结构是指,用链表来

CFimagehost私人图床本地部署结合cpolar内网穿透实现公网访问

文章目录1.前言2.CFImagehost网站搭建2.1CFImagehost下载和安装2.2CFImagehost网页测试2.3cpolar的安装和注册3.本地网页发布3.1Cpolar临时数据隧道3.2Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置)4.公网访问测试5.结语1.前言图片服务器

STC单片机定时器0手动状态脉冲定时器2自动状态脉冲加减速控制

/***定时器0中断运行函数判断电机运行为一启动输出***///ManuMTARUN_FLAG手动定时器电机A运行标志M_Speed//ManuMTBRUN_FLAG手动定时器电机B运行标志//a1=XAddSpeed;//X加速系数送缓冲器201845//b1=YAddSpeed;//Y加速系数送缓冲器201845v

C++学习(1)

一、C++概述(了解)C++在C语言的基础上添加了面向对象编程和泛型编程的支持二、helloword程序(掌握)#define_CET_SECURE_NO_WARNINGS//在开发软件visualstudio编译c文件时,visualstudio认为strcpy,scanf等函数不安全的导致报警告和错误,导致无法编译

CPP-Templates-2nd--第十一章 泛型库

目录11.1可调用对象(Callables)11.1.1函数对象的支持11.1.2处理成员函数以及额外的参数11.1.3函数调用的包装11.2其他一些实现泛型库的工具11.2.1类型萃取11.2.2std::addressoff()11.2.3std::declval()11.3完美转发临时变量11.4作为模板参数的引

NK试剂盒使用注意事项及NK细胞培养攻略

NK细胞自然杀伤细胞(Naturalkillercell,NK细胞),是除T细胞、B细胞之外的第三大类淋巴细胞,不表达T细胞和B细胞所特有的膜表面分子。无需抗原的预先刺激与活化即可直接杀伤被病毒感染的自身细胞或肿瘤细胞,与抗肿瘤、抗感染和免疫调节有关,是固有免疫最重要的组成成分之一。NK细胞大概约占外周血淋巴细胞的10

MongoDB性能分析

mongostatmongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。它的输出有以下几列:inserts/s:每秒插入次数query/s

nvm下载安装教程

前言nvm官网地址:https://nvm.uihtm.com一、nvm下载进入nvmgithub地址,下载最新版本:https://github.com/coreybutler/nvm-windows/releases点击选择当前最新版本。滑动到底部,点击nvm-setup.exe下载安装文件。接受,下一步。选择nv

热文推荐