WAF:ModSecurity on Nginx(15)

news2025/7/25 10:09:27

预备知识
Nginx概述


    Nginx ("engine x") 是一个高性能的HTTP和 反向代理 服务器,也是一个 IMAP/POP3/SMTP服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 

Modsecurity概述

    ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web 应用程序,所以也被称为Web应用程序防火墙。 它可以作为Apache Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web application的安全性和保护Web application以避免遭受来自已知与未知的攻击。其防护的概念如下图所示:
     
    ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为open source,并开放源代码给大家使用。最新版的ModSecurity(一个开源的Web应用防火墙,即WAF)开始支持核心规则集(Core Rule Set,即CRS,可用于定义旨在保护Web应用免受零日及其他安全攻击的规则)了。ModSecurity团队发布的2.5.10 版以后还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。

    ModSecurity的运作设计有以下的基础概念:

    1、让使用者可以做任何想做的事情(Empower users to do what they want)

    2、 使用者设定的动作才会执行(Don’t do anything implicitly)

    3、 预设是不做任何动作(Be passive)


ModSecurity的部署架构

    1、 与Web Server结合 。

    2、 与Apache/nginx结合部署为网关,当作一个反向代理。

总结:

    ModSecurity是一个Web应用防火墙(WAF)。当前已经有超过70%的攻击发生在网络应用层,各级组织急需要能够保证他们的系统安全性的帮助。WAF系统的部署,可以为web应用增加一个外部安全层来检测或防止攻击。针对一系列的攻击,ModSecurity为web应用提供了强大的保护,并对HTTP流量进行监测和实时分析。

    软件下载地址:

    Nginx:http://nginx.org/en/download.html

    ModSecurity:https://www.modsecurity.org/download.html

    OWASP规则集:https://github.com/SpiderLabs/owasp-modsecurity-crs

实验目的
1)Install Nginx with ModSecurity

2)Configure ModSecurity with Nginx

3)启用OWASP规则

实验环境
操作系统:Server:Centos 7 Client:Windows xp

网络拓扑见下图:


服务端IP:10.1.1.56,客户端IP随机

所用软件:Nginx 1.9.15 ; modsecurity-2.9.1

PS:本实验指导书中涉及的软件路径均可以根据你自己所需设定,不必完全按照实验指导书中的配置而设定。

实验步骤一
Install Nginx with ModSecurity


1、安装Nginx和ModSecurity依赖的包和其他必须的软件包

    yum install gcc make automake autoconf libtool pcre pcre-devel libxml2 libxml2-devel curl curl-devel httpd-devel zlib zlib-devel openssl openssl-devel apr apr-util-devel apr-devel -y

2、下载Nginx和ModSecurity源码

    wget http://nginx.org/download/nginx-1.9.15.tar.gz

    wget https://www.modsecurity.org/tarball/2.9.1/modsecurity-2.9.1.tar.gz

3、编译modsecurity

    先解压:

    cd /opt

    gunzip -c modsecurity-2.9.1.tar.gz | tar xvf –

    进入解压后目录执行:

    ./autogen.sh

    ./configure --enable-standalone-module --disable-mlogc

    make

    make install


4、编译nginx并添加modsecurity模块

    先解压:

    cd /opt

    进入解压后目录执行如下命令,编译nginx:

    ./configure --add-module=/opt/modsecurity-2.9.1/nginx/modsecurity/ --prefix=/usr/src/nginx

    make && make install

实验步骤二
Configure ModSecurity with Nginx


1、复制modsecurity.conf-recommended & unicode.mapping文件到nginx的conf目录下:

    可以使用find命令查找这个两个文件在哪

    find / -name modsecurity.conf-recommended

    find / -name unicode.mapping

  
    复制文件:

    cp /opt/modsecurity-2.9.1/modsecurity.conf-recommended /usr/src/nginx/conf/

    cp /opt/modsecurity-2.9.1/unicode.mapping /usr/src/nginx/conf/
 
2、配置

    改名:

    mv modsecurity.conf-recommended modsecurity.conf

  
    修改nginx配置文件:

    cp nginx.conf nginx.conf.bak (备份nginx配置文件)

    在需要启用modsecurity的主机的在location下面加入下面两行即可:

    ModSecurityEnabled on;

    ModSecurityConfig modsecurity.conf;

    保存配置。

    至此,Nginx已经集成了ModSecurity,现在重启Nginx试试。

    检查配置文件:

    /usr/src/nginx/sbin/nginx -t

    启动nginx:
    /usr/src/nginx/sbin/nginx
  
    检查ModSecurity是否正常启动的两种办法:

    第一种:/usr/src/nginx/sbin/nginx -V
 
    第二种查看nginx错误日志:

    cat /usr/src/nginx/logs/error.log
  
实验步骤三
启用OWASP规则


