nginx 安装 modsecurity 实现 waf 功能

马谦马谦马谦 未分类评论2,031字数 2770阅读 9 分 14 秒阅读模式

一、 ModSecurity 和 OWASP

ModSecurity 是一个免费、开源的 Apache 模块,可以充当 Web 应用防火墙 (WAF) 。 ModSecurity 从 3.0 开始支持 nginx,配合 nginx 的灵活和高效,可以打造成生产级的 WAF,是保护和审核 web 安全的利器。

ModSecurity 的主要功能在于,提供可靠的保护,远离各种网上威胁。它不是将安全重心偏离应用程序,而是增添了全局级别的功能。想对它进行配置,只需为客户机与服务器之间通信的每一个部分用条件和操作来指定规则,这些部分包括请求头、请求主体、响应头和响应主体。因而,ModSecurity 可以预防针对 Web 服务器、 PHP 、 Perl 和 ASP 等解释器以及 Web 应用程序发动的攻击。

OWASP 是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓 OWASP 的 ModSecurity 的核心规则集 (即 CRS) 。我们可以通过 ModSecurity 手工创建安全过滤器、定义攻击并实现主动的安全输入验证。

nginx安装modsecurity实现waf功能

二、 nginx 中添加 ModSecurity 模块

2.1 查看当前 nginx 编译选项

如果设备已经安装了 nginx,先记住当前的 nginx 编译选项。使用 nginx -V 命令可以查看编译选项:

最后一行就是 nginx 安装时的编译选项,先记住。

2.2 下载 ModSecurity 代码

拉取 ModSecurity 主代码,当前版本是 3.x 。 ModSecurity 在 3.0 以后已经不止是一个模块了,主代码库编译出来的是一个公共库,可以被第三方代码直接引用,现如今的 ModSecurity-nginx 就是通过这个 lib 库来完成的。

因此,整个 modsecurity 功能目前一共涉及到三个东西:

  1. ModSecurity 的 lib 库
  2. ModSecurity 的 nginx 模块
  3. owasp 规则

克隆 ModSecurity 代码:

克隆 ModSecurity-nginx 代码:

克隆 owasp-modsecurity-crs 代码:

三个代码都克隆完成后,应该存在以下三个目录:

进入到 ModSecurity 目录,初始化子模块,这一步相当重要,否则后面会出错

2.3 集成 ModSecurity 到 nginx

2.3.1 下载依赖项

依赖项注意区分系统环境,除此之外后面的流程都不再依赖系统环境。

CentOS 环境:

Ubuntu 系统:

2.3.2 编译 ModSecurity

进入 ModSecurity 目录:

因为后面的 modsecurity-nginxnginx 编译都依赖 modsecurity 的 lib 库,为了方便起见,直接把编译后的库文件放到默认目录,不手动指定安装目录。

2.3.3 nginx 编译安装

如果没有安装 nginx,先下载好 nginx 代码,nginx 的编译安装参考:CentOS 源码编译安装 NGINX 。如果已经安装了 nginx,记录 nginx 当前的编译选项,参考步骤 2.1

nginx 是否安装不重要,不同的是如果没有安装就要先下载源代码,如果安装了就记录下编译选项。

假设安装时候的编译选项为:

进入 nginx 目录:

安装好后 nginx 的配置参考上面的文档即可。

2.3.4 配置 OWASP Core Rule Set

owasp-modsecurity-crs 开始已经下载到本地,首先拷贝一份到 nginx 配置目录,假设安装到/etc/nginx/owasp 目录下:

配置 ModSecurity:

modsecurity.conf 中添加 crs-setup.conf 的配置:

在 nginx 的配置中开启 modsecurity 模块,可以放在 server 段或者 location 段内:

测试配置文件是否正确:

可能会报错:

这是因为 ModSecurity 中的 IP 检测的功能还没有添加,暂时可以先不考虑这个,直接删掉或者重命名掉不加载即可:

测试无误后重启 nginx 服务,务必使用 restart 而不是 reload 等操作。

三、测试

3.1 正常访问

返回 200,正常访问。

3.2 简单 SQL 注入

返回 403,禁止访问。

3.3 简单 xss 攻击

返回 403,禁止访问。

四、日志

默认情况下,ModSecurity 是开启了审计日志的,会把审计日志打到 modsec_audit.log,以下就是上面执行 xss 攻击时候的日志:

同时 nginx 的日志中也有日志:

正式环境下,如果访问量很大,建议关闭审计日志,开启审计日志会导致以下问题:

  1. 写入大量的日志数据,会消耗磁盘容量。
  2. 大量的 IO 操作会影响设备的性能。

关闭审计日志需要在/etc/nginx/modsecurity.conf 中添加配置:

五、优化

5.1 不检查静态内容

六、参考文档

ModSecurity3_Nginx 指南

nginx 下安装配置 modsecurity waf 防火墙 (附完整编译、配置、排错、详细规则)

Nginx1.14.0+ModSecurity 实现简单的 WAF

 
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2019 年 6 月 1 日 21:30:07
  • 转载请务必保留本文链接:https://www.dyxmq.cn/uncategorized/nginx-modsecurity.html
解决gvm工具无法下载安装包的问题 Golang

解决 gvm 工具无法下载安装包的问题

GVM(Go Version Manager) 是一款用于管理和切换不同 Go 语言版本的工具。它允许用户在同一台计算机上轻松安装、使用和管理多个 Go 版本,同时还能确保项目之间的依赖关系井然有序。 GVM 的主...
goland配置proto文件搜索路径 Golang

goland 配置 proto 文件搜索路径

默认情况下,goland(jetbrains 家的软件:idea 、 pycharm 、 phpstorm 以及 webstorm 都是一样) 安装 protobuf 插件后只会在一个特定的库路径下搜索 proto 文件。如果...
wireshark导出https证书 计算机网络

wireshark 导出 https 证书

一、找到证书所在的数据包 证书是从服务端返回的,从 https 握手的过程来看,当服务端返回了 server hello 之后,就会主动将自己的证书返回给客户端,因此只要从 server hello 往后面找 1-...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证