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

 

Nginx+ModSecurity(WAF) 加强 Web 应用程序安全性的更多相关文章

  1. 解读Web应用程序安全性问题的本质

    转自 http://blog.csdn.net/iwebsecurity/article/details/1688304 相信大家都或多或少的听过关于各种Web应用安全漏洞,诸如:跨site脚本攻击( ...

  2. 开放式 Web 应用程序安全性项目 OWASP

    开放式 Web 应用程序安全性项目 OWASP Open Web Application Security Project (OWASP) OWASP 基金会是谁? Open Web Applicat ...

  3. Azure Front Door(三)启用 Web Application Firewall (WAF) 保护Web 应用程序,拒绝恶意攻击

    一,引言 上一篇我们利用 Azure Front Door 为后端 VM 部署提供流量的负载均衡.因为是演示实例,也没有实际的后端实例代码,只有一个 "Index.html" 的静 ...

  4. 利用Httponly提升web应用程序安全性

    随着www服务的兴起,越来越多的应用程序转向了B/S结构,这样只需要一个浏览器就可以访问各种各样的web服务,但是这样也越来越导致了越来越 多的web安全问题.www服务依赖于Http协议实现,Htt ...

  5. 利用Httponly提升web应用程序安全性(转)

    原文:http://kb.cnblogs.com/page/115136/ 随着www服务的兴起,越来越多的应用程序转向了B/S结构,这样只需要一个浏览器就可以访问各种各样的web服务,但是这样也越来 ...

  6. 2017-03-05 CentOS中结合Nginx部署dotnet core Web应用程序

    Visual Studio Live 倒计时2天,当然这是美国倒计时两天,中国应该是在3月8日的凌晨,正值"3.8妇女节".提前祝广大的女性同志节日快乐,当然还有奋斗在一线的程序媛 ...

  7. 最常见的安全漏洞– Acunetix Web应用程序漏洞报告2021

    每年,Acunetix都会为您提供最常见的Web安全漏洞和网络外围漏洞的分析.我们的年度Web应用程序漏洞报告(现已成为Invicti AppSec指标的一部分)是基于从Acunetix在线获得的真实 ...

  8. PWA 渐进式Web应用程序 - 解释

    想象一下,如果一个网站上所有的功能都能够作为一个移动应用程序为用户所用——任何设备上都可以使用.可接收所有的通知.离线模式可用,为了实现这个愿景,2015年,谷歌创造了渐进式Web应用程序(PWA). ...

  9. 渗透测试的理论部分4——开放式Web应用程序安全项目

    开放式Web应用程序安全项目(Open Web Application Security Project OWASP) 定期退出Top 10 project(排名前十的安全隐患防守规则) 公开了编写安 ...

  10. (转)PWA(Progressive Web App)渐进式Web应用程序

    PWA 编辑 讨论 PWA(Progressive Web App)是一种理念,使用多种技术来增强web app的功能,可以让网站的体验变得更好,能够模拟一些原生功能,比如通知推送.在移动端利用标准化 ...

随机推荐

  1. Android Qcom USB Driver学习(二)

    BC v1.2充电规范 Battery Charging Specification USB port 如何识别不同的Charger类型 USB Charger类型 USB_SDP_CHARGER P ...

  2. Android性能优化(一)—— 启动优化,冷启动,热启动,温启动

    APP启动方式 App启动方式分三种:冷启动(cold start).热启动(hot start).温启动(warm start) ▲ 冷启动 系统不存在App进程(APP首次启动或APP被完全杀死) ...

  3. Android复习(二)应用资源——>菜单

    菜单资源定义可通过 MenuInflater 进行扩充的应用菜单,包括选项菜单.上下文菜单和子菜单. 有关使用菜单的指南,请参阅菜单开发者指南. 文件位置: res/menu/filename.xml ...

  4. NOI 2023 (简单题)

    Day1 T1 方格染色(color) 容易发现相对难处理的是斜线,但是我们发现斜线不超过 \(5\) 条,那么对于这一部分我们可以拆贡献,然后暴力做. 具体而言,先算出斜线减去横/竖线的面积,再算出 ...

  5. Linux基础常识

    1 什么是shell shell是Linux系统的用户界面,提供了用户与内核交互的一种接口,它接收用户输入的命令并到送到内核去执行,因此也被称为Linux的命令解释器. 显示系统当前使用的shell ...

  6. 3.16 Linux删除文件或目录(rm命令)

    当 Linux 系统使用很长时间之后,可能会有一些已经没用的文件(即垃圾),这些文件不但会消耗宝贵的硬盘资源,还是降低系统的运行效率,因此需要及时地清理. rm 是强大的删除命令,它可以永久性地删除文 ...

  7. 一文彻底弄懂JUC工具包的CountDownLatch的设计理念与底层原理

    CountDownLatch 是 Java 并发包(java.util.concurrent)中的一个同步辅助类,它允许一个或多个线程等待一组操作完成. 一.设计理念 CountDownLatch 是 ...

  8. 初识cuda一文通

    cuda学习博客 本文为本人cuda学习过程中的记录和理解,多参考@谭升等大佬前辈的博客,以及NVIDIA官方文档.如有错误烦请指正,如有侵权请联系删除. 0. 并行计算与计算机架构 计算机架构是并行 ...

  9. Wgpu图文详解(03)缓冲区Buffer

    在上一篇文章中,我们介绍了Wgpu中的渲染管线与着色器的概念以及基本用法.相信读者还记得,我们在渲染一个三角形的时候,使用了三角形的三个顶点的索引作为了顶点着色器的输入,并根据索引值计算了三个几何顶点 ...

  10. MySQL原理简介—5.存储模型和数据读写机制

    大纲 1.为什么不能直接更新磁盘上的数据 2.为什么要引入数据页的概念 3.一行数据在磁盘上是如何存储的 4.一行数据中的NULL值是如何处理的 5.一行数据的数据头存储的是什么 6.一行数据的真实数 ...