首页 > 系统相关 >Nginx+ModSecurity(WAF) 加强 Web 应用程序安全性

Nginx+ModSecurity(WAF) 加强 Web 应用程序安全性

时间:2024-03-22 14:55:51浏览次数:37  
标签:Web nginx WAF modsecurity 应用程序 ModSecurity Nginx

Nginx 和 ModSecurity 加强 Web 应用程序的安全性

在当今互联网时代,Web 应用程序的安全性变得尤为重要。为了保护应用程序和用户的数据免受恶意攻击和漏洞利用,使用合适的工具和技术是必不可少的。本文将探讨如何使用两个流行的工具——Nginx 和 ModSecurity,来加强 Web 应用程序的安全性。

Nginx:

Nginx 是一个高性能的开源 Web 服务器和反向代理服务器。 它以其高效的处理能力和低系统资源消耗而闻名。 Nginx 提供了丰富的功能和灵活的配置选项,使其成为构建安全的 Web 应用程序的理想选择。 本篇文章不过多介绍Nginx

ModSecurity:

ModSecurity 是一个开源的 Web 应用程序防火墙(WAF),可以在 Apache、Nginx、IIS 等 Web 服务器上运行。它可以保护 Web 应用程序免受各种攻击,如 SQL 注入、跨站脚本(XSS)、远程文件包含(RFI)、本地文件包含(LFI)、代码注入等。

ModSecurity 可以通过在 Web 服务器前安装并配置规则来检测和阻止恶意请求。这些规则可以定义模式匹配、黑名单、白名单、IP 地址过滤、HTTP 方法限制等,以便监视和阻止潜在的攻击。

ModSecurity 采用基于引擎的设计,可以通过自定义插件和脚本来增强其功能。它还提供了实时日志记录和通知机制,以便管理员及时了解 Web 应用程序的安全状态。

ModSecurity 是一种有效的 Web 应用程序安全解决方案,可以帮助保护 Web 应用程序免受各种攻击,并提高应用程序的安全性和可靠性。

ModSecurity功能介绍

  • 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阻断

为什么要使用 Nginx 和 ModSecurity

强大的安全特性:

Nginx 提供了一系列的安全功能,如 SSL/TLS 支持、访问控制、缓存控制等。 ModSecurity 则通过实施规则集来检测和拦截常见的 Web 应用程序攻击,如 SQL 注入、跨站脚本(XSS)等。

高性能和可扩展性:

Nginx 的事件驱动架构使其能够处理大量并发请求,并具有出色的性能表现。 ModSecurity 的模块化设计允许根据需求定制规则,并且可以与其他安全工具和应用程序集成。

使用 Nginx 和 ModSecurity 的步骤

1 环境以centos为主

1 yum install -y epel-release
2 yum install -y readline-devel curl-devel gcc gcc-c++ python-devel lua-devel doxygen perl yajl-devel GeoIP-devel lmdb-devel ssdeep-devel flex bison autoconf automake

2 安装ModSecurity

1 cd /usr/local
2 wget http://www.modsecurity.cn/download/modsecurity/modsecurity-v3.0.4.tar.gz
3 tar -zxvf modsecurity-v3.0.4.tar.gz
4 mv modsecurity-v3.0.4 modsecurity
5 cd modsecurity 
6 sh build.sh 
7 ./configure
8 make && make install

执行的sh build.sh 中有关的git错误 直接忽略即可

图片

官网下载:http://www.modsecurity.cn/

图片

3 安装ModSecurity-nginx

关于ModSecurity-nginx

ModSecurity-nginx 是将 ModSecurity WAF(Web 应用程序防火墙)与 Nginx Web 服务器结合使用的模块。它允许在 Nginx 上运行 ModSecurity 的规则集,以提供对 Web 应用程序的安全保护。

ModSecurity 是一个独立的开源项目,用于提供 Web 应用程序防火墙功能。它可以检测和阻止各种类型的攻击,如 SQL 注入、跨站脚本(XSS)、远程文件包含(RFI)等。ModSecurity 使用规则集来识别和阻止这些攻击,并提供配置灵活性以适应不同的应用程序需求。

而 ModSecurity-nginx 则是将 ModSecurity 引擎嵌入到 Nginx 中的模块,使得 Nginx 可以直接利用 ModSecurity 的功能。通过将 ModSecurity-nginx 模块添加到 Nginx 中,您可以在 Web 服务器级别上执行强大的 Web 应用程序防火墙功能,从而提高应用程序的安全性。

