雷池简介

什么是雷池

雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。

Slogan: 不让黑客越雷池一步。

官网链接:https://waf-ce.chaitin.cn/
Github:https://github.com/chaitin/SafeLine

什么是WAF

WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。

区别于传统防火墙,WAF 工作在应用层,对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果,使其免于受到黑客的攻击。

安装waf

配置需求

  • 操作系统:Linux
  • 指令架构:x86_64
  • 软件依赖:Docker 20.10.14 版本以上
  • 软件依赖:Docker Compose 2.0.0 版本以上
  • 最小化环境:1 核 CPU / 1 GB 内存 / 5 GB 磁盘

可以逐行执行以下命令来确认服务器配置

1
2
3
4
5
6
7
uname -m                 # 查看指令架构
docker version # 查看 Docker 版本
docker compose version # 查看 Docker Compose 版本
docker-compose version # 同上(兼容老版本 Docker Compose)
cat /proc/cpuinfo # 查看 CPU 信息
cat /proc/meminfo # 查看内存信息
df -h # 查看磁盘信息

安装方式
根据实际情况选择安装方式,支持一键安装

  • 在线安装 : 推荐方式,一行命令完成安装
  • 离线安装 : 下载离线安装包,轻松完成安装
  • 其他方式安装 : 使用牧云助手,点击即可完安装

在线安装waf

官方有三种安装方式供选择,在本教程中使用一键在线安装

执行一下命令,即可开始安装

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

如果运行中显示缺少docker环境按Y即可,等待安装完成
1

如何显示docker容器安装失败可以尝试华为云加速

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

安装好雷池后在浏览器打开后台管理页面 https://<waf-ip>:9443。根据界面提示,手机下载使用 支持 TOTP 的认证软件 扫描二维码,然后输入动态口令登录。

注意:如果打不开后台管理页面,请放行端口号

2

配置防护站点

接下来我们需要在宝塔上添加站点,我们是在网站服务器里面部署,不能走80 443 8080
PY@I3GZC1MVP[5L8]IJB95J.webp

端口:80 因为我的WAf和站点在同台服务器上,所以上游服务器写的是127.0.0.1:8000,根据自己情况修改。
C1G`F7$TR$A_N@IXYYA3VA.webp
如何需要添加ssl端口号填443,上传自己的证书

本教程是在网站服务器上部署雷池

提示
不建议这样部署,因为这样单机的负载更高、设备宕机的概率更大。非纯净的环境还会提高安装失败的概率,故障排查也会比较困难。
如果你能接受这些风险,雷池waf可以在网站服务器上部署,如图

55

推荐
你可以提供一台独立服务器部署雷池waf,那么你需要:
1.将网站流量指向雷池。例如将域名解析到雷池
2.禁止网站服务器上,所有除了雷池之外的访问。例如配置防火墙,或者直接把网站服务器放到内网,参考如下图

222

测试防护

接下我们使用手动或自动的方式测试长亭雷池waf的效果

打开浏览器,访问以下地址即可模拟出对应的攻击:

  • 模拟 SQL 注入,请访问 http://<IP或域名>:<端口>/?id=1%20AND%201=1

  • 模拟 XSS,请访问 http://<IP或域名>:<端口>/?html=< script>alert(1)< /script>
    通过浏览器,你将会看到雷池已经发现并阻断了攻击请求。

若请求没有被阻断,请参考 配置问题
整体流程参考:
7

自动化测试防护效果

两条请求可能无法完整的测试雷池的防护效果,可以使用 blazehttp 自动化工具进行批量测试

下载测试工具

准备测试样本

下载请求样本后解压到testcases目录

开始测试

1.将测试工具 blazehttp 和测试样本 testcases 放在同一个目录下
进入对应的目录
使用以下请求开始测试

1
./blazehttp -t http://<IP或域名>:<端口>

测试效果展示

1
2
3
4
5
6
7
8
# 测试请求
.//blazehttp -t http://127.0.0.1:8888
sending 100% |█████████████████████████████████████████████████████████| (33669/33669, 940 it/s) [35s:0s]
总样本数量: 33669 成功: 33669 错误: 0
检出率: 71.65% (恶意样本总数: 575 , 正确拦截: 412 , 漏报放行: 163)
误报率: 0.07% (正常样本总数: 33094 , 正确放行: 33071 , 误报拦截: 23)
准确率: 99.45% (正确拦截 + 正确放行)/样本总数
平均耗时: 1.00毫秒

升级雷池

注意
升级雷池时服务会重启,流量会中断一小段时间,根据业务情况选择合适的时间来执行升级操作。

在线升级

执行以下命令进行升级,升级并不会清除历史数据。

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

如何需要华为云加速,可使用

1
CDN=1 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"

如果需要升级到最新版本流式检测模式,可使用

1
STREAM=1 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"

离线镜像

适用于 docker hub 拉取镜像失败的场景,手动更新镜像。

cd /path/to/safeline

mv compose.yaml compose.yaml.old
wget “https://waf-ce.chaitin.cn/release/latest/compose.yaml” --no-check-certificate -O compose.yaml
wget “https://waf-ce.chaitin.cn/release/latest/seccomp.json” --no-check-certificate -O seccomp.json
sed -i “s/IMAGE_TAG=.*/IMAGE_TAG=latest/g” “.env”
grep “SAFELINE_DIR” “.env” > /dev/null || echo “SAFELINE_DIR=$(pwd)” >> “.env”

grep “IMAGE_TAG” “.env” > /dev/null || echo “IMAGE_TAG=latest” >> “.env”

grep “MGT_PORT” “.env” > /dev/null || echo “MGT_PORT=9443” >> “.env”
grep “POSTGRES_PASSWORD” “.env” > /dev/null || echo “POSTGRES_PASSWORD=(LCALL=CtrdcAZaz09</dev/urandomheadc32)">>".env"grep"REDISPASSWORD"".env">/dev/nullecho"REDISPASSWORD=(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> ".env" grep "REDIS_PASSWORD" ".env" > /dev/null || echo "REDIS_PASSWORD=(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)” >> “.env”
grep “SUBNET_PREFIX” “.env” > /dev/null || echo “SUBNET_PREFIX=172.22.222” >> “.env”

下载 雷池社区版镜像包 并传输到需要安装雷池的服务器上,执行以下命令加载镜像

1
docker load -i image.tar.gz

执行以下命令替换 Docker 容器

docker compose down --remove-orphans
docker compose up -d