1、下载OWASP ModSecurity CRS:

    cd /opt

    wget 'https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip'

2、解压到/usr/src/nginx/conf/

    cp master.zip /usr/src/nginx/conf/

    cd /usr/src/nginx/conf/

    unzip master.zip

3、添加OWASP规则

    进入/usr/src/nginx/conf/目录,复制规则配置文件到/usr/src/nginx/conf/目录:

    cp owasp-modsecurity-crs-master/modsecurity_crs_10_setup.conf.example  modsecurity_crs_10_setup.conf

    打开modsecurity.conf, 在最上面引入规则文件路径。

    Include /usr/src/nginx/conf/modsecurity_crs_10_setup.conf

    Include /usr/src/nginx/conf/owasp-modsecurity-crs-master/base_rules/modsecurity_crs_41_sql_injection_attacks.conf

 
    将SecRuleEngine设置为On

   
4、php环境下测试:

    我们启用了xss和sql注入的过滤,不正常的请求会直接返回403。以php环境为例,在/var/www/html目录下新建一个index.php内容为:

    修改nginx配置文件为如下:

  
    保存配置。重启nginx即可

    /usr/src/nginx/sbin/nginx -s reload

    切换到client客户端,在浏览器中访问:

    http://serverip/index.php?id=1 正常显示

    http://serverip/index.php? id=1 and 1=1  返回403

    http://serverip/index.php? search=<script>alert('xss');</script>  返回403

    说明sql注入和xss已经被过滤了

   
    当然还可以在/var/log/modsec_audit.log中看到攻击日志   

    至此表示安装成功

 部分实验截图如下图所示;

 

 

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

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

相关文章

Mysql的函数GROUP_CONCAT和FIND_IN_SET

业务场景&#xff1a; 表A&#xff1a;存在 customer_phone&#xff1b;bac_id主键 表B&#xff1a;存在 主键id&#xff1b;bac_id字段 customer_phone:用户手机号&#xff1b; bac_id:主键 表A &#xff1a;每个手机号可能会对应多个主键&#xff1b;要查询每个客户手机号包…

我该怎么选择IB课程?

IB用6大学科组及3大课程核心构建知识体系&#xff0c;涵盖广博、注重知行合一&#xff0c;对学生的综合素质的提升以及综合竞争力的打造都十分有益。IB选课建议 六大学科组中的每个课程分为HL&#xff08;高难度&#xff09;和SL&#xff08;标准水平&#xff09; HLIB课程&…

「RISC-V Arch」SBI 规范解读(上)

术语 SBI&#xff0c;Supervisor Binary Interface&#xff0c;管理二进制接口 U-Mode&#xff0c;User mode&#xff0c;用户模式 S-Mode&#xff0c;Supervisor mode&#xff0c;监督模式 VS-Mode&#xff0c;Virtualization Supervisor mode&#xff0c;虚拟机监督模式 …

三菱FX3U与威纶MT8071IP走RS422通讯

一、准备工作 1.需要工具&#xff1a; 电脑一台、PLC&#xff1a;三菱FX3U一个、触摸屏&#xff1a;威纶MT8071一个、 &#xff08;三菱圆形编程口转USB&#xff09;一根、触摸屏与电脑通讯线一根&#xff08;T型口数据线&#xff09;、PLC与触摸屏通讯线&#xff1a;电烙…

谷歌搜索留痕的技术公式【2023年新版】

本文主要分享谷歌搜索留痕的技术公式&#xff0c;让你更简单的去学习谷歌留痕的技术原理 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这样的行为吧。 谷歌搜索留痕的技术公式是什么&#xff1f; 答案是&#xff1a;需要做排名的关键词海量能搜…

Apache Hadoop生态部署-hadoop单机安装

目录 查看服务架构图-服务分布、版本信息 1&#xff1a;安装包下载 2&#xff1a;配置环境变量 3&#xff1a;服务配置 &#xff08;1&#xff09;core-site.xml &#xff08;2&#xff09;配置 hadoop-env.sh &#xff08;3&#xff09;HDFS 配置文件hdfs-site.xml &a…

【Redis】数据库和缓存如何保证一致性?

【Redis】数据库和缓存如何保证一致性&#xff1f; 文章目录【Redis】数据库和缓存如何保证一致性&#xff1f;常见方案先更新缓存&#xff0c;再更新数据库先更新数据库&#xff0c;再更新缓存并发情况下的思考先删除缓存&#xff0c;再更新数据库先更新数据库&#xff0c;再删…

StopWatch计时器

前言 开发中&#xff0c;为了评估性能&#xff0c;我们通常会使用System.currentTimeMillis() 去计算程序运行耗时 long startTimeSystem.currentTimeMillis();//业务代码... long endTimeSystem.currentTimeMillis(); System.out.println("耗时:" (endTime-startT…

Java多线程(三)---synchronized、Lock和volatile

Java内存模型&#xff08;非JVM&#xff09;Java内存模型(Java Memory Model简称JMM)&#xff0c;是一种共享内存模型&#xff0c;是多线程的东西&#xff0c;并不是JVM&#xff08;Java Virtual Machine(Java虚拟机)的缩写&#xff09;&#xff0c;这是俩玩意儿&#xff01;&a…

Ubuntu 22.04.2 发布,可更新至 Linux Kernel 5.19

Ubuntu 22.04 LTS (Jammy Jellyfish) Ubuntu 22.04.2 发布&#xff0c;可更新至 Linux Kernel 5.19 请访问原文链接&#xff1a;Ubuntu 22.04 LTS (Jammy Jellyfish)&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 发行说…

ssh远程登录报错:kex_exchange_identification: Connection closed by remote host

基本信息系统&#xff1a;MacOS Catalina 10.15.7报错信息&#xff1a;终端登录远程服务器时报错&#xff1a;kex_exchange_identification: Connection closed by remote host复制然而服务商的一键登录或VNC登录正常。解决方案首先使用以下命令debug登录过程&#xff0c;以便定…

这可能是Spring Boot Starter 讲的最清楚的一次了

前面我们简单介绍了如何使用消息中间件Apache Pulsar&#xff0c;但是在项目中那样使用&#xff0c;显然是不太好的&#xff0c;不管从易用性和扩展性来看&#xff0c;都是远远不够&#xff0c; 为了和springboot项目集成&#xff0c;写一个pulsar-spring-boot-starter是非常有…

Linux核心技能:2023主流监控Prometheus详解,附官方可复制中文文档教程

Prometheus既是一个时序数据库&#xff0c;又是一个监控系统&#xff0c;更是一套完备的监控生态解决方案。作为时序数据库&#xff0c;目前Prometheus已超越了老牌的时序数据库OpenTSDB、Graphite、RRDtool、KairosDB等&#xff0c;如图所示。 &#xff08;来源网络&#xff0…

QT+OpenGL鼠标操作和模型控制

文章目录QTOpenGL鼠标操作和模型控制鼠标拾取理论有点小复杂从鼠标计算射线第 0 步&#xff1a;2D 视口坐标第 1 步&#xff1a;3d归一化设备坐标第 2 步&#xff1a;4d齐次剪辑坐标第 3 步&#xff1a;4d眼(相机)坐标第 4 步&#xff1a;4d 世界坐标代码展示模型控制多模型加载…

自动执行自动化测试用例

phpunit 接口自动化测试系列 所有自动化测试用例最终的目的都是一样的&#xff0c;实现无人值守的自动化运行。而目前最常用的就是Jenkins来实现这个功能&#xff0c;在前面的WebdriverPython页面自动化的教程中我们已经详细讲解了如何将自动化测试用例接入到Jenkins中。本章我…

RK系列(RK3568) i2s 音频输入 麦克风驱动

平台&#xff1a;Android12SOC&#xff1a;RK3568外围芯片&#xff1a;XS9922i2s简介&#xff1a;从上图看I2s主要的线有&#xff1a;SDO SCLK LRCK MCLK I2S协议只定义三根信号线&#xff1a;串行时钟信号SCLK(BCLK)、数据信号SD和左右声道选择信号WS。&#xff08;1&#xff…

QT入门Containers之QStackedWidget

目录 一、QStackedWidget界面相关 1、布局介绍 2、插入界面 3、插入类界面 二、Demo展示 此文为作者原创&#xff0c;创作不易&#xff0c;转载请标明出处&#xff01; 一、QStackedWidget界面相关 1、布局介绍 QStackedWidget这个控件在界面布局时&#xff0c;使用还…

JVM整体分析篇

这里写目录标题JVM的组成部分1.类装载子系统1.1一个类加载到JVM的过程1.2类加载机制1.3为什么设计双亲委派机制1.4怎么打破双亲委派机制2.运行时数据区2.1线程私有及共享2.2JVM内存区结构2.3JVM参数设置经验3.Java对象的生命周期3.1.对象的创建3.2.对象大小的计算&#xff08;6…

六、程序计数器(PC寄存器)

JVM中的程序计数寄存器&#xff08;Program Counter Register&#xff09;中&#xff0c;Register 的命名源于CPU的寄存器&#xff0c;寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里&#xff0c;并非是广义上所指的物理寄存器&#xff0c;或许将其…

Python中实现将内容进行base64编码与解码

一、需求说明需要使用Python实现将内容转为base64编码&#xff0c;解码&#xff0c;方便后续的数据操作。二、base64简介Base64是一种二进制到文本的编码方式【是一种基于 64 个可打印字符来表示二进制数据的表示方法&#xff08;由于 2^664&#xff0c;所以每 6 个比特为一个单…