pull/104/head
有安科技 2024-11-24 21:27:20 +08:00
parent 58c7f108c4
commit 2b382dc57b
19 changed files with 103 additions and 202 deletions

View File

@ -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

View File

@ -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 。
### 插件编写

View File

@ -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 仓库,并将社区的规则和插件打包进社区版共享给大家

View File

@ -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。

View File

@ -37,7 +37,7 @@ firewall-cmd --permanent --zone=internal --change-interface=wafnet
### 🍍 如何修改南墙管理后台的端口和SSL证书 <!-- {docsify-ignore} -->
?> 南墙管理后台的配置位于/uuwaf/web/conf/conf.yamladdr字段值即为ip地址和端口。替换SSL证书可以替换/uuwaf/web/conf/目录中的server.crt和server.key文件之后执行systemctl restart uuwaf重启服务使配置生效。
?> 南墙管理后台的配置位于/uuwaf/web/conf/config.jsonaddr字段值即为ip地址和端口。替换SSL证书可以替换/uuwaf/web/conf/目录中的server.crt和server.key文件之后执行systemctl restart uuwaf重启服务使配置生效。

Binary file not shown.

View File

@ -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个插件或规则即可再免费续一年商业升级。
- 参与贡献的人员可永久将你的大名留在规则贡献者名单当中,供所有人瞻仰。

View File

@ -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=关注&nbsp;南墙&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个插件或规则即可再免费续一年商业升级。
- 参与贡献的人员可永久将你的大名留在规则贡献者名单当中,供所有人瞻仰。

View File

@ -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

View File

@ -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 仓库,并将社区的规则和插件打包进社区版共享给大家

View File

@ -1,32 +1,32 @@
--[[
: anti cc
:
:
: 访/api/3605ip访
--]]
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/3605ip访
--]]
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