艾霂's Blog - 雷池WAF
https://ailmu.cn/tag/%E9%9B%B7%E6%B1%A0WAF/
-
在宝塔面板 部署 雷池WAF(避坑版)
https://ailmu.cn/gossip/13.html
2024-11-17T08:50:00+08:00
互联网上的攻击和扫描流量非常多,为了保证网站安全,为网站新增 WAF 防护是必要的!之前有了解过 宝塔云WAF ,但需要独立的一台服务器来部署,架构不够灵活,对于个人用户来说成本太高了。
得知 雷池WAF ,基于 Nginx 开发,以反向代理方式接入,部署架构灵活,可以与 WEB 服务部署在同一台服务器 (官方不推荐) ,是一款广受好评的 社区WAF 项目!不过在网站管理上,个人用户大多都是通过宝塔面板进行管理,宝塔面板的 Nginx 默认监听端口为 80 和 443 ,这就导致共存部署时 雷池WAF 默认无法监听 80 和 443 端口,那怎么办呢?
本文将提供在 宝塔面板 怎样部署 雷池WAF 以及详细过程,同时帮大家避坑安装 雷池WAF 过程有可能踩的雷。
安装宝塔和配置环境
怎样安装宝塔我这里就不多赘述了,自行去 宝塔官网 安装,根据自己网站情况配置环境,(啰嗦一句安装好宝塔后不用着急安装Docker,后续安装雷池WAF时会帮你安装。)
修改Nginx端口避免80和443端口被占用
{message type="info" content="先随便创建个站点,然后启用一下ssl证书,再开启个强制HTTPS(避坑,下文会用到)"/}
在宝塔面板,网站中找到对应的站点,单击右侧的设置!
切换到配置文件,修改监听端口为其他非占用端口,这里我把 80 端口改为 88 端口, 443 端口改为 444 端口(根据个人修改)单击保存即可。图中的 if 判断后面的端口是强制 HTTPS 的判断端口,(一定要改,不然反复重定向)如果你没有开启强制 HTTPS 就没有这个 if 判断代码,就不需要改。
进入 /www/server/panel/vhost/nginx/ 目录,分别编辑 0.default.conf 和 phpfpm_status.conf 文件,将默认监听端口修改为其他非占用端口(和上面配置相似分别把80端口和443端口进行修改,必须把这两个文件所有上述端口进行修改),最后保存退出。
配置完成后重启 Nginx ,如果可以正常重启则说明配置正确。后期新增的网站域名一定要写 a.com:xx , xx 写你的非标端口, HTTPS 端口也要改,否则默认使用 80 端口会出现各种意想不到的 BUG !(记住要在宝塔防火墙和服务器防火墙添加端口规则,放行其刚才修改的端口)
安装雷池WAF
前往 雷池WAF官网 复制对应系统脚本在SSH终端执行安装。
在宝塔面板左侧菜单选择终端,执行已复制的命令进行安装 雷池WAF ,提示安装 Docker 时确定即可。雷池WAF安装目录选择默认的(如果自定义安装路径,更新/卸载是个大麻烦)
雷池安装成功以后,你可以打开浏览器访问 http://你的ip:9443 来使用雷池控制台。
{message type="warning" content="注意对9443的端口放行"/}
然后会提示你绑定一个TOTP验证软件,这里推荐使用腾讯身份验证器绑定(我没有提示绑定软件🤷♂️这里还是要讲述一下)
{callout color="#f0ad4e"}
请注意:这里有个坑,雷池的按钮有些在手机端单击无效,需要长按,长按即可解决,腾讯身份验证器TOTP绑定需要扫码,你可以用俩设备或者截图后用QR扫码提取一下验证代码验证,这里不再赘述。
{/callout}
雷池WAF添加站点网上有很多教程,这里我就不赘述了!这里主要说一下这个上游怎么请求,配置错误会出现502错误。
选择 雷池WAF 和 宝塔 通讯用 HTTP 协议就写 HTTP 协议你写的非标端口,我的示例是 88端口 ,一定要注意, HTTP 协议的上游写 http://127.0.0.1:88 注意协议和端口。
选择 雷池WAF 和 宝塔 通讯用 HTTPS 协议就写 HTTPS 协议你写的非标端口,我的示例是 444 端口,一定要注意, HTTPS 协议的上游写 https://127.0.0.1:444 注意协议和端口。
如果你都按照上面的教程操作,是不会出现端口被占用情况的,请自行排查问题关键。
目前发现如果已经部署了站点,雷池WAF可能会出现莫名其妙的占用现象,目前暂时没发现有解决方案,只能重装雷池WAF安装防护、升级等... 雷池WAF 官网均有教程,请自行查阅,这里不再过多赘述。
解决宝塔无法获取访客真实IP问题
在雷池防护站点,全局配置中把 源 IP 获取方式更换为从 源 IP 获取方式从 HTTP-Header 中获取,并把 HTTP-Header 设置为 X-Forwarded-For 并开启 {x} 清空并重写 X-Forwarded-For
在 Nginx 配置中的 HTTP 代码块增加一下代码
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
real_ip_recursive on; #使用CDN时考虑,不然会无法获取访客IP只能获取CDN的IP
{callout color="#f0ad4e"}
本站已接入 长亭雷池WAF 请勿恶意 DDoS 本站!
{/callout}