蚊章汇 - Roman Gherta
type: channel
link: https://linuxcn.bwsl.wang/author/1799/
description: Roman Gherta
items: 为 Nginx 配置 ModSecurity 网络应用防火墙

为 Nginx 配置 ModSecurity 网络应用防火墙
type: item
date: 2023-12-16T17:25:48+08:00
description: 网络应用防火墙（WAF）是一种在应用层监控网络流量的应用程序。OSI（开放系统互联） 是最常被网络相关讨论引用的网络流量框架之一。当数据包通过第 6 层（表示层）移动到第 7 层（应用层）时，它会进行解密或解码操作。这些操作可能会因异常解码和解释而产生漏洞，而这些漏洞可能被利用来打破标准应用上下文。注入就是这种漏洞的一种类型，而且因为传统的 IDS/IPS 设备无法应对这些威胁，所以其长时间以来一直是人们特别关注的问题。ModSecurity 简介ModSecurity 本质上就是 网络应用防火墙 web application firewall （WAF）引擎。它与 Apache、IIS 和 Nginx 兼容，并由第三方公司维护。该防火墙会将一份规则列表与由 Web 服务器/代理提供的 HTTP 头流进行交叉引用。目前这个仓库已经被简化，只包含主要的 LibModSecurity 库。你可以直接在自己的服务器实现中调用这个库，或通过特定编程语言的封装进行调用。其母公司的支持计划于 2024 年 7 月 1 日结束，之后这个项目将由开源社区维护。安装 Nginx 连接器Nginx 连接器 是一个 Nginx 动态模块，可以通过 Fedora 包 nginx-mod-modsecurity 进行安装。它依赖于 libmodsecurity.so，所以在这个使用场景中，这个包本身就是防火墙。[user@fedora ~]$ sudo dnf install -y nginx nginx-mod-modsecurity [user@fedora ~]$ rpm -qR nginx-mod-modsecurity config(nginx-mod-modsecurity) = 1.0.3-3.fc38 libc.so.6(GLIBC_2.4)(64bit) libmodsecurity.so.3()(64bit) nginx(abi) = 1.24.0 nginx-filesystem ... 安装完成后，你会见到连接器在 /etc/nginx 中添加了一些重要的文件。[user@fedora ~]$ rpm -ql nginx-mod-modsecurity /etc/nginx/modsecurity.conf # waf 配置 /etc/nginx/nginx.conf.modsecurity # nginx 示例配置 /usr/lib64/nginx/modules/ngx_http_modsecurity_module.so /usr/share/nginx/modules/mod-modsecurity.conf /usr/share/doc/nginx-mod-modsecurity/README.md ... 通过提供一些额外的配置指令，连接器对 Nginx 进行了扩展。下面的部分将演示 nginx.conf.modsecurity 文件中一些示例指令。指令的完整列表可以在 README.md 文件或项目的 GitHub 页面找到。启动网络应用防火墙nginx.conf.modsecurity 是我们将要运行的 Nginx 配置。解开如下所示的 modsecurity 行注释：[user@fedora ~]$ sudo sed -i 's/#modsec/modsec/g' /etc/nginx/nginx.conf.modsecurity [user@fedora ~]$ grep -C2 modsecurity /etc/nginx/nginx.conf.modsecurity # 如有需要，启用 ModSecurity WAF modsecurity on; # 如有需要，加载 ModSecurity CRS modsecurity_rules_file /etc/nginx/modsecurity.conf; 在 shell 中启动服务器并查看日志，确保在 modsecurity.conf 加载了七个默认规则。[user@fedora ~]$ sudo nginx -c /etc/nginx/nginx.conf.modsecurity [user@fedora ~]$ head /var/log/nginx/error.log 2023/10/21 23:55:09 [notice] 46218#46218: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/7/0) 2023/10/21 23:55:09 [notice] 46218#46218: using the "epoll" event method 2023/10/21 2…