轻量级openresty防火墙——玄冰盾(Nova WAF)

admin 2024年7月10日18:20:47评论29 views字数 2014阅读6分42秒阅读模式

轻量级openresty防火墙——玄冰盾(Nova WAF)

前言

最近在搭一个Linux服务器管理系统,在选WAF上犯了难。以下是我研究过的几个WAF:

WAF 优点 缺点
社区版雷池 长亭科技的WAF,质量有保证。 太完美了,不适合集成到我的服务器管理面板来。
lua-resty-waf Star多 长期不更新了,配置复杂。
赵班长的WAF 轻量 长期不更新,规则过于简陋
zhongkui-waf 代码清晰,有管理页面 规则不行,和上述的WAF规则存在雷同
南墙WAF 页面简洁 过重,需要Mysql

研究了这么多WAF,决定还是自己动手写一个,于是玄冰盾(Nova WAF)诞生了!

概述

玄冰盾(Nova WAF)是一个专为保护Web服务器而设计的轻量级Web应用防火墙(WAF)。它采用Lua脚本语言作为主要开发语言,完全基于OpenResty平台,不依赖于外部数据存储中间件(如Redis或MySQL),从而保证了高效的威胁分析和拦截能力。

设计理念

玄冰盾(Nova WAF)的设计理念包括:

  • 轻量化和高效性:Nova WAF的整体架构设计非常精简,通过Lua脚本实现所有的检测和拦截逻辑,避免了复杂的中间件依赖,保证了高效的请求处理和响应速度。
  • 灵活的规则扩展:系统内置多种常见攻击检测规则,同时支持用户根据特定需求自定义和扩展检测规则,使其可以适应不同场景和业务需求。
  • 增强的用户体验:引入置信度机制,通过对检测结果进行评估和标记,减少误拦截的可能性,提升了系统的可用性和用户体验。
  • 自动化安全防护:Nova WAF内置惩罚机制,对于频繁触发恶意行为检测的用户,自动增加封禁时间,有效提升了系统的安全防护能力。

使用场景

玄冰盾(Nova WAF)适用于以下场景:

  • Web服务器安全保护:作为Web服务器的前置防火墙,保护服务器免受各类网络攻击,包括SQL注入、跨站脚本(XSS)、路径遍历等常见攻击方式。
  • API服务保护:保护API服务免受恶意请求和CC攻击,确保API的稳定和安全性。
  • 云原生应用安全:在云原生架构中,作为微服务和容器化应用的安全网关,为分布式应用提供统一的安全保护。
  • 自定义业务场景:由于Nova WAF支持灵活的规则扩展和定制,可以根据特定的业务需求进行定制化配置,适应各种复杂的业务场景和安全需求。

部署与使用

先决条件

  • 安装 OpenResty
  • LuaJIT 2.1+
  • 配置 Nginx

步骤

  1. 克隆项目代码:

    git clone https://github.com/AnkioTomas/nova-waf.gitcd nova-waf
  2. 将 WAF 脚本文件复制到 OpenResty:

    cp -r ./src /usr/local/openresty/waf/
  3. 配置 Nginx:编辑 Nginx 配置文件 nginx.conf,在 http 块中添加以下内容:

     include /usr/local/openresty/waf/conf.d/http.conf;

详细的安装和使用说明可以参考项目仓库中的README文档。

用户界面

UI 是没有的,作为一个集成的模块他不需要UI,他只需要提供数据即可。

玄冰盾(Nova WAF)可以持久化存储两类数据:拦截日志统计数据

拦截日志

拦截日志是按照logs/当天日期/访问IP.log的形式存储在日志目录。

每一行是一个json数据。

  • request_uri:请求的路径
  • request_protocol:请求的协议
  • request_data:请求的数据
  • user_agent:用户代理字段
  • headers:headers字段列表
  • ip:被拦截的IP
  • request_id:nginx自动生成的请求ID
  • attack_type:匹配到的规则名称 (形如类型 - 具体规则名
  • request_time:响应时间
  • http_method:请求方法

统计数据

统计的周期是一小时,数据按照 count/当天日期/当前时.json的形式存储在日志目录。

统计的数据类型如下:

  • 响应状态码:count_status_开头,后面是具体响应码,统计的是响应次数。
  • 拦截请求数:count_reqDenyCount
  • 访问的站点数:count_host_开头,后面是具体的请求站点,数据从HOST字段获取,可能被伪造。
  • 请求总数:count_reqCount
  • 请求来源:count_referer_开头,后面跟随具体的referer链接。
  • 请求IP:count_ip_开头,后面跟随具体的请求Ip,如果WAF所在的nginx不是边界路由,请在边界路由的nginx上添加proxy_set_header X-Forwarded-For $remote_addr;防止IP伪造。
  • 用户的操作系统/爬虫:count_os_开头,后面跟随具体的操作系统/爬虫信息。

结语

目前,玄冰盾(Nova WAF)仍处于测试阶段,因此不建议直接将其部署到生产环境中。建议首先在测试环境中进行体验和评估,确保其能够满足您的安全需求和预期效果。

原文始发于微信公众号(地表最强伍迪哥):轻量级openresty防火墙——玄冰盾(Nova WAF)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月10日18:20:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   轻量级openresty防火墙——玄冰盾(Nova WAF)https://cn-sec.com/archives/2939696.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息