网站天天被扫端口、试注入?与其一个个打补丁,不如在前面架一道 Web 应用防火墙。本文分享我用雷池(SafeLine)社区版从零部署到日常使用的全过程,以及几个踩过的坑。

一、为什么我要给网站上 WAF

做过网站的人都知道,上线后根本不用你去找攻击 —— 攻击自己会找上门。SQL 注入尝试、目录扫描、弱口令爆破、CC 压测…… 日志里躺着一堆莫名其妙的请求。

之前我的应对方式是 "出了问题再补":Nginx 配点规则、服务器开 fail2ban、代码里做输入校验。但这种 "事后救火" 很被动,而且规则写多了反而容易误伤正常用户。

后来我开始认真了解 WAF(Web 应用防火墙):它站在网站前面,先过滤一遍流量,把恶意请求拦在门外,正常请求再放行给后端。商业 WAF 普遍不便宜,直到我遇到了雷池(SafeLine)社区版—— 开源、免费、中文文档全、基于 Docker 一键部署,自己就能在服务器上跑起来。

二、雷池 WAF 是什么

雷池 WAF 是 ** 长亭科技(Chaitin Tech)** 出品的 Web 应用防火墙,社区版对个人和中小团队免费使用,GitHub 上已经收获近 2 万 Star、数十万装机量。

和传统 "规则匹配" 型 WAF 不同,雷池主打语义分析检测:不靠一条条写死的攻击特征码,而是理解请求的语义,从而大幅降低误报。它基于 Nginx 开发,官方数据称平均检测延迟小于 1 毫秒,单核可轻松承载 2000+ TPS,对个人站点和中小规模业务完全够用。

它能防护的常见攻击类型包括:

  • SQL 注入、XSS 跨站脚本
  • 命令注入、代码注入、RCE
  • 路径遍历、SSRF、XXE
  • 暴力破解、CC 攻击、恶意爬虫
  • 后门与网页篡改

三、部署前的准备

雷池社区版以 Docker 方式交付,部署前先确认环境:

  • 系统:主流 Linux(Ubuntu / Debian / CentOS 均可)
  • Docker:20.10.6 以上版本
  • CPU:需要支持 ssse3 指令集(这点很重要,下面会细说)
  • 磁盘:安装目录至少预留 5GB,流量大的站点建议多留一些
  • 网络:确认能访问 Docker Hub(或准备离线镜像)

先把 Docker 装上(以 Ubuntu 为例):

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

sudo systemctl enable --now docker

装完确认一下版本:

docker --version

四、一键部署:一行命令装完

雷池官方提供了一键安装脚本,整个过程基本不用手动操作:

bash -c "\$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

脚本会自动完成:

  • 创建安装目录(默认 /data/safeline
  • 拉取所需镜像
  • 初始化数据库与各项服务
  • 输出初始登录信息

安装过程中大部分选项直接回车用默认值即可。装完后终端会打印出:

  • 控制台地址:https://你的服务器IP:9443
  • 初始用户名(通常是 admin
  • 初始随机密码

用浏览器打开控制台地址,第一次登录会强制修改密码,并要求绑定 TOTP 动态口令(建议绑定,这是控制台的第二道保险)。

💡 如果不小心把初始密码搞丢了,可以在服务器上执行官方提供的重置脚本重新获取,不用重装。

五、配置防护站点

登录控制台后,第一步是把你要保护的网站 "挂" 到雷池后面。进入 防护站点 → 添加站点,关键填这几项:

  • 域名:对外提供服务的域名(支持 * 通配符);
  • 监听端口:雷池对外监听的端口,比如 80
  • 上游服务器:你真实业务后端的地址和端口,比如 http://127.0.0.1:8080

这里有个最容易踩的坑:因为雷池是跑在 Docker 里的,容器内的 127.0.0.1 指向的是容器自己,并不是你的宿主机。所以上游地址不能直接填 127.0.0.1,要换成:

  • 宿主机在 Docker 网桥里的地址(常见是 172.17.0.1);
  • 或者宿主机的内网 IP;
  • 又或者把业务容器和雷池放到同一个 Docker 网络里,直接用容器名互访。

如果你的站点是 HTTPS,可以在添加站点时勾选 SSL,并上传证书。雷池负责与用户建立 HTTPS 连接,回源到后端可以继续走 HTTP,不用在业务侧重复配证书。

配置完成后的访问链路是:

用户 → 雷池 WAF(监听 80/443)→ 后端业务服务

把域名 DNS 指向这台服务器,流量就自然经过雷池过滤了。

六、防护策略与日常使用

雷池默认已经开启了 SQL 注入、XSS、命令注入等基础防护规则,添加站点后基本不用调就能拦常见攻击。日常在控制台里主要看这几个地方:

  • 攻击事件:实时展示被拦下的请求,能看到攻击类型、来源 IP、时间 —— 很有成就感,也很有信息量;
  • 防护策略:可以按站点选择策略模板,进阶用户可以自定义规则;
  • 黑白名单:把信任的 IP 加白、把反复扫你的恶意 IP 拉黑;
  • CC 防护:对短时间高频请求做限流,抗压测;
  • 防护模式:建议刚开始先用观察模式—— 只记录不拦截,跑几天看看有没有误杀正常请求,确认没问题再切到拦截模式

这一点非常重要:不要一上来就开强制拦截。先观察,把被误判的正常请求加白名单,再逐步收紧,业务才不会被自己的防火墙搞挂。

七、我的使用经验与踩坑总结

折腾下来,这几点是我觉得最值得分享的:

1. CPU 必须支持 ssse3

雷池的检测引擎对 CPU 指令集有要求。如果你是很老的 VPS(比如某些 10 年前的廉价小鸡),安装时可能直接报错。部署前可以用 cat /proc/cpuinfo | grep -i ssse3 确认一下,有输出再装。

2. 上游地址别填 127.0.0.1

这是 Docker 部署里最经典的坑。填错之后表现为 "502 Bad Gateway",折腾半天才反应过来是网络视角不一样。

3. 先观察,再拦截

观察模式跑一周左右,把日志里被拦的正常请求摸清楚,该加白加白,再开拦截。

4. 做好数据目录备份

所有配置和站点数据都在 /data/safeline 里。重装或迁移时把这个目录整个拷走,新机器装好后放回去就能恢复。

5. 控制台端口别忘了保护

9443 是雷池自己的管理后台,建议不要对公网完全敞开 —— 要么通过安全组限制来源 IP,要么配合 TOTP 双重验证,别让攻击面反过来变成突破口。

6. 性能比预期轻

我最初担心 WAF 会给网站带来明显延迟,实际跑下来几乎无感 —— 语义分析引擎确实快,小站完全不用担心。

八、结语

用了一段时间雷池之后,最大的感受是:开源 WAF 已经成熟到普通人也能轻松驾驭了。一行脚本装好、网页点点就能配好站点、攻击事件一目了然,整个过程比想象中顺畅太多。

当然,WAF 不是银弹 —— 代码该写安全还是要写安全、密码该复杂还是要复杂、备份该做还是要做。但它确实是网站安全体系里一道高性价比的防线:花十几分钟部署,换来长时间的省心。

如果你的网站正被各种扫描和注入尝试骚扰,不妨花一个下午试试雷池。免费、开源、中文友好,跑起来不亏。


本文基于雷池 WAF 社区版(SafeLine)实际部署整理,命令以 Ubuntu + Docker 环境为例。官方文档:help.waf-ce.chaitin.cn