使用 ModSecurity-nginx,您可以轻松地将 ModSecurity 的规则集应用于 Nginx,以保护您的 Web 应用程序免受常见的网络攻击。它提供了一个集中的安全层,帮助您检测和阻止恶意请求,并提供实时日志记录和报警功能,以便及时响应潜在的安全问题。

源码地址:https://github.com/SpiderLabs/ModSecurity-nginx

unzip ModSecurity-nginx-master.zip
mv ModSecurity-nginx-master /usr/local/modsecurity-nginx

4 安装nginx

#卸载你之前的nginx, 备份你的nginx配置
1 systemctl stop nginx
2 find / -name nginx
3 rm -rf nginx 相关的文件
4 yum remove nginx # 先备份配置文件
5 wget -P /usr/local http://nginx.org/download/nginx-1.22.1.tar.gz
6 tar -zxvf nginx-1.22.1.tar.gz
7 cd /usr/local/nginx-1.22.1/ 

8 ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --build=CentOS --http-log-path=/var/log/nginx/access.log --with-http_stub_status_module --add-module=/usr/local/modsecurity-nginx --with-http_ssl_module

9 make && make install
图片

5 安装 systemd unit

1打开一个文本编辑器,创建一个名为 nginx.service 的文件:
sudo vim /etc/systemd/system/nginx.service

2 将下面的文件复制进去
[Unit]
Description=Nginx
After=network.target

[Service]
Type=forking
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

3 保存并关闭文件。

4 重新加载 systemd 配置:

sudo systemctl daemon-reload
5 启用 Nginx 服务:

sudo systemctl enable nginx
6 尝试启动 Nginx 服务:
sudo systemctl start nginx

6 启动nginx

1 创建nginx 用户
sudo useradd -r -s /sbin/nologin nginx
2 启动nginx
systemctl start nginx
3 查看 Nginx 状态
systemctl status nginx
图片

7 配置 ModSecurity 安全规则

1 mkdir -p /etc/nginx/modsecurity/
2 cp /usr/local/modsecurity/modsecurity.conf-recommended /etc/nginx/modsecurity/modsecurity.conf
3 cp /usr/local/modsecurity/unicode.mapping /etc/nginx/modsecurity/

4 下载规则文件
wget -P /usr/local/ http://www.modsecurity.cn/download/corerule/owasp-modsecurity-crs-3.3-dev.zip
unzip owasp-modsecurity-crs-3.3-dev.zip

5 复制 crs-setup.conf.example 到 /etc/nginx/modsecurity/ 目录下,并重命名为 crs-setup.conf
cp /usr/local/owasp-modsecurity-crs-3.3-dev/crs-setup.conf.example /etc/nginx/modsecurity/crs-setup.conf

6将下载的策略规则包解压后的rules文件夹里面的所有规则,复制到/etc/nginx/modsecurity/rules/ 目录下
cp -r rules/ /etc/nginx/modsecurity/

7 修改REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example与RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example两个文件的文件名,将".example"删除,可将自己写的规则放置于此两个文件中;
cd /etc/nginx/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

8 配置nginx 在http或server节点中添加以下内容(具体根据你的业务配置):

#在配项目引入
#load_module modules/ngx_http_modsecurity_module.so;
在http 或者sever 配置
modsecurity on;
modsecurity_rules_file /usr/local/nginx/conf/modsecurity/modsecurity.conf;

图片

9 编辑modsecurity.conf

cd /etc/nginx/modsecurity/
vim modsecurity.conf

SecRuleEngine DetectionOnly改为SecRuleEngine On

同时在文件末尾添加以下内容:

