一山可容二虎!宝塔面板+雷池 WAF 部署实战

1,530 阅读6分钟

前言

为了保证网站安全,可以在网站前增加一个 WAF(Web 应用防火墙) 来进行防护。如果使用宝塔云 WAF 的话就需要多机部署并且还需要额外开通云 WAF 功能,这些对于个人来说成本太高了!

免费的雷池社区版不香吗?但很多个人用户又是通过宝塔面板进行管理的,这就导致雷池和主机 Nginx 有冲突问题,那怎么办呢?本文将介绍如何在单机部署下雷池和 Nginx 共存。

雷池介绍

长亭雷池 WAF 是长亭科技耗时近 10 年倾情打造的 WAF,是基于智能语义分析的下一代 Web 应用防火墙,不让黑客越雷池一步!

环境依赖

环境要求
操作系统Linux
CPU 指令架构x86_64(支持 ssse3 指令集)
Docker20.10.14 版本以上
Docker Compose2.0.0 版本以上
最低资源需求1 核 CPU / 1 GB 内存 / 5 GB 磁盘

这里列出来的是雷池所需要的环境,宝塔支持的环境和操作系统可以在宝塔官网查询

软件部署

部署宝塔

对于宝塔安装本文不进行赘述,官网上都有详细的说明了

安装 Docker

部署完宝塔之后还需要通过宝塔安装以下软件:

  • Nginx
  • Docker

安装完成之后 网站Docker 可以看到宝塔这两个可以正常工作

image.png

image.png

部署雷池

bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"

image.png

如果出现了这个提示,这里不建议输入 “Y”,脚本有可能会造成其他的问题

image.png

我这里使用在线脚本进行安装,但是由于我的环境中的 Docker 是根据操作系统二进制编译的,并没有 docker compose 命令,但是 docker-compose 是正常的。

因此可以通过修改雷池脚本中的docker compose 命令,先下载雷池的脚本:

curl -o sl.sh https://waf-ce.chaitin.cn/release/latest/setup.sh

然后可以在宝塔中修改脚本文件

image.png

修改完成之后可以通过以下命令执行雷池部署脚本

bash sl.sh

image.png

出现这个提示代表雷池安装成功

image.png

域名访问

为了通过域名来访问雷池,需要在宝塔中对雷池添加一个反向代理

代理的目标是 https://localhost:9443

image.png

特别注意这里要转发目标的协议必须是 https,否则打开雷池页面将出现无限循环跳转

通过浏览器打开宝塔配置的域名,成功看到了雷池页面!

image.png

站点部署

在单机上部署你的网页,并且结合雷池进行防护

虽然雷池实际上已经内置了 Tengine,可以直接接管 80 端口,但是因为单机上已经安装了 Nginx,它本身就监听了该端口,那么雷池无法继续监听这个端口。

虽然我有查到可以通过修改(宝塔安装的) Nginx 目录下 /www/server/panel/vhost/nginx/ 配置文件(0.default.confphpfpm_status.conf)中 Nginx 监听端口改为非 80 端口。

但是实际上可能还需要修改所有的已有的网站的配置文件。如果你使用宝塔对网站进行更改配置之类的操作,宝塔还会重新覆盖你的变更导致恢复成监听 80 端口,这又是一个隐藏的问题。

因此,我采用了以下方法(经过了一层转发,性能可能有所下降):

sequenceDiagram
    客户端->>Nginx: 请求
    Nginx->>雷池: 转发到雷池
    雷池-->>Nginx: 雷池请求本地 Nginx 上游
    Nginx-->>雷池: 业务响应
    雷池-->>Nginx: 业务响应
    Nginx-->>客户端: 响应给客户端

以客户端访问 test.xx.com 为例:

sequenceDiagram
    客户端->>Nginx: 请求 test.xx.com
    Nginx->>雷池: 转发 test-o.xx.com
    雷池-->>Nginx: 请求上游 test-o.xx.com
    Nginx-->>雷池: test-o.xx.com
    雷池-->>Nginx: test-o.xx.com
    Nginx-->>客户端: test.xx.com

查看雷池容器网络

由于雷池是通过 Docker 部署的,其中雷池默认的配置文件中是有独立的容器网络的,那么 localhost 就不是宿主机本身的网络,因此宿主机的网络可以通过容器的所属网关来表示宿主机的网络。

如下所示,我的网关是 172.22.222.1,那么这个 IP 可访问宿主机的 Nginx

image.png

雷池配置站点

image.png

我这里使用通配符*匹配所有的请求,全部转发到上游 Nginx

注意雷池监听的端口不能为 80!!!

image.png

宝塔配置站点

这里以部署静态网页项目为例

image.png

需要部署的静态网页的地址是 test.xx.com,那么这里要避开这个域名,因为待会儿需要配置转发域名,所以可以添加前/后缀方式,我这里是 test-o.xx.com

image.png

接下来按照前面提到过的 添加反向代理 的方式继续添加(转发到雷池):

image.png

好了,现在应该能够访问静态网页了:

image.png

Q&A

Q:如果我的网站有多个域名怎么办?

A:可以先添加其他的域名,和前面的步骤一样,只需要加入前/后缀,之后再添加一个新的代理,发送域名填写这个带有前/后缀的域名