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学习(十四)

    UDC-Gadget UDC:(USB Device Controller)用于管理和控制USB设备与主机之间的通信. Gadget:Android在此层实现了adb,mtp(Media Transf ...

  2. 墨天轮国产数据库沙龙 | 胡彦军:华为GaussDB迁移工具解密

    在共同推进国产化生态发展的进程下,墨天轮正式推出"墨天轮国产数据库沙龙"系列直播活动,将定期邀请各国产数据库产品专家.掌门人,共同探讨如何达成技术"自主可控"的 ...

  3. vue前端开发仿钉图系列(6)左侧记事本的开发详解

    在页面开发中,深深的被element组件所吸引,里面很多小组件都可以直接使用.像是记事本提示.记事本列表时间线.右侧编辑页面的form表单,编辑和查看状态的切换等等,比之前iOS原生开发所有的东西都要 ...

  4. Windows刷机-记录UltraSO工具安装错误

    安装镜像刻录U盘工具UltralSO:UltraISO - ISO CD/DVD image creator, editor, burner, converter and virtual CD/DVD ...

  5. CSP模拟10--总结

    今天是我第一次给模拟赛写正规总结--因为今天的题真的受不了了 四道数学题,一点都不拖泥带水的纯血数学题! T1.黑暗型高松灯 shit 本来是一道放在T4防AK的题,结果学长为了 恶心 锻炼一下我们, ...

  6. 常见APR攻击及其防护

    0x01 什么是ARP 地址解析协议--ARP:是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的 ...

  7. 工作中的技术总结_JQuery_20210825

    工作中的技术总结_JQuery_20210825 JQuery此前接触不多,所以先把此次接触的一些基本操作 1.DOM节点的取值或者赋值: 语法: $(selector).val(value) 参数 ...

  8. jsp页面访问数据库根据数据情况,定时弹出提醒

    需求:根据数据库情况,在页面定时弹出相应的消息 实现: 1. 展示DIV设置 <script language="javascript" type="text/ja ...

  9. 【笔记】 STL容器

    [笔记] STL容器 vector vector<int> v; v.push_back(x); v.emplace(x); v.size(); v.erase(v.begin(),v.b ...

  10. Minio安装以及使用

    Minio介绍 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器/虚拟机镜像等,而一个对象文 ...