基于1Panel与雷池WAF的Web应用安全防护部署实践
2026/8/6 1:33:08 网站建设 项目流程

1. 项目概述:一次关于面板与WAF的“旧版本”部署实录

最近在折腾一个对外提供服务的Web应用,安全防护自然成了头等大事。WAF(Web应用防火墙)是抵御常见Web攻击(如SQL注入、XSS跨站脚本)的必备盾牌。在众多选择中,雷池(SafeLine)社区版因其开源、高性能和友好的中文界面,成为了我的首选。而管理服务器,我习惯用面板工具,飞致云的1Panel以其现代化、Docker原生的设计理念吸引了我。标题里提到的“旧版本”组合,指的是当时雷池尚未推出与1Panel深度集成的“应用商店”一键安装版本,我需要手动将它们“撮合”到一起。这个过程虽然比现在的一键安装繁琐,但能让你更透彻地理解两者协同工作的底层逻辑,遇到问题也更能从容排查。今天,我就把这次部署的完整过程、核心配置思路以及踩过的几个“坑”详细记录下来,无论你是想复现这个“经典”组合,还是想深入理解面板与独立服务如何集成,这篇记录都能提供直接的参考。

2. 环境准备与核心组件解析

在开始动手之前,我们需要先厘清两个核心组件是什么,以及它们在这个架构中各自扮演的角色。这有助于后续理解配置的流向和问题的根源。

2.1 1Panel:不止是面板,更是云原生运维的入口

飞致云的1Panel是一个现代化的、开源Linux服务器运维管理面板。与一些传统的面板不同,1Panel从设计之初就深度拥抱了容器化。它的所有核心功能和服务(包括MySQL、Redis甚至它自身)都通过Docker容器来部署和管理。这样做的好处是极致的环境隔离和一致性,你在1Panel上部署的应用,其依赖环境被封装在独立的容器里,不会污染宿主机,迁移和备份也变得非常方便。

对于本次部署而言,1Panel将承担几个关键任务:

  1. 宿主机的可视化管理:通过Web界面监控服务器资源(CPU、内存、磁盘、网络)。
  2. Docker生命周期管理:我们将通过1Panel的“容器”功能来创建和管理雷池WAF的容器实例。
  3. 反向代理配置:这是连接1Panel上Web应用和雷池WAF的关键桥梁。1Panel内置了Nginx,我们可以方便地配置反向代理规则。
  4. 证书管理:如果网站需要HTTPS,1Panel集成的Let‘s Encrypt可以自动化证书的申请和续签。

选择1Panel而不是纯命令行或其它面板,主要是看中它对Docker的原生支持和清晰的界面逻辑,能大幅降低后续维护的复杂度。

2.2 雷池(SafeLine)社区版:高性价比的Web应用盾牌

雷池是长亭科技开源的一款WAF。社区版在核心防护功能上相当慷慨,提供了基于语义分析的智能引擎,能有效拦截SQL注入、XSS、命令执行、路径遍历等常见Web攻击。它的管理界面同样友好,防护日志、攻击统计一目了然。

在旧版本的部署模式中,雷池通常以独立容器的方式运行。它需要监听两个关键端口:

  • 管理端口(默认9443):用于访问Web管理界面,进行规则配置、查看日志。
  • 防护端口(默认80/443):这是WAF对外提供服务的端口,所有需要被保护的网站流量首先到达这里。

雷池的工作原理就像一个“安检门”。所有外部用户的请求先到达雷池(防护端口),经过安全检测后,合法的请求被转发到后端的真实Web服务器(也就是我们运行在1Panel上的应用),攻击请求则被拦截并记录。因此,整个数据流是:用户 -> 雷池WAF -> 1Panel上的Nginx反向代理 -> 实际的Web应用容器

2.3 部署架构与网络规划

