最近闲来无事发现一款免费的,号称使用智能语义分析算法的WAF(SafeLine,也叫雷池WAF)于是打算搭建试用一下 。
本文使用服务器为腾讯云LightHouse
本文创作时雷池WAF为 3.1.1 版本 ,雷池WAF社区版官网:https://waf-ce.chaitin.cn/
一、安装
安装过程分为两种情况:
1. 雷池和源站在同一台服务器,即雷池所在服务器 80/443 端口被占用,请看 1.1
2. 雷池和源站不在同一台服务器,即雷池所在服务器 80/443 端口未被占用,请跳过到 1.2
1.1 修改Nginx监听端口
由于雷池默认需要监听 80 443 9443 端口,其中的 80 和 443 端口和 Nginx 冲突,所以我们需要修改Nginx的监听端口
如果你并非使用宝塔而是自己安装的Nginx,那么你一定知道如何自行修改监听端口,我在这里就不多赘述了。
!!!如果你是通过宝塔安装的Nginx,暂时无法修改80端口(因为改完了过一会也会自动再监听80端口)
如果你是通过宝塔安装的Nginx,那么你需要找到 /www/server/panel/vhost/nginx 这个目录
/www/server/panel/vhost/nginx
将该目录下的三个配置文件( 0.default.conf, phpfpm_status.conf, 你的网站域名.conf )中的 80 和 443 修改为其他端口,例如 8080 和 8443 ,当然别的未被占用的端口也可以。
0.default.conf:
修改为(例)
phpfpm_status.conf:
修改为(例)
你的网站域名.conf:
修改为(例)
将以上三个配置文件修改完后还需要将 /www/server/nginx/conf 目录下的 nginx.conf 中的 80 修改
/www/server/nginx/conf/nginx.conf:
修改为(例)
全部修改并保存后分别运行以下两个命令
!!!如果你是通过宝塔安装的Nginx,暂时无法修改80端口(因为改完了过一会也会自动再监听80端口)
1.2 安装雷池WAF
首先服务器上需要安装 docker 和 docker compose ,然后在服务器上运行以下一键脚本
代码语言:javascript复制bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
提示输入雷池安装目录,默认 /data/safeline ,这里我使用的是 /data/waf(默认即可)
输入 Y 继续安装
开始拉取镜像(可能要等待较长时间,国内鸡建议设置 Docker 加速)
镜像拉取完成,创建雷池WAF容器
安装完成
二、登录并配置雷池WAF
安装完成后我们访问 服务器IP:9443 可以看到登录雷池需要我们绑定TOTP(动态口令),下载一个身份验证器APP,如 Google Authenticator(谷歌身份验证器),Microsoft Authenticator(微软身份验证器)或者使用自建的密码管理器 Bitwarden (网页版也可以),如果以上三项都不方便的话也可以使用腾讯身份验证器,然后扫描下方二维码,如不能扫码可以点击复制密钥然后通过密钥添加动态口令。
绑定完成后输入APP上的验证码登录(每7天需要登录一次)
登录后界面如下
在配置防护站点之前我们先上传一下证书,便于后续配置,点击通用配置 - 证书管理,添加一个证书
上传域名所需证书,点击提交(此处提出批评 1. 只支持证书文件,不支持复制粘贴 2. 不能拖动上传,只能点击上传 3. 不支持ECC证书,希望尽快在新版本优化。)
证书上传完成
接下来添加防护站点,点击防护站点 - 添加站点
域名为你要防护的域名,端口监听 80 和 443 (雷池监听的端口),443端口勾选 SSL ,选择你刚刚上传的证书;
上游服务器填写分为四种情况 (http(s):// 的意思是 http:// 或 https:// )
1. 雷池和源站在同一台服务器上,nginx修改了端口,源站部署在nginx:此时上游服务器地址填 http(s)://127.0.0.1:Nginx监听的端口
2. 雷池和源站在同一台服务器上,nginx修改了端口,但源站并非部署在nginx:此时上游服务器地址填 http(s)://127.0.0.1:源站实际端口
3. 雷池和源站不在同一台服务器上,源站默认80/443端口:此时上游服务器地址填 http(s)://源站服务器IP (图中所示)
4. 雷池和源站不在同一台服务器上,源站非80/443端口:此时上游服务器地址填 http(s)://源站服务器IP:源站实际端口
提交,可以看到我们添加的站点
接下来配置一下其他信息,点击通用配置 - 其它,站点通用配置如下图
至于源IP获取方式建议自己进行实际测试,在 从网络连接中获取 / X-Forwarded-For / X-Real-IP 中选取一个更加准确的
接下来进行防护配置,点击防护配置 - 频率限制,开启 高频访问封禁 和 高频攻击封禁 ,并按需配置相关参数,点击保存
如果有自己的IP黑白名单,可以先将它们添加到IP组,点击通用配置 - IP组,添加IP组
添加后的IP组
然后点击防护配置 - 人机认证,添加人机认证
按需添加人机验证,例如刚刚添加的IP组就可以用在这里,我这里添加的是让来自恶意IP的访问者进行人机验证,点击提交
刚刚添加的人机验证规则
点击防护配置 - 黑白名单,添加黑白名单,这里就可以将刚刚创建的IP组进行黑白分配,或是按需进行其他配置
点击防护配置 - 语义分析,这里可以对各种攻击进行防护强度的简单设置
至此,雷池WAF的基本配置就完成了,接下来将 DNS解析记录 或 CDN源站 修改为雷池WAF所在服务器的IP,然后我们就可以看到流量已经经过雷池了
接下来我们访问一下 http://你防护的域名/?id=1 AND 1=1 测试防护效果
代码语言:javascript复制http://你防护的域名/?id=1 AND 1=1
可以看到雷池拦截了我们刚刚的SQL 注入攻击
在攻击事件里也可以看到我们刚刚的SQL 注入攻击被拦截了(怎么我刚用上雷池就有人爬我网站)
雷池NB(超大声!)
三、其他
3.1 停止运行雷池
在雷池安装目录(默认为/data/safeline,本文中我使用的是/data/waf)
代码语言:javascript复制cd /data/safeline
运行如下命令
代码语言:javascript复制docker compose down
停止运行后就可以修改 .env 文件以修改雷池部分设置了
3.2 重新运行雷池
停止运行后在雷池安装目录运行如下命令
代码语言:javascript复制docker compose up -d
雷池即可恢复运行
3.3 升级雷池
注意: 升级雷池时服务会重启,流量会中断一小段时间,建议在网站流量最小的时候执行升级操作,以免影响网站正常业务
运行以下一键脚本
代码语言:javascript复制bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"
以下内容摘自官方文档
[可选] 升级成功后,可以执行以下命令删除旧版本 Docke 镜像,以释放磁盘空间。
代码语言:javascript复制docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}')
有部分环境的默认 SafeLine 安装路径是在 /data/safeline-ce,安装之后可能会发现需要重新绑定 OTP、配置丢失等情况,可以修改 .env 的 SAFELINE_DIR 变量,指向 /data/safeline-ce
3.4 卸载雷池
首先进行3.1的步骤:停止运行雷池,然后删除雷池安装目录,即卸载雷池。
3.5 迁移雷池
由3.4可推出,迁移雷池的步骤为:
1. 备份雷池安装目录
2. 迁移至目标机器的雷池安装目录
3. 执行 3.2 重新运行雷池
4. 如有新版本,执行 3.3 升级雷池
5. 迁移完成
(由于我在写教程的时候防护的是业务站点,停止运行就寄了,就不在 3.1 - 3.5 放图了)