前言
最近在搭一个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
步骤
-
克隆项目代码: git clone https://github.com/AnkioTomas/nova-waf.git
cd nova-waf
-
将 WAF 脚本文件复制到 OpenResty: cp -r ./src /usr/local/openresty/waf/
-
配置 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)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论