mirror of https://github.com/Safe3/uuWAF
update
parent
58c7f108c4
commit
2b382dc57b
|
@ -4,15 +4,10 @@
|
|||
### 功能更新
|
||||
|
||||
- 新增日志写数据库开关,使用kafka日志功能时可关闭写数据库
|
||||
|
||||
- 升级ip地理位置数据库,支持多语言和ipv6地址查询
|
||||
|
||||
- 优化升级规则库,降低误报并提升拦截率
|
||||
|
||||
- 机器学习功能去掉对js、css图片等静态资源的AI规则学习
|
||||
|
||||
- 优化配置,合并/uuwaf/conf/uuwaf.conf中部分配置到config.json中
|
||||
|
||||
- CDN新增支持断点续传文件,如视频等文件的缓存加速
|
||||
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 288 KiB After Width: | Height: | Size: 259 KiB |
|
@ -1,7 +1,7 @@
|
|||
|
||||
## :grapes: 规则
|
||||
|
||||
?>这里对规则所用到的一些变量和相关函数进行说明,更多规则编写方法请大家参照WAF管理后台中的规则管理当中的众多实际例子。规则模板见:https://github.com/Safe3/uuWAF/blob/main/rules/anti-cc.lua ,一条防cc攻击的安全规则。欢迎各位贡献安全规则,详情见:https://waf.uusec.com/#/guide/contribute 。
|
||||
?>这里对规则所用到的一些变量和相关函数进行说明,更多规则编写方法请大家参照WAF管理后台中的规则管理当中的众多实际例子。规则模板见:https://github.com/Safe3/uuWAF/blob/main/src/rules/anti-cc.lua ,一条防cc攻击的安全规则。欢迎各位贡献安全规则,详情见:https://waf.uusec.com/#/guide/contribute 。
|
||||
|
||||
### 规则示例
|
||||
|
||||
|
@ -477,7 +477,7 @@ end
|
|||
|
||||
## :melon: 插件
|
||||
|
||||
?>南墙支持强大的插件扩展功能,方便用户自行实现一些特有功能。插件模板见:https://github.com/Safe3/uuWAF/blob/main/plugins/kafka-logger.lua ,一个kafka日志记录插件。欢迎各位贡献安全插件,详情见:https://waf.uusec.com/#/guide/contribute 。
|
||||
?>南墙支持强大的插件扩展功能,方便用户自行实现一些特有功能。插件模板见:https://github.com/Safe3/uuWAF/blob/main/src/plugins/kafka-logger.lua ,一个kafka日志记录插件。欢迎各位贡献安全插件,详情见:https://waf.uusec.com/#/guide/contribute 。
|
||||
|
||||
### 插件编写
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
## :gift_heart: 参与方法 <!-- {docsify-ignore} -->
|
||||
?> 贡献者以 PR 的方式向 github 南墙社区仓库内提交。
|
||||
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/rules
|
||||
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/plugins
|
||||
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/src/rules
|
||||
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/src/plugins
|
||||
- PR 中根据 Pull Request 的模板填写规则或插件信息
|
||||
- 内部审核 PR,确定是否合并入仓库
|
||||
- 每次发布新版时,CI 拉取 Github 仓库,并将社区的规则和插件打包进社区版共享给大家
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
!> 注意:请尽量选择一台纯净Linux x86_64环境的服务器安装,因为安装过程会卸载旧的MySQL数据库并重新安装,如果没有备份,可造成旧的MySQL数据丢失,并且南墙采用云WAF反向代理模式,默认需要使用80、443端口。
|
||||
|
||||
主机版安装方式如下:
|
||||
**主机版安装方式如下:**
|
||||
|
||||
系统要求:RHEL 7及以上兼容x86_64系统,如CentOS、Rocky Linux、AlmaLinux、Alibaba Cloud Linux、TencentOS等。
|
||||
|
||||
|
@ -29,14 +29,14 @@ curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install
|
|||
|
||||
?> 安装成功后会显示 “ 恭喜您,安装成功”
|
||||
|
||||
!> 主机版卸载方式如下:
|
||||
主机版卸载方式如下:
|
||||
|
||||
```bash
|
||||
sudo systemctl stop uuwaf && sudo /uuwaf/waf-service -s uninstall && sudo rm -rf /uuwaf
|
||||
sudo rpm -qa | grep -ie ^percona | xargs yum -y erase
|
||||
```
|
||||
|
||||
Docker版安装方式如下:
|
||||
**容器版安装方式如下:**
|
||||
|
||||
- 软件依赖:Docker 20.10.14 版本以上,Docker Compose 2.0.0 版本以上,低版本会导致sql数据无法导入以致南墙后台无法登录。
|
||||
|
||||
|
@ -48,7 +48,7 @@ curl -fsSL https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo
|
|||
|
||||
后续可直接执行 `bash ./waf/uuwaf.sh` 来管理南墙容器,包括启动、停止、更新、卸载等。
|
||||
|
||||
?> 快速入门:
|
||||
**安装后快速使用入门:**
|
||||
|
||||
1. 登录后台:访问https://ip:4443 ,ip为安装南墙的服务器ip地址,用户名admin,密码Passw0rd!。
|
||||
2. 添加站点:进入站点管理菜单,点击添加站点按钮,按提示添加站点域名与网站服务器ip。
|
||||
|
|
|
@ -37,7 +37,7 @@ firewall-cmd --permanent --zone=internal --change-interface=wafnet
|
|||
|
||||
### 🍍 如何修改南墙管理后台的端口和SSL证书? <!-- {docsify-ignore} -->
|
||||
|
||||
?> 南墙管理后台的配置位于/uuwaf/web/conf/conf.yaml中,addr字段值即为ip地址和端口。替换SSL证书可以替换/uuwaf/web/conf/目录中的server.crt和server.key文件,之后执行systemctl restart uuwaf重启服务使配置生效。
|
||||
?> 南墙管理后台的配置位于/uuwaf/web/conf/config.json中,addr字段值即为ip地址和端口。替换SSL证书可以替换/uuwaf/web/conf/目录中的server.crt和server.key文件,之后执行systemctl restart uuwaf重启服务使配置生效。
|
||||
|
||||
|
||||
|
||||
|
|
BIN
docs/waf-install
BIN
docs/waf-install
Binary file not shown.
|
@ -1,20 +0,0 @@
|
|||
# 贡献分享
|
||||
南墙 的发展离不开社区的每一位贡献者,希望大家踊跃为 南墙 贡献功能插件和安全规则。规则模板见:https://github.com/Safe3/uuWAF/blob/main/rules/anti-cc.lua ,规则API见:https://waf.uusec.com/#/api/README 。
|
||||
|
||||
|
||||
## :gift_heart: 参与方法
|
||||
> 贡献者以 PR 的方式向 github 南墙社区仓库内提交。
|
||||
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/rules
|
||||
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/plugins
|
||||
- PR 中根据 Pull Request 的模板填写规则或插件信息
|
||||
- 内部审核 PR,确定是否合并入仓库
|
||||
- 每次发布新版时,CI 拉取 Github 仓库,并将社区的规则和插件打包进社区版共享给大家
|
||||
|
||||
|
||||
|
||||
## :gem: 奖励措施
|
||||
> 参与贡献即可获得与 uuWAF 社区版内部大佬技术切磋交流的机会。提交 PR 过程中会有内部大佬审核,帮助改进规则和插件,共同进步。
|
||||
|
||||
- 提交一个规则或插件即可进入 uuWAF 核心贡献者群,参与讨论热点安全技术,且有机会与大佬们面对面交流。
|
||||
- 对于 uuWAF 商业版年费用户,在当年的商业版授权有效期内,只需在提交5个插件或规则,即可再免费续一年商业升级。
|
||||
- 参与贡献的人员可永久将你的大名留在规则贡献者名单当中,供所有人瞻仰。
|
102
src/README.md
102
src/README.md
|
@ -1,94 +1,20 @@
|
|||
# 南墙简介
|
||||
# 贡献分享
|
||||
南墙 的发展离不开社区的每一位贡献者,希望大家踊跃为 南墙 贡献功能插件和安全规则。规则模板见:https://github.com/Safe3/uuWAF/blob/main/src/rules/anti-cc.lua ,规则API见:https://waf.uusec.com/#/api/README 。
|
||||
|
||||
[![GitHub stars](https://img.shields.io/github/stars/Safe3/uuWAF.svg?label=关注 南墙&style=for-the-badge)](https://github.com/Safe3/uuWAF)
|
||||
[![Chat](https://img.shields.io/badge/Discuss-加入讨论组-7289da.svg?style=for-the-badge)](https://github.com/Safe3/uuWAF/discussions)
|
||||
|
||||
> **南墙**WEB应用防火墙(简称:`uuWAF`)一款工业级免费、高性能、高扩展,支持AI和语义引擎的Web应用和API安全防护产品。
|
||||
|
||||
![](http://waf.uusec.com/_media/waf.png)
|
||||
|
||||
🏠安装及使用请访问官网: https://waf.uusec.com/
|
||||
## :gift_heart: 参与方法
|
||||
> 贡献者以 PR 的方式向 github 南墙社区仓库内提交。
|
||||
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/src/rules
|
||||
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/src/plugins
|
||||
- PR 中根据 Pull Request 的模板填写规则或插件信息
|
||||
- 内部审核 PR,确定是否合并入仓库
|
||||
- 每次发布新版时,CI 拉取 Github 仓库,并将社区的规则和插件打包进社区版共享给大家
|
||||
|
||||
|
||||
|
||||
## :dart: 技术优势
|
||||
- :libra: 先进语义引擎
|
||||
|
||||
南墙采用业界领先的`SQL、XSS、RCE、LFI` 4种基于语义分析的检测引擎,结合多种深度解码引擎可对`base64、json、form-data`等HTTP内容真实还原,从而有效抵御各种绕过WAF的攻击方式,并且相比传统正则匹配具备准确率高、误报率低、效率高等特点,管理员无需维护庞杂的规则库,即可拦截多种攻击类型。
|
||||
|
||||
- :ophiuchus: 智能0day防御
|
||||
|
||||
南墙创新性的运用机器学习技术,使用**异常检测算法**对http正常与攻击流量进行区分识别,并对正常流量进行白名单威胁建模。通过**机器学习算法**自动学习正常流量中的参数特征,并转化成对应的参数白名单规则库,可以在面对各种突发0day漏洞时,无需添加规则即可拦截攻击,免除网站管理者一出现漏洞就需挑灯夜战升级的痛苦。
|
||||
|
||||
- :gemini: 高级规则引擎
|
||||
|
||||
南墙积极运用`nginx`和`luajit`的高性能、高灵活性特点,除了提供对普通用户友好性较好的传统规则创建模式,还提供了高扩展性、高灵活性的lua脚本规则编写功能,使得有一定编程功底的高级安全管理员可以创造出一系列传统WAF所不能实现的高级漏洞防护规则,用户可以编写一系列插件来扩展WAF现有功能。从而使得在拦截一些复杂漏洞时,可以更加得心应手。
|
||||
|
||||
|
||||
|
||||
|
||||
## :rocket: 一键安装
|
||||
|
||||
南墙为你提供了强大灵活的扩展和安全规则的编写API,在管理后台发布后所有规则无需重启立即生效,远超市面上大部分免费WAF产品如`ModSecurity`,规则展示如下:
|
||||
|
||||
![](http://waf.uusec.com/_media/rule.png)
|
||||
|
||||
🏠请访问官网: https://waf.uusec.com/ 下载 南墙WAF使用说明书 了解规则API详情
|
||||
|
||||
南墙安装及其简便,通常在几分钟内即可安装完毕,具体耗时视网络下载情况而定。
|
||||
|
||||
注意:请尽量选择一台纯净Linux x86_64环境的服务器安装,因为安装过程会卸载旧的MySQL数据库并重新安装,如果没有备份,可造成旧的MySQL数据丢失,并且南墙采用云WAF反向代理模式,默认需要使用80、443端口。
|
||||
|
||||
> 主机版安装方式如下:
|
||||
|
||||
```bash
|
||||
sudo yum install -y ca-certificates
|
||||
curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install
|
||||
```
|
||||
|
||||
安装成功后会显示 “ 恭喜您,安装成功!”
|
||||
|
||||
> Docker版安装方式如下:
|
||||
|
||||
安装前参考 [https://docker.1panel.dev/](https://docker.1panel.dev/) 配置镜像加速
|
||||
|
||||
```bash
|
||||
curl https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh
|
||||
```
|
||||
|
||||
> 快速入门:
|
||||
|
||||
1. 登录后台:访问https://ip:4443 ,ip为安装南墙的服务器ip地址,用户名admin,密码Passw0rd!。
|
||||
|
||||
2. 添加站点:进入站点管理菜单,点击添加站点按钮,按提示添加站点域名与网站服务器ip。
|
||||
3. 添加TLS证书:进入证书管理菜单,点击添加证书按钮,上传第二步中域名的https证书和私钥文件。
|
||||
4. 修改域名DNS指向:到域名服务商管理后台把域名DNS A记录的ip地址改为南墙服务器ip地址。
|
||||
5. 测试连通性:访问站点域名查看网站是否能够打开,查看返回的http header头server字段是否为uuWAF。
|
||||
|
||||
|
||||
|
||||
## :gift_heart: 贡献名单
|
||||
|
||||
如何贡献?参照: https://waf.uusec.com/#/guide/contribute
|
||||
|
||||
这里感谢puhui222、Kingdom、[k4n5ha0](https://github.com/k4n5ha0)为南墙所做的贡献!
|
||||
|
||||
<img src="https://waf.uusec.com/_media/sponsor.jpg" alt="捐赠" height="300px" />
|
||||
|
||||
|
||||
|
||||
|
||||
## :kissing_heart: 加入讨论
|
||||
|
||||
欢迎各位就 南墙 的各种bug或功能需求及使用问题,在如下渠道参与讨论
|
||||
|
||||
- 问题提交:https://github.com/Safe3/uuWAF/issues
|
||||
|
||||
- 讨论社区:https://github.com/Safe3/uuWAF/discussions
|
||||
|
||||
- 官方 QQ 群:11500614
|
||||
|
||||
- 官方微信群:微信扫描以下二维码加入
|
||||
|
||||
<img src="https://waf.uusec.com/_media/weixin.jpg" alt="微信群" height="200px" />
|
||||
## :gem: 奖励措施
|
||||
> 参与贡献即可获得与 uuWAF 社区版内部大佬技术切磋交流的机会。提交 PR 过程中会有内部大佬审核,帮助改进规则和插件,共同进步。
|
||||
|
||||
- 提交一个规则或插件即可进入 uuWAF 核心贡献者群,参与讨论热点安全技术,且有机会与大佬们面对面交流。
|
||||
- 对于 uuWAF 商业版年费用户,在当年的商业版授权有效期内,只需在提交5个插件或规则,即可再免费续一年商业升级。
|
||||
- 参与贡献的人员可永久将你的大名留在规则贡献者名单当中,供所有人瞻仰。
|
||||
|
|
|
@ -1,45 +1,45 @@
|
|||
---
|
||||
--- Generated by UUSEC(https://www.uusec.com/)
|
||||
--- Created by Safe3.
|
||||
--- DateTime: 2022/9/21 20:37
|
||||
---
|
||||
local producer = require("resty.kafka.producer")
|
||||
local log = require("waf.log")
|
||||
|
||||
local _M = {
|
||||
version = 0.1,
|
||||
name = "kafka-logger"
|
||||
}
|
||||
|
||||
local function kafkaLog(_, brokerList, info)
|
||||
local kp = producer:new(brokerList, { producer_type = "async" })
|
||||
local key = "key"
|
||||
local message = log.encodeJson(info)
|
||||
local ok, err = kp:send("waf-log", key, message)
|
||||
if not ok then
|
||||
log.errLog(_M.name, " send err: ", err)
|
||||
end
|
||||
end
|
||||
|
||||
function _M.log_post_filter(waf)
|
||||
local brokerList = {
|
||||
{
|
||||
host = "127.0.0.1",
|
||||
port = 9092,
|
||||
|
||||
sasl_config = {
|
||||
mechanism = "PLAIN",
|
||||
user = "USERNAME",
|
||||
password = "PASSWORD",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
if waf.msg then
|
||||
local country, province, city = log.ip2loc(waf.ip)
|
||||
local info = { rule_id = waf.rule_id, ip = waf.ip, host = waf.host, url = waf.reqUri, data = log.utf8(waf.msg), req = log.utf8(log.getReq()), country = country, province = province, city = city, create_at = ngx.localtime() }
|
||||
log.broker(kafkaLog, brokerList, info)
|
||||
end
|
||||
end
|
||||
|
||||
return _M
|
||||
---
|
||||
--- Generated by UUSEC(https://www.uusec.com/)
|
||||
--- Created by Safe3.
|
||||
--- DateTime: 2022/9/21 20:37
|
||||
---
|
||||
local producer = require("resty.kafka.producer")
|
||||
local log = require("waf.log")
|
||||
|
||||
local _M = {
|
||||
version = 0.1,
|
||||
name = "kafka-logger"
|
||||
}
|
||||
|
||||
local function kafkaLog(_, brokerList, info)
|
||||
local kp = producer:new(brokerList, { producer_type = "async" })
|
||||
local key = "key"
|
||||
local message = log.encodeJson(info)
|
||||
local ok, err = kp:send("waf-log", key, message)
|
||||
if not ok then
|
||||
log.errLog(_M.name, " send err: ", err)
|
||||
end
|
||||
end
|
||||
|
||||
function _M.log_post_filter(waf)
|
||||
local brokerList = {
|
||||
{
|
||||
host = "127.0.0.1",
|
||||
port = 9092,
|
||||
|
||||
sasl_config = {
|
||||
mechanism = "PLAIN",
|
||||
user = "USERNAME",
|
||||
password = "PASSWORD",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
if waf.msg then
|
||||
local country, province, city = log.ip2loc(waf.ip)
|
||||
local info = { rule_id = waf.rule_id, ip = waf.ip, host = waf.host, url = waf.reqUri, data = log.utf8(waf.msg), req = log.utf8(log.getReq()), country = country, province = province, city = city, create_at = ngx.localtime() }
|
||||
log.broker(kafkaLog, brokerList, info)
|
||||
end
|
||||
end
|
||||
|
||||
return _M
|
|
@ -1,11 +1,11 @@
|
|||
# 贡献分享
|
||||
南墙 的发展离不开社区的每一位贡献者,希望大家踊跃为 南墙 贡献功能插件和安全规则。规则模板见:https://github.com/Safe3/uuWAF/blob/main/rules/anti-cc.lua ,规则API见:https://waf.uusec.com/#/api/README 。
|
||||
南墙 的发展离不开社区的每一位贡献者,希望大家踊跃为 南墙 贡献功能插件和安全规则。规则模板见:https://github.com/Safe3/uuWAF/blob/main/src/rules/anti-cc.lua ,规则API见:https://waf.uusec.com/#/api/README 。
|
||||
|
||||
|
||||
## :gift_heart: 参与方法
|
||||
> 贡献者以 PR 的方式向 github 南墙社区仓库内提交。
|
||||
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/rules
|
||||
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/plugins
|
||||
- 规则提交位置: https://github.com/Safe3/uuWAF/tree/master/src/rules
|
||||
- 插件提交位置: https://github.com/Safe3/uuWAF/tree/master/src/plugins
|
||||
- PR 中根据 Pull Request 的模板填写规则或插件信息
|
||||
- 内部审核 PR,确定是否合并入仓库
|
||||
- 每次发布新版时,CI 拉取 Github 仓库,并将社区的规则和插件打包进社区版共享给大家
|
|
@ -1,32 +1,32 @@
|
|||
--[[
|
||||
规则名称: anti cc
|
||||
|
||||
过滤阶段: 请求阶段
|
||||
|
||||
危险等级: 中危
|
||||
|
||||
规则描述: 当一分钟访问/api/路径频率超过360次,则在5分钟内拦截该ip访问
|
||||
--]]
|
||||
|
||||
|
||||
if not waf.startWith(waf.toLower(waf.uri), "/api/") then
|
||||
return false
|
||||
end
|
||||
|
||||
local sh = waf.ipCache
|
||||
local ccIp = 'cc-' .. waf.ip
|
||||
local c, f = sh:get(ccIp)
|
||||
if not c then
|
||||
sh:set(ccIp, 1, 60, 1) -- 设置1分钟也就是60秒访问计数时间
|
||||
else
|
||||
if f == 2 then
|
||||
return waf.block(true) -- 重置TCP连接,不记录日志
|
||||
end
|
||||
sh:incr(ccIp, 1)
|
||||
if c + 1 >= 360 then -- 频率超过360次
|
||||
sh:set(ccIp, c + 1, 300, 2) -- 设置5分钟也就是300秒拦截时间
|
||||
return true, ccIp, true -- 返回参数,第一个true为是否检测到;第二个参数ccIp为日志记录内容;第三个参数true表示拦截,false表示只记录不拦截
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
--[[
|
||||
规则名称: anti cc
|
||||
|
||||
过滤阶段: 请求阶段
|
||||
|
||||
危险等级: 中危
|
||||
|
||||
规则描述: 当一分钟访问/api/路径频率超过360次,则在5分钟内拦截该ip访问
|
||||
--]]
|
||||
|
||||
|
||||
if not waf.startWith(waf.toLower(waf.uri), "/api/") then
|
||||
return false
|
||||
end
|
||||
|
||||
local sh = waf.ipCache
|
||||
local ccIp = 'cc-' .. waf.ip
|
||||
local c, f = sh:get(ccIp)
|
||||
if not c then
|
||||
sh:set(ccIp, 1, 60, 1) -- 设置1分钟也就是60秒访问计数时间
|
||||
else
|
||||
if f == 2 then
|
||||
return waf.block(true) -- 重置TCP连接,不记录日志
|
||||
end
|
||||
sh:incr(ccIp, 1)
|
||||
if c + 1 >= 360 then -- 频率超过360次
|
||||
sh:set(ccIp, c + 1, 300, 2) -- 设置5分钟也就是300秒拦截时间
|
||||
return true, ccIp, true -- 返回参数,第一个true为是否检测到;第二个参数ccIp为日志记录内容;第三个参数true表示拦截,false表示只记录不拦截
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
Loading…
Reference in New Issue