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


    下面是一个简介:

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

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

    一、准备

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

    1.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库。

    1. # 解压源码文件
    2. tar -xvzf modsecurity-v3.0.10.tar.gz
    3. # 切换到源码目录
    4. cd modsecurity-v3.0.10
    5. # 构建
    6. ./build.sh
    7. # 配置
    8. ./configure
    9. # 生成
    10. make
    11. # 安装
    12. make install

    2.2 编译安装nginx

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

    1. # 源码下载,可以按自己喜欢的方式来
    2. git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
    3. wget https://nginx.org/download/nginx-1.25.2.tar.gz
    4. # 解压源码
    5. tar xzf nginx-1.25.2.tar.gz
    6. # 创建一个专门的用户
    7. useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx
    8. #切换到nginx源码目录
    9. cd nginx-1.25.2
    10. # 配置
    11. ./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
    12. # 生成
    13. make
    14. # 生成模块
    15. make modules
    16. # 安装nginx
    17. make install
    18. # 创建一个软链接
    19. ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    20. # 测试nginx 安装情况
    21. nginx -V

     2.3 配置

    2.3.1 配置nginx支持modsecurity

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

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

    load_module modules/ngx_http_modsecurity_module.so;

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

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

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

    命令:

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

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

    1. # 加载模块
    2. load_module modules/ngx_http_modsecurity_module.so;
    3. user nginx;
    4. worker_processes 1;
    5. pid /run/nginx.pid;
    6. events {
    7. worker_connections 1024;
    8. }
    9. http {
    10. include mime.types;
    11. default_type application/octet-stream;
    12. sendfile on;
    13. keepalive_timeout 65;
    14. server {
    15. listen 80;
    16. server_name nginx.example.com;
    17. # 启用模块
    18. modsecurity on;
    19. # 加载模块配置文件
    20. modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;
    21. access_log /var/log/nginx/access_example.log;
    22. error_log /var/log/nginx/error_example.log;
    23. location / {
    24. root html;
    25. index index.html index.htm;
    26. }
    27. error_page 500 502 503 504 /50x.html;
    28. location = /50x.html {
    29. root html;
    30. }
    31. }
    32. }

    测试nginx的配置文件:

    sudo nginx -t

     2.3.2 配置modsecurity

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

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

    1. # SecRuleEngine DetectionOnly
    2. SecRuleEngine on

     同时,下载规则文件:

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

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

    1. Include owasp-crs/crs-setup.conf
    2. 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

  • 相关阅读:
    selenium初始学习--打开新标签操作
    【经典算法】LeetCode 27. 移除元素(Java/C/Python3/Go实现含注释说明,Easy)
    Gemmini测试test文件chisel源码详解(二)
    01Spring的Ioc思想和依赖注入手段(DI)
    aiOla推出超快 “多头 “语音识别模型,击败OpenAI Whisper
    JS清除字符串中的空格
    vue 设置定时器在某个时间段执行
    瑞芯微 | 如何固定以太口地址为指定ip?
    HarmonyOS开发环境搭建
    FPmarkets:MT4中Renko图表工具有哪些?怎么用
  • 原文地址:https://blog.csdn.net/qq490765184/article/details/132870991