大家好,我是开源君!
最近在 GitHub 上逛的时候,看到一个叫 SafeLine开源项目,目前收获了近 2w 的 Star,可以说是最近非常火的国产WAF项目了。
项目简介
SafeLine是长亭科技开源的一款自托管 Web 应用防火墙(WAF),同时具备反向代理功能,能为 Web 服务构建一道坚实的安全屏障,通过拦截过滤 HTTP/HTTPS 请求,在恶意流量到达后端应用之前进行清洗和阻断。与云 WAF 不同,它完全运行在你自己的服务器上,让你对流量和日志拥有绝对控制权,同时也不需要把所有流量托管给第三方云服务。
功能特性
支持常见的 SQL 注入、XSS、路径遍历等数十种常见 Web 攻击防护内置速率限制机制,可保护站点免受 DoS/暴力攻击和请求滥用支持动态保护功能,将 HTML/JS 内容进行动态加密混淆反向代理架构,可实时清洗和转发合法流量人机验证(如 CAPTCHA)和机器人防护机制内置身份认证功能,支持用户名密码、SSO单点登录;提供可视化管理界面,方便策略配置和流量监控
项目体验展示
为了体验防护效果,开源君在本地搭建了一个web站,同时用3000端口直连应用(无 WAF) ,8888端口通过 SafeLine 代理(有 WAF)。所有攻击请求完全一致,唯一的区别只是,请求是否经过 WAF。
场景1:绕过登录,直接拿到管理员权限这是最经典的一个场景。
在 3000 端口上,登录框几乎就是“裸奔状态”。开源君随手在用户名里塞了一段常见的 SQL 注入语句,密码随便填,点一下登录——页面直接跳转成功,右上角赫然显示着 admin。没有试探,没有报错,一次请求,管理员权限就到手了。然后把同样的输入复制一份,走 8888 端口再来一次。结果很干脆:页面没跳,账号没登,SafeLine 直接拒绝了请求,没有登录成功。我们来到雷池管理后台,从攻击日志中可以看到刚刚这笔被拦截的攻击记录以及具体详细信息
场景2:API 接口直接“拖库”,数据被窃取
如果说第一个场景是“闯进系统”,那第二个场景展示的就是 闯进来之后能拿走什么 。开源君构建的这个web页面的搜索 API 本身存在 SQL 注入风险。在 3000 端口下,通过构造查询参数,让接口返回的内容不再是商品数据,而是数据库里的真实用户的信息,账号、密码都被扒出来了。整个过程不需要登录、不需要权限,只是一次普通的 GET 请求。而当同一个 URL 请求走 8888 端口时,SafeLine 直接拦截。联合查询、注释符号、字段拼接这些典型的“拖库特征”,在 WAF 规则里命中率极高,攻击请求在入口处就被终止。后台同样捕获到了这个攻击记录。
场景3:恶意扫描请求
第三个场景,开源君刻意换了一种思路:不利用 web页面的漏洞,而是模拟真实攻击者的扫描行为。在很多真实攻击中,黑客并不知道目标是否存在漏洞,而是会不断尝试在 URL 参数中注入诸如 ?cmd=cat /etc/passwd 这样的探测命令,寻找系统级突破口。web页面本身不会执行这些命令,但问题就在于,它会全部接受这些请求 。在 3000 端口下,加上这种参数,页面照样正常打开,看起来什么事都没发生。但从安全角度看,这其实是最危险的状态:恶意请求已经顺利进来了,只是暂时没踩到雷。而当请求经过 SafeLine 时,情况立刻不同。cat /etc/passwd 这种典型的 Linux 攻击特征,WAF 几乎是“秒级识别”,请求直接被拦在门外,连试探的机会都不给。上面三个场景可以看到,SafeLine 的作用非常清晰,在应用之前建立一道“强制防线”。哪怕web本身漏洞存在,只要流量经过 WAF,攻击就会有完全不同的结果。
快速安装、使用
SafeLine 的部署环境要求很低,普通服务器即可满足需求:
Linux 系统(x86_64/arm64 架构)
Docker 20.10.14+
Docker Compose 2.0.0+
最低 1 核 CPU、1GB 内存、5GB 磁盘。
安装方式官方给了两种方式:
1、一键安装执行下面的命令,按提示完成安装目录设置等操作,安装成功后直接进入Web UI配置。bash -c ”$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)”
2、手动 Docker 部署开源君就是用这个方法进行部署的,先创建安装目录,并下载配置文件:
mkdir -p "/data/safeline"cd "/data/safeline"wget "https://waf.chaitin.com/release/latest/compose.yaml"touch ".env"然后编写.env文件(示例内容):
SAFELINE_DIR=/data/safelineIMAGE_TAG=latestMGT_PORT=9443POSTGRES_PASSWORD=自定义数据库密码SUBNET_PREFIX=172.22.222IMAGE_PREFIX=chaitinARCH_SUFFIX= # ARM架构需改为"-arm"RELEASE= # 需LTS版本改为"-lts"REGION=-gMGT_PROXY=0最后启动服务,等待安装部署完成。
docker compose up -d等待安装部署完成后,使用这个命令获取管理员账号密码:
docker exec safeline-mgt resetadmin然后访问Web控制台:https://[服务器IP]:9443/,用输出的初始账号密码登录。
首页就是一个直观的统计报表页面,展示相关的数据记录情况。
在“防护应用”模块可以添加需要防护的应用并进行配置,开源君搭建的8888端口页面就是在这里进行配置的。
同样也可以左边栏里面进行全局配置 CC 防护,人机验证,身份认证等功能。
小结
作为一款优秀的国产开源 WAF 神器,SafeLine 完美平衡了防护效果、使用便捷性和经济性。它不仅能有效抵御各类 Web 攻击,还提供了丰富的配置选项和直观的管理界面,社区版永久免费,功能完全满足日常防护需求。如果你正在为网站安全发愁,又不想投入高额成本,不妨试试这款 Github 高星开源项目,让 SafeLine 为你的 Web 服务保驾护航!