Include /path/crs-setup.conf
Include /path/rules/*.conf
图片

10 记录审计日志

注释SecAuditLogParts ABIJDEFHZ
更改SecAuditLogParts ABCDEFHZ
图片

11 检查nginx

图片

12 重启nginx

图片

13 测试

# 正常的访问
curl 'http://localhost/' -I
# 非正常访问,tail /var/log/nginx/access.log查看拦截信息
curl 'http://localhost/?id=1 AND 1=1' -I
图片  

 

标签:Web,nginx,WAF,modsecurity,应用程序,ModSecurity,Nginx
From: https://www.cnblogs.com/exmyth/p/18089477

相关文章

  • 基于JavaWeb的鲜牛奶订购系统—开题报告
    一、研究解决的问题本系统使用Java作为开发语言,基于JavaWebB/S架构进行设计,前端技术HTML+CSS+Vue,后端技术SpringBoot,数据库采用MySql,并在win10操作平台完成开发。系统用户角色分为订奶用户,供奶商家和管理员三个部分。其中,订奶用户可以浏览住址所在区的订奶信息,登录后拥有管理......
  • web常用控件和弹窗
    web常见控件介绍 常见的控件: 1.文本输入框(TextBox) 2.按钮控件(Button) 3.下拉选框(DropList) 4.日期/时间控件(Date/TimePicker) 5.(图片、文件)上传控件(Upload)  6.树形控件(TreeView) 7.列表框(ListBox) 8.多格式文本框(RichTextBox)  9.Tab控件10.其他控件......
  • 基于WebRTC的局域网文件
    基于WebRTC的局域网文件#GitHub:FileTransfer在前一段时间,我想在手机上向电脑发送文件,因为要发送的文件比较多,所以我想直接通过USB连到电脑上传输,等我将手机连到电脑上之后,我发现手机竟然无法被电脑识别,能够充电但是并不能传文件,因为我的电脑是Mac而手机是Android,所以无法识别设......
  • Oracle WebLogic Server JNDI注入漏洞(CVE-2024-20931)复现
    先从镜像站拉取OracleWebLogicServerJNDI注入漏洞(CVE-2024-20931)然后在docker中启动这个镜像即可在网页中访问,搭建网站成功使用利用工具来进行验证是否存在漏洞获取DNS查看是否有回显有回显漏洞存在创造反弹shell,先查看攻击机的ip进行反弹shell编码使用nc开启监听端......
  • Java内存马1-传统web内存马
    1、前置知识(1)TomcatTomcat是一个开源的、轻量级的、用于JavaServlet和JavaServerPages(JSP)的Web应用程序服务器。它是Apache软件基金会的一个项目,也是最流行的Servlet容器之一,适用于开发和部署各种类型的JavaWeb应用程序。Tomcat负责管理Servlet的生命周期,包括加载、初始化......
  • JSP语法 《Java Web开发从入门到实战》第三章节
    目录一、JSP页面的基本构成1、普通的HTML标记2、JSP注释(增强JSP文件的可读性,便于Web项目的更新和维护)3、Java脚本元素:声明、Java程序片、Java表达式4、JSP标记:指令标记、动作标记、自定义标记等二、<%%>和<%!%>的不同之处1、翻译不同2、定义不同3、声明不同......
  • 29-2 webshell 管理下
    一、常见的webshell管理工具1)蚁剑(AntSword)它是一款开源的跨平台webShell管理工具,主要面向合法授权的渗透测试安全人员和网站管理员进行常规操作。其核心功能包括Shell代理功能、Shell管理、文件管理、虚拟终端、数据库管理、插件市场和插件开发。下载安装教程:中国蚁剑下......
  • 描述我处理过的一个性能优化问题&如何实现Web应用的负载均衡?
    一、描述我处理过的一个性能优化问题在我过去的工作经历中,我遇到并成功解决了一个性能优化问题。这个问题发生在一个电商网站的后台管理系统中,当管理员尝试查询大量订单数据时,系统的响应速度非常慢,有时甚至导致页面超时或崩溃。为了解决这个问题,我首先进行了性能分析。通过查......
  • go+gin webscoket 怎么实现心跳
    在Go+Gin中实现WebSocket的心跳,你需要一个WebSocket库,如gorilla/websocket。下面的例子展示了如何实现心跳机制:packagemainimport("net/http""time""github.com/gin-gonic/gin""github.com/gorilla/websocket")//升级器,用于将HTTP连接升......
  • SpringBoot建立websocket连接
    介绍WebSocket协议是一种基于TCP的协议,用于在客户端和服务器之间建立持久连接,并且可以在这个连接上实时地交换数据。WebSocket协议有自己的握手协议,用于建立连接,也有自己的数据传输格式。当客户端发送一个WebSocket请求时,服务器将发送一个协议响应以确认请求。在握手期间,......