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. git 设置代理和取消代理

    1.设置代理 git config --global http.proxy "127.0.0.1:1080" 2.取消代理 git config --global --unset ...

  2. Vue3 和 Vue2 的区别 ?

    1. Vue3 和 VUe2 性能提升 :使用 proxy 代替 defainProperty 实现响应式数据 :使用 ts 书写代码 : 新特性有:组合 api compositionApi  :新 ...

  3. webpack中 ,有哪些常见的Loader?他们是解决什么问题的?

    1. css-loader 翻译css ,可以把sass / less 代码翻译成 css 代码 : 2. imgage-loader 加载并压缩图片文件 3. source-map-loader 加 ...

  4. 云原生周刊:Docker 推出 Docker Debug | 2023.10.9

    开源项目推荐 SchemaHero SchemaHero 是一个 Kubernetes Operator,用于各种数据库的声明式架构管理.SchemaHero 有以下目标: 数据库表模式可以表示为可以 ...

  5. 云原生爱好者周刊:Grafana Loki 免费电子书

    云原生一周动态要闻: Apache Log4j 2.17.1 修复远程代码执行漏洞 CNCF 发布 2021 年度报告 极狐(GitLab)发布业内首款"GitNative" De ...

  6. 高效求解 n 个点之间的最大曼哈顿距离

    平面上有 n 个点,如何求出任意两点的曼哈顿距离的最大值? 曼哈顿距离的公式为: \[d((x_1, y_1), (x_2, y_2)) = |x_1 - x_2| + |y_1 - y_2| \] ...

  7. C#线性查找算法

    前言 线性查找算法是一种简单的查找算法,用于在一个数组或列表中查找一个特定的元素.它从数组的第一个元素开始,逐个检查每个元素,直到找到所需的元素或搜索完整个数组.线性查找的时间复杂度为O(n),其中n ...

  8. Python如何完成一个上课点名系统!

    阅读目录 一.准备工作 二.预览 三.思路 四.源代码 五.总结 一.准备工作 1.Tkinter Tkinter 是 python 内置的 TK GUI 工具集.TK 是 Tcl 语言的原生 GUI ...

  9. OpenSSH9.3p1升级实践

    安装Telnet服务 为了避免升级OpenSSH导致服务器不可连接.需要先下载安装Telnet组件.升级期间使用Telnet作为升级期间的服务器连接方式. 先查询telnet是否安装 rpm -qa ...

  10. (待续) 强化学习——如何提升样本效率 ( DeepMind 综述深度强化学习:智能体和人类相似度竟然如此高!)

    强化学习     如何提升样本效率 参考文章: https://news.html5.qq.com/article?ch=901201&tabId=0&tagId=0&docI ...