理解数据流后,我们规划一下部署架构。假设我们有一台全新的云服务器,公网IP是123.123.123.123

  1. 安装1Panel:它将成为我们所有应用的基础管理平台。
  2. 在1Panel上部署目标Web应用:例如一个WordPress博客或自研的API服务,假设其容器内部端口为8080,并通过1Panel的反向代理暴露在http://app.yourdomain.com(内部端口可能是81)。
  3. 在1Panel上创建雷池容器:让雷池与1Panel上的其他应用处于同一Docker网络环境下,便于通信。
  4. 配置网络流量
    • 将域名app.yourdomain.com的DNS A记录指向服务器IP123.123.123.123
    • 在服务器防火墙/安全组中,只开放雷池的防护端口(如80和443)和管理端口(9443)。1Panel面板端口(如10080)和业务应用的原端口不应直接暴露在公网
    • 配置1Panel的反向代理规则,使其不是直接对外服务,而是只接受来自雷池容器的流量

这样,所有公网流量都必须先经过雷池的安检,形成了一个清晰的防护层次。

3. 逐步实操:从零搭建防护体系

接下来,我们进入具体的操作步骤。请确保你拥有一台安装好Docker的Linux服务器(CentOS 7+/Ubuntu 18.04+),并已解析好你的域名。

3.1 阶段一:安装与配置1Panel

首先,我们安装1Panel作为运维底座。

# 使用官方安装脚本,默认会安装最新稳定版 curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

安装过程会提示你设置1Panel的监听端口(默认10080)和登录密码。请务必记住这个密码。安装完成后,通过http://你的服务器IP:10080访问1Panel面板。

进入面板后,我建议先完成几项基础设置:

  1. 主机别名:在“主机”设置中,给服务器起个名字。
  2. 网络配置:检查Docker服务是否正常运行。1Panel会默认创建一个名为1panel-network的Docker网络,后续我们的容器最好都接入这个网络,方便互通。
  3. 应用商店:可以浏览一下,但我们这次不用它安装雷池(旧版本)。

注意:1Panel安装后,默认会修改服务器的防火墙规则,开放其面板端口。请务必在云服务商的安全组控制台确认,不要开放不必要的端口,如80803306等。

3.2 阶段二:在1Panel上部署示例Web应用

为了演示防护流程,我们需要一个靶子。我们在1Panel上快速部署一个简单的Web应用。

  1. 打开1Panel,进入“容器”菜单。
  2. 点击“创建容器”。
  3. 在“镜像”栏位,填入一个简单的测试镜像,例如nginx:alpine
  4. 在“端口设置”中,添加一条规则:容器端口80,绑定到宿主机的8081(选择一个未被占用的端口)。注意,这里绑定到宿主机端口只是为了测试方便,在最终生产配置中,这个端口不应被公网访问。
  5. 在“网络”设置中,选择1panel-network
  6. 点击“确认”创建容器。

稍等片刻,容器状态变为“运行中”。此时,你可以通过http://你的服务器IP:8081访问到Nginx的默认欢迎页。这个容器就是我们即将用雷池来保护的后端应用。

3.3 阶段三:部署旧版本雷池社区版

这是核心步骤。因为不是通过1Panel应用商店安装,我们需要手动创建雷池容器。

  1. 拉取雷池镜像。在1Panel的“终端”功能中执行命令,或者通过SSH连接到服务器执行:

    docker pull chaitin/safeline:latest

    (请注意,镜像名和标签请以雷池官方仓库为准,此处为示例。旧版本可能对应特定标签。)

  2. 准备雷池持久化数据目录。雷池的配置、日志和数据库需要持久化存储,避免容器重启后数据丢失。

    mkdir -p /opt/safeline
  3. 在1Panel中创建雷池容器。回到1Panel“容器”界面,点击“创建容器”。

    • 镜像chaitin/safeline:latest
    • 端口设置:这是关键!需要映射两个端口:
      • 9443:9443(管理界面)
      • 80:80(HTTP防护端口)
      • 443:443(HTTPS防护端口,如需)
    • 目录挂载:添加持久化存储。
      • 主机目录:/opt/safeline, 容器目录:/data
    • 网络设置:同样选择1panel-network,确保雷池容器能与刚才创建的Nginx测试容器在同一个网络内通信。
    • 环境变量:根据雷池官方文档,可能还需要设置一些环境变量,例如TZ=Asia/Shanghai来设定时区。
    • 重启策略:设置为“始终”,确保服务器重启后容器自动运行。
  4. 点击“确认”创建并启动容器。启动可能需要一两分钟,因为雷池内部要进行初始化。你可以查看容器日志确认状态。

  5. 访问雷池管理界面。打开浏览器,访问https://你的服务器IP:9443(注意是HTTPS)。首次访问会进入初始化设置页面,按照提示设置管理员邮箱和密码。完成后,你就进入了雷池的管理后台。

