开源免费的 SamWAF 测评

GitHub 上的名字是驼峰命名的 SamWaf ,对于我来说 Waf 的缩写看着很难受,故标题改为 WAF

如果你想快速部署一个开始玩,推荐使用雨云一键免费部署,初始赠送的额度够玩一会的了,使用优惠码 github 注册并绑定微信可以获得 5 折优惠券:

温馨提示:我没看文档,只看了默认用户名和密码的部分,文档的其他部分一眼没看!!!如果有地方和文档说的不同,优先以文档为准。

文档在这里: 主要功能 | SamWaf 网站防火墙

通过雨云一键部署

TL;DR

功能特色之一是防水墙,个人挺喜欢这个
负载均衡和健康检查一个不差
支持在内存里保存网站的缓存文件,也可磁盘或磁盘+内存混合
隧道防护模式支持 Redis/远程桌面等 TCP/UDP 连接的四层防护
bug 比较多,不过大多数是界面的 bug

术语

  • 本文出现的“四层”、“七层”均指以 OSI 七层模型中物理层作为第一层的层数编号,例如七层对应 OSI 七层模型中的应用层

  • 防水墙为防火墙的反义词,防火墙主要防御对象为外网入站流量,而防水墙防护对象为内网出站流量,主要用途在防止由于鉴权错误等问题错误的将机密数据返回给客户端,例如 API 接口在没有配置防水墙时通过攻击会将机密数据泄露,而防水墙可以检测泄露的数据并且阻止返回或者进行脱敏替换

控制变量

使用 blazehttp 进行检测

总样本 33877 个
正常样本 33219 个(应该被放行)
恶意样本 658 个(应该被拦截)

后端使用我自己写的基于 Webman 框架的博客系统,web 服务和 WAF 均在本机运行

CPU AMD Ryzen 5 5500 4.40 GHz
RAM 32G D4 2666MT/s(超炸了还过保了,跑不到 3600 了)【16*2】
装着 web 服务和 waf 的硬盘 Fanxiang S690MQ 2TB

计算方法

检出率:正确拦截/恶意样本
误报率:误报拦截/正确放行
准确率:(正确拦截+正确放行)/总样本

SamWaf

检出率 31.31%
误报率:0.77%
准确率:97.91%

请求平均耗时:90.27ms

QPS 先在 80-90 之间浮动,随后降低到 20-40 之间浮动

测试期间看到了日志内容在处理日志:

之后看了一下和日志相关的配置,发现日志貌似是使用 sqlite 存储的,是一个
local_log.db 文件

测了三轮,这个文件膨胀到了 234MB

看了后台的文件大小统计并没有刷新

后面才发现刷新页面不会自动刷新文件大小,需要点右上角的刷新才会(

如果在后台呆着的话会看到自带的通知模块在有攻击的时候会发告警

日志查看页面唯一不完善的就是翻页的地方没法手动输入页码,并且表格使用 ajax 了,没法通过 url 中改 get 请求值的方式进行翻页

看到这里有一个请求识别码的搜索功能,于是我手写了一个简单而且容易被拦截的目录穿越请求,结果一次就成(

确实可以查询的到,不过查询时间达到了恐怖的 3.5 秒,感觉使用 sqlite 的性能瓶颈还是有的

这个功能蛮好用的,开启后只需要选中一个东西然后点一下别处就可以跳到自定义规则的页面

并且这个页面上就有写系统变量和示例代码等,不像某 waf 虽然能自定义 lua 但是找系统变量还要在文档找半天

并且同时支持图形化的规则创建

WAF 同时也内置了证书自动申请的功能

DNS 验证时支持阿里华为腾讯和 CF 的 DNSAPI ,同时也支持文件验证

申请平台默认只有一个 Let’s Encrypt ,但是可以通过自定义的方式添加 CA 服务器

网站编辑页和创建页都差不多是这个样子的,有点神奇的元素错位

负载均衡功能是我一直想要 WAF 上有的,目前我用过的雷池要付费,uuWAF 免费(批评一下,我被打的时候后端没挂,网关服务器没挂,放中间的 uuWAF 挂了),宝塔忘记了。

这里的负载均衡器没看明白是四层均衡还是七层均衡,支持带权轮询和 IP 哈希两种模式(带权轮询按权重比例分配流量,随机性高;IP 哈希可以让同一个 IP 始终访问同一台后端服务器)

引擎自带防护页的设置是这样的:

这是其他设置的页面:

这是健康检查的页面没有明确指出是否和前面的负载均衡是关联的,也没有指出被列为 down 后多少秒重新检测(最后还是去看了一眼文档,没发现)

验证码配置是这样的,选择传统方式时没有下方 capJS 相关的选项

IP 提取模式这里还发现个小 bug,网卡模式就是直接从网络连接中获取客户端 IP,而下方的实际上是 HTTP 头模式,貌似是模板没渲染到?选择 Header 模式后并不能手动指定从哪个头获取 IP

capJS 也是一个开源项目,开启后的验证页面长这样:

传统验证码则是考研大脑的图像识别能力了

同样,支持给站点配置缓存

如果作为资源下载或者边缘 CDN 节点什么的,有一个静态网站模式,可以免去一个后端服务器

最后的是传输配置:

支持防水墙功能,支持匹配前缀、后缀、包含、完全等于

CC 防御的可自定义性还是挺好的(这里的 IP 获取方式使用 Header 模式时依然不支持自定义头部)

数据分析页的地图好奇怪啊(可能是内网没地理数据所以右侧本来有东西的结果没渲染)

风险日志这里似乎有点 emmm

列表和 Tab 功能重复了,并且每次改变一下还要手动点一下查询

隧道防护功能就是一个可以防护 Redis、远程桌面这些使用四层协议的,不过并不支持流量分析之类的,只有基本的 IP ACL 功能

支持多用户,可以配置用户为超级管理员或者管理员

但是这个状态我没看懂啥意思(想再看眼文档发现貌似没写)

这个设备管理页面可能是多地登录的场景吧,但是即使手动点击查询按钮也没有数据,难道本机不算?那左上角的按钮“切换本机(不进行远程访问)”我就更无法理解了

文档里并没有提到这个功能,并且我也没有找到多机部署或者主从同步相关的配置,可能还是半成品

1 个赞

感觉还可以,拿我的8-16测试一下 :grinning_face: