部署雷池waf防护自己的网站
雷池简介
什么是雷池
雷池(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 | uname -m # 查看指令架构 |
安装方式
根据实际情况选择安装方式,支持一键安装
- 在线安装 : 推荐方式,一行命令完成安装
- 离线安装 : 下载离线安装包,轻松完成安装
- 其他方式安装 : 使用牧云助手,点击即可完安装
在线安装waf
官方有三种安装方式供选择,在本教程中使用一键在线安装
执行一下命令,即可开始安装
1 | bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" |
如果运行中显示缺少docker环境按Y即可,等待安装完成
如何显示docker容器安装失败可以尝试华为云加速
1 | CDN=1 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" |
安装好雷池后在浏览器打开后台管理页面 https://<waf-ip>:9443
。根据界面提示,手机下载使用 支持 TOTP
的认证软件 扫描二维码,然后输入动态口令登录。
注意:如果打不开后台管理页面,请放行端口号
配置防护站点
接下来我们需要在宝塔上添加站点,我们是在网站服务器里面部署,不能走80 443 8080
端口:80 因为我的WAf和站点在同台服务器上,所以上游服务器写的是127.0.0.1:8000
,根据自己情况修改。
如何需要添加ssl端口号填443,上传自己的证书
本教程是在网站服务器上部署雷池
提示
不建议这样部署,因为这样单机的负载更高、设备宕机的概率更大。非纯净的环境还会提高安装失败的概率,故障排查也会比较困难。
如果你能接受这些风险,雷池waf可以在网站服务器上部署,如图
推荐
你可以提供一台独立服务器部署雷池waf,那么你需要:
1.将网站流量指向雷池。例如将域名解析到雷池
2.禁止网站服务器上,所有除了雷池之外的访问。例如配置防火墙,或者直接把网站服务器放到内网,参考如下图
测试防护
接下我们使用手动或自动的方式测试长亭雷池waf的效果
打开浏览器,访问以下地址即可模拟出对应的攻击:
模拟 SQL 注入,请访问
http://<IP或域名>:<端口>/?id=1%20AND%201=1
模拟 XSS,请访问 http://<IP或域名>:<端口>/?html=< script>alert(1)< /script>
通过浏览器,你将会看到雷池已经发现并阻断了攻击请求。
若请求没有被阻断,请参考 配置问题
整体流程参考:
自动化测试防护效果
两条请求可能无法完整的测试雷池的防护效果,可以使用 blazehttp 自动化工具进行批量测试
下载测试工具
准备测试样本
下载请求样本后解压到testcases
目录
开始测试
1.将测试工具 blazehttp
和测试样本 testcases
放在同一个目录下
进入对应的目录
使用以下请求开始测试
1 | ./blazehttp -t http://<IP或域名>:<端口> |
测试效果展示
1 | # 测试请求 |
升级雷池
注意
升级雷池时服务会重启,流量会中断一小段时间,根据业务情况选择合适的时间来执行升级操作。
在线升级
执行以下命令进行升级,升级并不会清除历史数据。
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=(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