在LightHouse上安装雷池WAF保护你的网站

2023-08-30 08:00:22 浏览数 (4)

最近闲来无事发现一款免费的,号称使用智能语义分析算法的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 端口,其中的 80443 端口和 Nginx 冲突,所以我们需要修改Nginx的监听端口

如果你并非使用宝塔而是自己安装的Nginx,那么你一定知道如何自行修改监听端口,我在这里就不多赘述了。

!!!如果你是通过宝塔安装的Nginx,暂时无法修改80端口(因为改完了过一会也会自动再监听80端口)

如果你是通过宝塔安装的Nginx,那么你需要找到 /www/server/panel/vhost/nginx 这个目录

代码语言:javascript复制
/www/server/panel/vhost/nginx

将该目录下的三个配置文件( 0.default.confphpfpm_status.conf你的网站域名.conf )中的 80443 修改为其他端口,例如 80808443 ,当然别的未被占用的端口也可以。

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证书,希望尽快在新版本优化。)

证书上传完成

接下来添加防护站点,点击防护站点 - 添加站点

域名为你要防护的域名,端口监听 80443 (雷池监听的端口),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 放图了)

0 人点赞