软WAF的另一种思路:基于Openresty+Naxsi的WAF实现
字数 1460 2025-08-18 11:37:16

基于OpenResty+Naxsi的WAF实现详解

1. WAF概述

本文介绍了一种结合OpenResty(基于Nginx+Lua)和Naxsi的软WAF实现方案,通过将两种技术优势互补,构建高性能的Web应用防火墙。

1.1 技术选型背景

  • 传统Lua WAF的不足:基于Lua正则匹配HTTP请求内容时,加载大量防护规则会导致Nginx性能显著下降
  • Naxsi的优势:专门为WAF设计的Nginx模块,能高效处理HTTP请求内容防护策略
  • Lua的优势:适合实现复杂的安全防护策略和业务逻辑

2. WAF功能架构

2.1 功能划分

Naxsi负责的防护:

  • SQL注入攻击
  • XSS攻击
  • 目录遍历漏洞
  • 命令注入攻击
  • 虚拟补丁
  • 扫描器攻击

Lua负责的防护:

  • CC攻击防护
  • 全局IP访问频率限制
  • 特定URL访问频率限制
  • IP黑白名单
  • URL白名单
  • HTTP请求转发

2.2 部署模式

  • 云WAF模式部署
  • 直接嵌入应用现有Nginx的方式部署

3. WAF管理后台

3.1 配置文件管理

由于使用了两个独立Nginx模块,需要两套不同的配置文件:

  1. Naxsi模块:防护规则以文件形式下发
  2. Lua模块:代码以文件形式下发

配置文件同步机制:

  • WAF节点定期通过HTTP从管理端下载配置文件
  • 配置文件分开存放:naxsi配置与lua代码分离

配置文件更新流程:

def check_rules():
    # 检查nginx配置是否正确
    check = commands.getstatusoutput("/usr/local/nginx/sbin/nginx -t")
    if check[0] == 0:
        pattern = re.compile(r'test is successful')
        match = pattern.search(check[1])
        if match:
            # 更新规则文件
            get_rules_file(rulesdir,naxsi_rulesfile)
            naxsi_rulesfile.close()
            calc_files_md5(rulesdir,naxsi_md5_file)
            get_rules_file(lua_waf_dir, lua_waf_file)
            lua_waf_file.close()
            calc_files_md5(lua_waf_dir,lua_wafi_md5_file)
            # 重载nginx
            commands.getstatusoutput("/usr/local/nginx/sbin/nginx -s reload")

3.2 Naxsi配置文件结构

每个站点的naxsi配置由三个文件组成:

  1. **_rules.conf:站点防护规则主配置
  2. **_active-mode.rules:站点防护模式配置
  3. **.rules:站点规则配置文件(主要配置白名单规则)

3.3 Lua模块配置管理

  • 采用Redis+Django实现配置管理
  • 通过Web管理后台直接修改配置
  • 功能包括:
    • WAF节点状态展示
    • URL访问频率限制配置
    • 站点防护功能配置
    • 实时拦截情况展示

4. Naxsi配置详解

4.1 全局配置

在nginx的http段include naxsi全局配置文件:

include /path/to/rules.conf;

rules.conf文件包含:

  • naxsi_core.rules:核心规则
  • doxi-rules:naxsi rules的发布版本,包括:
    • web_server.rules
    • web_apps.rules
    • scanner.rules
    • app_server.rules

4.2 Server段配置

在每个server段加入:

set $naxsi_extensive_log 1;  # 开启扩展日志记录

4.3 Location段配置

在每个server的location段加入:

include /etc/nginx/naxsi-rules/**_rules.conf;

4.4 拦截处理配置

在每个server加入拦截跳转配置:

location /RequestDenied {
    rewrite ^ http://security.example.com/block?type=1&msec=$msec&url=$scheme://$host$request_uri redirect;
}

5. Lua配置详解

5.1 主配置文件

在nginx的http段include lua配置文件:

lua_package_path "/etc/nginx/lua_waf/?.lua;/usr/local/lib/lua/?.lua;;";

init_by_lua '
    waf = require("waf");
    app_name = "cc";  # 根据应用名称修改
';

init_worker_by_lua '
    cron = require("cron");
';

access_by_lua_file /etc/nginx/lua_waf/access.lua;
log_by_lua_file /etc/nginx/lua_waf/sendlog.lua;

6. 日志管理

  • 使用Kibana展示Naxsi拦截日志
  • 可视化HTTP请求分析

7. 实现要点总结

  1. 性能优化:将规则匹配这种CPU密集型操作交给Naxsi处理,Lua负责复杂业务逻辑
  2. 配置管理:通过版本控制和MD5校验确保配置更新安全
  3. 模块化设计:Naxsi规则和Lua代码分离,便于维护和扩展
  4. 可视化监控:集成Kibana实现日志可视化分析

8. 扩展建议

  1. 规则自动更新:实现规则库的自动更新机制
  2. 机器学习集成:结合异常检测算法提高防护能力
  3. API安全:增加针对API的特定防护规则
  4. 性能监控:增加WAF自身性能监控指标

通过这种OpenResty+Naxsi的组合方案,可以在保证高性能的同时实现全面的Web应用防护。

基于OpenResty+Naxsi的WAF实现详解 1. WAF概述 本文介绍了一种结合OpenResty(基于Nginx+Lua)和Naxsi的软WAF实现方案,通过将两种技术优势互补,构建高性能的Web应用防火墙。 1.1 技术选型背景 传统Lua WAF的不足 :基于Lua正则匹配HTTP请求内容时,加载大量防护规则会导致Nginx性能显著下降 Naxsi的优势 :专门为WAF设计的Nginx模块,能高效处理HTTP请求内容防护策略 Lua的优势 :适合实现复杂的安全防护策略和业务逻辑 2. WAF功能架构 2.1 功能划分 Naxsi负责的防护: SQL注入攻击 XSS攻击 目录遍历漏洞 命令注入攻击 虚拟补丁 扫描器攻击 Lua负责的防护: CC攻击防护 全局IP访问频率限制 特定URL访问频率限制 IP黑白名单 URL白名单 HTTP请求转发 2.2 部署模式 云WAF模式部署 直接嵌入应用现有Nginx的方式部署 3. WAF管理后台 3.1 配置文件管理 由于使用了两个独立Nginx模块,需要两套不同的配置文件: Naxsi模块 :防护规则以文件形式下发 Lua模块 :代码以文件形式下发 配置文件同步机制: WAF节点定期通过HTTP从管理端下载配置文件 配置文件分开存放:naxsi配置与lua代码分离 配置文件更新流程: 3.2 Naxsi配置文件结构 每个站点的naxsi配置由三个文件组成: **_rules.conf :站点防护规则主配置 **_active-mode.rules :站点防护模式配置 **.rules :站点规则配置文件(主要配置白名单规则) 3.3 Lua模块配置管理 采用Redis+Django实现配置管理 通过Web管理后台直接修改配置 功能包括: WAF节点状态展示 URL访问频率限制配置 站点防护功能配置 实时拦截情况展示 4. Naxsi配置详解 4.1 全局配置 在nginx的http段include naxsi全局配置文件: rules.conf 文件包含: naxsi_core.rules :核心规则 doxi-rules :naxsi rules的发布版本,包括: web_ server.rules web_ apps.rules scanner.rules app_ server.rules 4.2 Server段配置 在每个server段加入: 4.3 Location段配置 在每个server的location段加入: 4.4 拦截处理配置 在每个server加入拦截跳转配置: 5. Lua配置详解 5.1 主配置文件 在nginx的http段include lua配置文件: 6. 日志管理 使用Kibana展示Naxsi拦截日志 可视化HTTP请求分析 7. 实现要点总结 性能优化 :将规则匹配这种CPU密集型操作交给Naxsi处理,Lua负责复杂业务逻辑 配置管理 :通过版本控制和MD5校验确保配置更新安全 模块化设计 :Naxsi规则和Lua代码分离,便于维护和扩展 可视化监控 :集成Kibana实现日志可视化分析 8. 扩展建议 规则自动更新 :实现规则库的自动更新机制 机器学习集成 :结合异常检测算法提高防护能力 API安全 :增加针对API的特定防护规则 性能监控 :增加WAF自身性能监控指标 通过这种OpenResty+Naxsi的组合方案,可以在保证高性能的同时实现全面的Web应用防护。