宝塔面板(BT Panel)系统 ,并集成 雷池 SafeLine WAF(社区版) ,可以实现"前端 WAF 防护 + 后端宝塔站点管理 "的组合架构。但由于两者默认都监听 80/443 端口,必须进行端口调整以避免冲突。
以下是 完整、可操作、经过验证 的集成方案,适用于 Ubuntu/CentOS 系统。
✅ 一、整体架构
plaintext
用户 → https://your-domain.com (443)
↓
[雷池 WAF] ← 监听 80/443,处理 HTTPS 解密、WAF 防护
↓ 转发到本地
[宝塔 Nginx] ← 监听非标准端口(如 8080/8443),仅接受 127.0.0.1 请求
↓
[网站文件 / PHP / MySQL]
🔒 安全原则:外部流量只能通过雷池进入,无法绕过 WAF 直连宝塔。
⚙️ 二、部署步骤(共 5 步)
第一步:准备服务器环境
- 操作系统:Ubuntu 20.04+ / CentOS 7+
- 最低配置:2 核 CPU / 2GB 内存(宝塔 + 雷池共存)
- 已安装 :
- 宝塔面板(最新版)
- Docker(宝塔软件商店中安装)
- 已创建一个测试站点(如
example.com)
💡 建议:先不要给宝塔站点申请 SSL 证书,SSL 由雷池统一处理。
第二步:修改宝塔站点端口(释放 80/443)
1. 修改主站监听端口
-
进入宝塔 → 网站 → 找到你的站点 → 设置 → 配置文件
-
将:
nginxlisten 80; listen 443 ssl http2;改为:
nginxlisten 127.0.0.1:8080; # 仅监听本地回环,防止外网直连 # listen 443 ssl http2; # 暂时注释 HTTPS
2. 修改全局默认配置(防止新站占用 80)
-
编辑文件:
bashvim /www/server/panel/vhost/nginx/0.default.conf -
将
listen 80;改为:nginxlisten 127.0.0.1:8080; server_name _; return 444; # 拒绝 IP 直接访问
3. 修改 PHP-FPM 状态页(可选但推荐)
-
编辑:
bashvim /www/server/panel/vhost/nginx/phpfpm_status.conf -
将
listen 80;改为listen 127.0.0.1:8080;
4. 重载 Nginx
- 宝塔 → 软件商店 → Nginx → 重载配置
✅ 验证:ss -tuln | grep ':80' 应无输出,说明 80 端口已释放。
第三步:安装雷池 SafeLine WAF
bash
# 下载并运行官方安装脚本
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
- 输入
1开始安装; - 记录输出的 管理员账号和密码;
- 访问
https://<服务器IP>:9443登录控制台; - 放行安全组端口:9443(管理)、80、443(Web 流量)。
⚠️ 若安装失败(常见于低内存),请确保 剩余内存 ≥ 1GB。
第四步:在雷池中添加防护站点
- 登录雷池控制台(
https://IP:9443) - 左侧菜单 → 防护站点 → 站点管理 → 添加站点
- 填写如下信息:
| 字段 | 值 |
|---|---|
| 域名 | example.com(你的实际域名) |
| 端口 | 80,443 |
| SSL | ✅ 勾选,并上传或选择你的 SSL 证书 |
| 上游服务器 | http://127.0.0.1:8080 |
| 备注 | (可选) |
- 点击 【提交】
✅ 成功后,雷池会显示绿色对勾 ✓,表示与后端通信正常。
第五步:配置 SSL 证书(关键!)
📌 SSL 证书必须在雷池中配置,宝塔站点保持 HTTP!
方式 A:上传已有证书
- 在雷池 【通用设置】→【证书管理】 中上传
.crt和.key文件; - 添加站点时选择该证书。
方式 B:使用 Let's Encrypt(推荐)
- 在雷池中直接申请(需域名解析到本机);
- 或用
acme.sh申请后上传。
❌ 切勿在宝塔中开启 SSL!否则会导致:
- 内部回环代理失败
- 双重加密性能损耗
- 证书链混乱
🔒 三、安全加固建议
1. 禁止通过 IP 或非授权域名访问
在雷池 【应用管理】→【高级配置】 中:
- 启用 "禁止通过 IP 访问网站"
- 设置 默认拦截页面
2. 防止 WAF 绕过
- 确保宝塔 Nginx 只监听
127.0.0.1(非0.0.0.0); - 云服务器安全组 禁止直接访问 8080 端口(仅允许本地);
3. 开启核心防护功能
- 高频访问限制:10 秒 180 次
- CC 防护:开启人机验证
- SQL/XSS 防护:使用"高强度"规则
🛠 四、常见问题解决
| 问题 | 解决方案 |
|---|---|
| 雷池提示"上游连接失败" | 检查宝塔是否监听 127.0.0.1:8080;用 curl http://127.0.0.1:8080 测试 |
| HTTPS 显示不安全 | 检查雷池证书是否包含完整证书链;浏览器是否缓存旧证书 |
| 访问出现 502 Bad Gateway | 宝塔站点未启动?PHP 服务异常?检查 Nginx 错误日志 |
| 端口 8080 被浏览器拦截(ERR_UNSAFE_PORT) | 改用 8081、20080 等安全端口 |
| 雷池安装失败(Docker 报错) | 手动执行:cd /data/safeline && docker-compose up -d |
✅ 五、总结:最佳实践清单
- ✅ 宝塔 Nginx 监听
127.0.0.1:8080(非公网) - ✅ 雷池监听
0.0.0.0:80/443 - ✅ SSL 证书仅在雷池配置
- ✅ 上游地址写
http://127.0.0.1:8080 - ✅ 关闭宝塔的"强制 HTTPS"
- ✅ 开启雷池的 IP 黑名单、CC 防护、人机验证
🎯 效果 :所有外部流量必须经过雷池 WAF 检查,攻击被拦截,合法请求透传给宝塔,实现 安全 + 易用 的完美结合。
通过以上步骤,你即可在宝塔系统上成功集成雷池 WAF,为网站提供企业级 Web 安全防护,同时保留宝塔的便捷运维能力。