3.4 阶段四:配置反向代理与防护规则

现在,我们有了后端应用(nginx:alpine容器)和安全网关(雷池容器)。接下来要打通它们,并告诉雷池防护谁。

  1. 在1Panel中配置反向代理(关键步骤)

    • 进入1Panel的“网站”菜单。
    • 创建一个新的“反向代理”网站。
    • 域名:填写你计划用于访问业务的域名,例如app.yourdomain.com此时先不要将这个域名直接解析到服务器IP。
    • 代理地址:这里不能填http://服务器IP:8081,因为那是公网地址。我们的Nginx应用容器和1Panel都在同一个Docker网络(1panel-network)内。我们需要填写容器的内部网络地址
    • 如何找到容器内部地址?在1Panel“容器”列表中找到你的Nginx测试容器,点击名称进入详情,在“网络”部分可以看到它在1panel-network中的IP地址,例如172.20.0.3
    • 因此,代理地址应填写http://172.20.0.3:80(容器内部的80端口)。
    • 保存配置。现在,1Panel的Nginx会监听一个内部端口(比如10081),当收到对app.yourdomain.com的请求时,就转发到后端容器的172.20.0.3:80
  2. 在雷池中添加防护站点

    • 登录雷池管理界面 (https://IP:9443)。
    • 进入“防护站点”页面,点击“添加站点”。
    • 站点域名:同样填写app.yourdomain.com。这告诉雷池,所有访问这个域名的流量都需要被检查。
    • 上游服务器:这里填写1Panel反向代理的监听地址。因为流量顺序是:雷池 -> 1Panel反向代理 -> 最终应用。
    • 1Panel反向代理的地址是什么?我们需要找到运行1Panel本身服务的容器(通常叫1panel)在1panel-network中的IP,假设是172.20.0.2,并且知道它监听反向代理的内部端口(假设是10081,这个端口通常在1Panel网站配置中可以看到或指定)。
    • 因此,上游服务器填写http://172.20.0.2:10081
    • 监听端口:保持HTTP 80和/或HTTPS 443。
    • 保存站点。雷池会自动为此站点生成一个唯一的“监听地址”(通常是一个非标端口,如http://0.0.0.0:其它端口)。但因为我们之前创建容器时已经把宿主机的80/443端口映射给了雷池,所以对于公网来说,雷池就在80/443端口上工作。
  3. 最终流量链路验证

    • 现在,将域名app.yourdomain.com的A记录指向你的服务器公网IP123.123.123.123
    • 用户访问http://app.yourdomain.com的请求,到达服务器80端口。
    • 服务器80端口被雷池容器监听,请求进入雷池。
    • 雷池根据域名app.yourdomain.com匹配到防护站点,进行安全检测。
    • 检测通过后,雷池将请求转发到上游服务器http://172.20.0.2:10081(即1Panel的反向代理)。
    • 1Panel的反向代理根据域名,将请求转发到最终的后端应用http://172.20.0.3:80
    • 后端应用处理请求,响应按原路返回给用户。

至此,一个基于1Panel和独立容器版雷池的WAF防护架构就搭建完成了。

4. 核心配置详解与优化建议

部署完成只是第一步,合理的配置才能让WAF既安全又不影响正常业务。以下是几个关键的配置点。

4.1 雷池防护策略调优:从宽松到严格

雷池默认的防护策略是“中等”,对于刚上线的业务,可能会误拦截一些合法请求。建议采用渐进式策略:

  1. 初始观察期(学习模式):在雷池的防护站点设置中,将“防护模式”先设置为“观察”。在此模式下,雷池会记录所有它认为可疑的请求,但不会拦截。运行你的业务24-48小时,让雷池熟悉正常的流量模式。
  2. 分析日志与误报处理:进入雷池的“攻击日志”页面,查看所有被记录的请求。仔细分析,区分真正的攻击和误报。对于误报,你可以:
    • 全局排除:如果某个参数或路径总是误报,可以在站点的“全局排除”规则中添加相应URL或参数,使其跳过检测。
    • 规则阈值调整:某些规则(如CC攻击防护)可以调整其敏感度阈值。
  3. 切换为防护模式:经过观察期和误报调优后,将防护模式切换为“防护”。此时,雷池才会真正拦截攻击。
  4. 自定义规则:针对你的业务特点,可以编写自定义规则。例如,如果你的登录接口路径是/api/login,你可以针对这个路径加强暴力破解防护的规则。

实操心得:千万不要一上来就开启最高级别的防护。我曾在一个API项目上直接开启“严格”模式,导致大量的移动端正常请求被误判为爬虫而拦截,业务瞬间瘫痪。从“观察”模式开始,是平滑接入WAF的黄金法则。

4.2 1Panel反向代理的高级配置

1Panel的反向代理功能基于Nginx,我们可以通过“高级配置”注入更多Nginx指令,优化与雷池的配合。

  1. 传递真实用户IP:这是至关重要的一点!默认情况下,后端应用看到的请求来源IP都是雷池容器或1Panel反向代理容器的IP。我们需要将用户的真实IP传递过去。 在1Panel反向代理配置的“高级配置”框中,可以添加如下Nginx指令:

    # 设置从雷池传递过来的真实IP头字段 real_ip_header X-Forwarded-For; # 信任雷池容器的IP(172.20.0.0/16是Docker默认网段,请根据实际情况调整) set_real_ip_from 172.20.0.0/16; real_ip_recursive on;

    同时,确保雷池在转发请求时也设置了X-Forwarded-For头。雷池默认会处理这个,通常无需额外配置。

  2. 超时与缓冲区设置:如果业务涉及大文件上传或长连接,可能需要调整代理的超时时间和缓冲区大小,避免超时错误。

    proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k;

4.3 HTTPS证书配置的最佳实践

如果你的业务需要HTTPS,有两种配置思路:

  1. 在雷池上终止HTTPS(推荐)

    • 将SSL证书(.crt和.key文件)上传到雷池管理界面中对应站点的SSL证书配置处。
    • 雷池监听443端口,负责HTTPS解密和加密。
    • 雷池与1Panel反向代理之间可以使用HTTP通信(因为它们在安全的内部网络)。这样减轻了后端服务的SSL计算压力。
    • 在1Panel中,反向代理的代理地址保持为http://...即可。
  2. 在1Panel上终止HTTPS

    • 使用1Panel内置的“证书”功能,为你的域名申请Let‘s Encrypt免费证书。
    • 在1Panel的网站配置中开启HTTPS。
    • 此时,雷池与1Panel之间也是HTTPS通信。需要在雷池的上游服务器地址中填写https://...,并且雷池需要信任1Panel的证书(或使用私有证书)。
    • 这种方式链路全程加密,但配置稍复杂,且加解密负担分布在雷池和1Panel两处。

我的选择是第一种。让专业的WAF设备(雷池)来处理SSL卸载,既符合安全最佳实践(能在加密流量中做深度检测),又能简化后端配置。证书管理也在雷池界面完成,比较集中。

5. 故障排查与日常维护指南

即使部署顺利,运行中也可能遇到问题。这里记录几个典型场景和排查思路。

5.1 常见问题速查表

问题现象可能原因排查步骤
访问网站返回502 Bad Gateway1. 后端应用容器未运行或崩溃。
2. 1Panel反向代理配置的上游地址错误。
3. 雷池到上游服务器网络不通。
1. 检查1Panel中后端应用容器状态。
2. 在1Panel“终端”中,执行curl -v http://上游容器IP:端口测试连通性。
3. 检查雷池防护站点的“上游服务器”地址是否正确。
访问网站返回403 Forbidden(来自雷池)请求被雷池安全规则拦截。1. 登录雷池管理界面,查看“攻击日志”。
2. 根据日志中的规则ID和请求详情,判断是攻击还是误报。
3. 如是误报,在“全局排除”或“规则组”中调整。
HTTPS访问失败或证书错误1. 证书未正确配置在雷池或1Panel。
2. 防火墙未开放443端口。
3. 域名解析未生效。
1. 检查雷池站点SSL证书配置或1Panel的证书配置。
2. 使用curl -I https://你的域名或在线SSL检测工具检查。
3. 确认服务器安全组和防火墙放行了443端口。
后端应用获取到的客户端IP全是雷池的IP真实IP传递链未配置成功。1. 检查雷池是否开启了X-Forwarded-For转发(默认开启)。
2. 检查1Panel反向代理的“高级配置”中是否按4.2节设置了真实IP相关指令。
3. 在后端应用日志中查看X-Forwarded-For头的值。
雷池管理界面无法访问(9443)1. 雷池容器启动失败。
2. 防火墙/安全组未开放9443端口。
3. 端口被其他进程占用。
1. 在1Panel中查看雷池容器日志,检查错误信息。
2. 在服务器上执行netstat -tlnp | grep :9443查看端口占用。
3. 确认云服务器安全组入方向规则允许9443端口。

5.2 容器日志查看技巧

排查Docker容器问题,查看日志是第一要务。1Panel提供了便捷的界面:

  • 进入“容器”列表,找到对应容器,点击右侧的“日志”图标。
  • 重点关注日志开头的错误信息(ERROR)和警告(WARN)。
  • 对于雷池,启动时的初始化日志尤为重要,如果数据库连接失败或配置错误,会在这里体现。

对于更复杂的排查,可能需要进入容器内部:

# 通过1Panel终端或SSH执行 docker exec -it [雷池容器名或ID] /bin/bash # 进入后可以查看雷池的日志文件,通常位于 /data/logs 目录下

5.3 备份与迁移策略

  1. 雷池数据备份:雷池的所有数据(配置、日志、数据库)都保存在我们挂载的宿主机目录/opt/safeline下。定期备份这个目录即可。

    # 简单的打包备份命令 tar -czpf safeline-backup-$(date +%Y%m%d).tar.gz /opt/safeline

    可以将此命令加入crontab实现自动备份。

  2. 1Panel及应用备份:1Panel本身提供了强大的备份功能。在“设置”->“备份”中,可以定期备份“面板数据”和“所有应用”。这个备份包含了所有通过1Panel管理的网站配置、数据库、容器配置等。恢复时,可以在新服务器安装1Panel后直接导入备份文件。

  3. 迁移流程:如果需要迁移服务器,顺序如下:

    • 在新服务器安装相同版本的1Panel。
    • 在旧服务器使用1Panel的备份功能,创建完整备份并下载。
    • 在新服务器1Panel中恢复备份。
    • 将旧服务器的/opt/safeline目录打包,复制到新服务器的相同位置。
    • 在新服务器1Panel的“容器”界面,重新创建雷池容器(使用相同的镜像、端口映射和目录挂载配置/opt/safeline:/data)。
    • 启动容器,由于数据目录存在,雷池会读取所有原有配置。

这套“旧版本”的手动部署方案,虽然步骤上比现在1Panel应用商店里的一键安装要多,但它给了你最大的控制权和透明度。你清楚地知道每一个流量包经过了哪些组件,数据存在了哪里,出了问题时该从哪个环节查起。这种理解,对于构建稳定、可控的生产环境来说,其价值远超过一键安装的便利。希望这份详细的记录,能帮你绕过我踩过的那些坑,顺利搭建起自己的Web应用安全防线。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询