1. 项目概述为什么选择雷池WAF如果你负责过线上业务的安全运维大概率对“被爬”、“被刷”、“被注入”这些词不会陌生。半夜被告警电话叫醒紧急处理一个SQL注入攻击或者CC攻击是很多运维和开发同学的“家常便饭”。传统的应对方式要么是手写Nginx规则要么是购买昂贵的云WAF服务。前者对安全能力要求高维护成本大后者虽然省心但费用不菲且流量需要回源对业务架构有一定侵入性。正是在这种背景下像长亭科技雷池SafeLine这样的高性能、可自建的开源WAF就成了一个极具吸引力的选项。我第一次接触雷池是在为一个内部测试环境寻找防护方案时。当时的需求很明确既要能有效拦截常见的Web攻击如SQL注入、XSS又要能管理起来足够简单不能给本已繁重的运维工作增加太多负担。云WAF的预算申请不下来自己从头搭建ModSecurity规则集又太耗时。在对比了几款开源方案后雷池以其声明式的配置管理、直观的图形化界面和不错的性能表现进入了我的视野。简单来说雷池WAF是一个工作在应用层HTTP/HTTPS的防火墙。它像一个智能的安检员站在你的Web服务器如Nginx、Apache前面对所有进出的HTTP/HTTPS请求进行深度检测。它会根据内置的以及你自定义的规则判断一个请求是正常的用户访问还是恶意的攻击流量并对恶意请求进行阻断、记录或告警。对于中小型团队、个人开发者或者那些希望将安全能力“左移”、在开发测试环境就引入安全防护的团队来说自建雷池是一个非常划算且能学到东西的选择。2. 部署前准备环境与架构规划在真正动手安装之前花点时间规划一下部署环境能避免后续很多麻烦。雷池的安装方式很灵活但生产环境我强烈推荐使用Docker Compose部署这是目前最稳定、最易于维护的方式。2.1 硬件与系统要求雷池对资源的要求比较友好但具体配置需要根据你的防护站点数量和预估流量来定。测试/个人项目环境1核CPU2GB内存20GB磁盘空间就足够了。我最初就是在一台1核2G的云服务器上跑的防护一个日均PV几千的博客完全无压力。生产/小型企业环境建议至少2核CPU4GB内存。内存是关键因为WAF需要加载规则集并进行匹配计算。如果防护站点超过10个或者QPS每秒查询率较高建议配置4核8GB或更高。操作系统官方主要支持CentOS 7 / Ubuntu 18.04。我个人更倾向于使用Ubuntu主要是其软件源和社区支持更活跃安装Docker等依赖更顺畅。本文后续演示也将以Ubuntu 20.04 LTS为例。网络与端口这是规划的重点。你需要想清楚雷池的网络部署模式。2.2 部署模式选择反向代理 vs 流量镜像这是部署前最重要的决策决定了你整个网络的拓扑结构。1. 反向代理模式推荐用于大多数场景这是最常用、最典型的部署方式。雷池WAF作为一个独立的反向代理服务器部署在客户端和你的真实Web服务器之间。客户端 --- [雷池WAF:80/443] --- [真实Web服务器:8080]工作流程用户访问你的网站域名DNS解析到雷池WAF服务器的IP。雷池接收到请求进行安全检测如果通过则将请求转发给后端的真实服务器并将服务器的响应返回给用户。优点防护彻底所有流量都经过雷池检测无一遗漏。配置灵活可以在雷池上统一配置SSL证书、负载均衡、缓存等。对后端服务器透明后端服务器无需任何改动。缺点单点故障如果雷池服务器宕机所有服务将中断。需要通过集群部署来规避。性能瓶颈所有流量都经过它需要为其分配足够的资源。需要调整网络需要修改DNS记录将域名指向新的雷池IP。2. 流量镜像旁路模式雷池部署在旁路只接收从交换机或网关镜像过来的流量副本进行分析和告警但不拦截任何流量。客户端 --- [交换机] --- [真实Web服务器] | (镜像端口) ---- [雷池WAF] (仅分析告警)工作流程真实流量直接到达Web服务器。同时交换机将流量复制一份发送给雷池。雷池进行分析发现攻击时只记录和告警不进行阻断。优点零风险绝对不会影响正常业务流量即使雷池宕机。适合试运行在全面启用拦截前用于评估攻击情况和规则效果。缺点无法实时防护只能“事后诸葛亮”无法阻止攻击发生。依赖网络设备需要交换机支持端口镜像功能。我的建议对于全新部署或愿意接受短暂业务调整的直接使用反向代理模式。这是发挥WAF价值的最直接方式。可以先在业务低峰期切换DNS并做好快速回滚的方案。2.3 软件依赖安装确定好模式后我们开始准备基础环境。以Ubuntu 20.04为例首先安装Docker和Docker Compose。# 1. 更新系统包索引 sudo apt-get update # 2. 安装必要的工具 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # 3. 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 4. 添加Docker软件源 sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable # 5. 安装Docker引擎 sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 6. 启动Docker并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 7. 安装Docker Compose (这里安装较新的v2版本注意命令是docker compose中间没有横线) sudo curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 8. 验证安装 docker --version docker-compose --version3. 雷池WAF的安装与初始化配置环境准备好后安装雷池本身反而非常简单因为官方提供了标准化的Docker Compose方案。3.1 一键安装与目录结构长亭官方推荐使用安装脚本它能自动处理目录创建、配置文件生成等步骤。# 下载并执行安装脚本 bash -c $(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)执行后脚本会交互式地询问几个问题雷池安装目录默认是/safeline。我建议保持默认除非你有特殊的磁盘规划。雷池监听端口默认将使用80和443端口。请确保你服务器的这两个端口没有被其他程序如Nginx, Apache占用。如果有冲突安装脚本会提示你可以选择修改雷池的端口但更推荐先停止占用端口的服务。安装完成后进入安装目录你会看到如下结构/safeline/ ├── compose.yaml # Docker Compose 配置文件核心 ├── .env # 环境变量文件包含数据库密码等敏感信息 ├── resources/ # 持久化数据目录日志、配置、证书等 │ ├── nginx/ │ ├── redis/ │ └── mysql/ └── scripts/ # 一些维护脚本这个结构非常清晰。compose.yaml定义了所有服务雷池引擎、管理界面、数据库等的编排方式。所有需要持久化的数据都放在resources下即使容器重建也不会丢失。3.2 首次登录与基础安全设置安装脚本执行完毕后它会输出雷池管理界面的访问地址通常是https://你的服务器IP:9443和初始的管理员账号密码。这个密码是随机生成的务必记下来。用浏览器打开管理地址你会看到一个自签名的SSL证书警告因为用的是HTTPS。点击“高级”-“继续前往”即可。输入初始账号密码登录。第一步立即修改默认密码在“系统设置” - “管理员账号”中修改一个强密码。这是安全防护系统的入口密码安全是第一道防线。第二步配置告警通知可选但重要。在“系统设置” - “告警通知”中可以配置邮件、钉钉、企业微信等通知渠道。当雷池检测到攻击时可以第一时间通知你。我配置了钉钉机器人实战中非常有用能让你对攻击态势有实时感知。3.3 核心概念防护站点与上游服务器登录后你需要理解雷池里最核心的两个配置对象防护站点和上游服务器。防护站点 (Protected Site)代表你需要保护的一个网站或服务。它对应一个域名或IP端口是WAF策略的承载单元。你需要为www.example.com或api.your-app.com分别创建防护站点。上游服务器 (Upstream Server)代表防护站点背后真实的、处理业务的服务器。可以是一个或多个支持负载均衡。格式为IP:Port或域名:Port。添加第一个防护站点的实操步骤假设我要保护一个运行在内部192.168.1.100:8080上的博客应用对外域名是blog.mycompany.com。在雷池管理界面点击“防护站点” - “添加站点”。站点域名填写blog.mycompany.com。这里支持通配符如*.mycompany.com。监听端口选择HTTP (80)或HTTPS (443)。如果选HTTPS需要在此上传你的SSL证书和私钥。强烈建议所有生产站点都使用HTTPS。雷池支持证书的统一管理比在每台后端服务器上配置方便得多。上游服务器点击“添加上游服务器”。协议选择HTTP如果你的后端是HTTP服务。地址填写192.168.1.100:8080。权重默认为1如果你有多个后端可以通过权重实现负载均衡。其他设置访问日志建议开启用于后续审计和攻击分析。防护模式初期可选择“观察模式”。在此模式下雷池会检测并记录攻击但不会阻断请求。这是上线初期的安全做法用于观察规则是否会产生误拦截。点击“保存并应用”。雷池会在后台重新加载配置通常几秒内生效。关键提示配置修改后必须点击“应用配置”按钮更改才会真正生效到运行的WAF引擎中。养成保存后顺手点“应用”的习惯。4. 防护策略深度解析与定制雷池开箱即用内置了丰富的防护规则集。但要让WAF真正贴合你的业务避免误杀和漏杀必须理解并调整这些策略。4.1 内置规则集理解与取舍雷池的防护策略主要在“安全配置”页面管理。针对每个防护站点你可以配置多种规则Web攻击防护核心规则防御SQL注入、XSS、命令注入、路径遍历等。CC攻击防护防御高频的HTTP请求攻击刷接口、抢票等。爬虫防护识别和限制恶意爬虫。IP黑白名单最直接的访问控制。不要盲目开启所有规则的最高防护等级我吃过亏。曾经在一个内容管理系统CMS上直接开启了所有规则的“严格”模式结果后台的富文本编辑器提交的文章内容因为包含大量HTML标签和JS片段被XSS规则大量误报导致编辑人员无法保存内容。正确的做法是先观察后拦截新站点上线先在“观察模式”下跑1-2周。定期查看“攻击日志”了解哪些规则触发了告警触发的请求是否真的是攻击。按需调整规则等级每条规则都有“关闭”、“宽松”、“正常”、“严格”等级别。对于API接口可能不需要严格的XSS防护因为不返回HTML对于登录接口则需要加强爆破防护。在“安全配置”-“通用配置”中可以细粒度调整。善用白名单排除规则这是减少误报的利器。如果你确认某个URL路径或参数是安全的可以为其添加白名单。例如你的/api/search?keywordxxx接口用户输入可能包含特殊字符容易触发SQL注入规则。如果你确认后端做了参数化查询可以为此URL添加一条排除规则让WAF跳过对此参数的检查。4.2 自定义规则应对特定威胁内置规则能覆盖90%的通用威胁但总有特殊情况需要自定义规则。雷池支持ModSecurity规则语法和自定义语义规则。场景举例你的网站有一个用户注册接口/api/register你发现近期有大量攻击尝试使用特定的恶意邮箱后缀如hacker.com来注册。你可以创建一条自定义语义规则来阻断它进入“安全配置” - “自定义规则” - “创建规则”。规则名称阻断特定恶意邮箱注册匹配条件路径等于/api/register请求方法等于POST参数Body或Query包含hacker.com执行动作阻断优先级设置为较高如80确保它在其他规则前生效。这条规则比单纯用IP黑名单更精准因为它针对的是攻击载荷本身。4.3 CC防护与频率限制配置详解CC攻击Challenge Collapsar即HTTP Flood是让很多网站头疼的问题。雷池的CC防护基于令牌桶算法配置逻辑很清晰。关键参数解析统计维度按“IP”还是按“会话Session”。对于API通常按IP对于Web页面可以考虑按会话避免共享IP如公司出口的用户被误伤。统计周期例如“60秒”。意思是统计每个IP在60秒内的请求数。最大请求数在统计周期内允许的最大请求数量。超过则触发动作。惩罚动作人机验证弹出验证码或直接阻断。对于明显的恶意攻击IP可以直接阻断对于疑似攻击或误伤可以先用人机验证。配置示例防护博客的评论提交接口/wp-comments-post.php防止刷评论。进入对应站点的CC防护设置添加一条规则。路径等于/wp-comments-post.php统计维度IP统计周期60秒最大请求数10一个IP一分钟内提交10条评论已经非常多了惩罚动作直接阻断惩罚时间300秒。点击“应用配置”。这样如果一个IP在一分钟内对此接口请求超过10次该IP将在接下来的5分钟内被完全阻断访问此路径。5. 生产环境运维与问题排查WAF上线不是终点而是安全运维的起点。日常的监控、日志分析和故障排查同样重要。5.1 监控与日志分析雷池管理界面提供了清晰的仪表盘和日志中心。总览页面查看实时请求量、攻击拦截量的趋势图。突然的流量飙升或攻击量上涨都是需要关注的信号。攻击日志这是最重要的页面。所有被拦截或记录的请求都在这里。你可以看到攻击类型、来源IP、攻击载荷、触发的规则、处置动作观察/拦截。务必定期如每天查看攻击日志这不仅能确认防护效果还能发现针对你业务的新型攻击试探。访问日志如果你开启了此功能可以在这里查询所有经过WAF的请求详情用于业务分析和故障排查。一个小技巧利用攻击日志的“导出”功能可以定期将日志导出接入你自己的ELKElasticsearch, Logstash, Kibana或SIEM安全信息和事件管理系统进行更长期、更复杂的关联分析。5.2 常见问题与排查流程即使配置得当在实际运行中也可能遇到问题。下面是一个典型的排查流程问题现象用户反馈访问网站部分页面出现“403 Forbidden”或“非法请求”错误。排查步骤确认问题范围是单个用户还是所有用户是特定页面还是所有页面是特定操作如提交表单吗登录雷池管理界面查看攻击日志在攻击日志中根据时间、被拦截的URL、用户IP进行过滤。重点查看找到对应时间点、来自该用户IP、且动作为“拦截”的日志记录。分析日志详情规则ID点击规则ID可以看到触发了哪条具体规则。攻击载荷查看“攻击信息”或“请求内容”看是哪个参数、什么内容触发了规则。例如可能是用户提交的地址字段里包含了一个script标签片段触发了XSS规则。判断是否为误报是误报如果确认是正常业务请求如用户确实需要输入带格式的内容你有两个选择添加排除规则白名单针对这个特定的URL和参数添加白名单。这是最精准的方式。调整规则等级如果这类误报较多可以考虑将对应的Web攻击防护规则等级从“严格”调为“正常”或“宽松”。是真实攻击恭喜你的WAF正常工作。可以进一步将攻击IP加入黑名单。测试与验证修改配置添加白名单或调整规则后点击“应用配置”。让用户或自己模拟用户操作测试问题是否解决。另一个典型问题性能瓶颈如果发现网站访问变慢且服务器资源使用率不高需要怀疑WAF是否成为瓶颈。检查雷池服务器监控使用docker stats命令或服务器本身的top/htop查看雷池容器的CPU和内存使用率。如果持续高位说明需要扩容。检查攻击日志量如果正在遭受大规模攻击WAF进行大量规则匹配会消耗CPU。此时攻击日志会暴增。你需要根据攻击类型如CC攻击紧急调整防护策略或联系运营商进行流量清洗。调整WAF配置对于性能极其敏感的业务可以在“安全配置”-“通用配置”中关闭一些非核心的、计算复杂的检测模块如“敏感信息泄露检测”以换取性能提升。5.3 备份、升级与高可用备份雷池的所有核心数据配置、证书、日志都在/safeline/resources目录下。定期备份这个目录即可。可以使用简单的tar命令打包并传输到异地。cd /safeline tar -czvf safeline-backup-$(date %Y%m%d).tar.gz resources/升级长亭会定期发布雷池社区版更新。升级前务必先备份。升级通常通过更新compose.yaml文件中的镜像版本号然后执行docker-compose pull和docker-compose up -d来完成。详细步骤请参考官方升级文档。高可用HA对于生产环境单点部署的雷池存在宕机风险。官方企业版支持集群部署。社区版要实现高可用可以采用一种“笨”但有效的方法在两台服务器上部署两套独立的雷池结合DNS轮询或负载均衡器如KeepalivedHAProxy来实现流量分发和故障切换。不过这需要解决配置同步的问题可以借助脚本同步resources目录下的配置文件。6. 进阶技巧与最佳实践经过一段时间的实践我总结出一些能让雷池发挥更大效用的技巧。1. 分层防护与WAF定位不要指望WAF能解决所有安全问题。它应该是你纵深防御体系中的一层。在WAF之前应该有网络层的防火墙如iptables只开放80/443端口、DDoS防护。在WAF之后应该有应用自身的安全编码如参数化查询防止SQL注入、服务器安全加固、以及入侵检测系统IDS。WAF主要专注于应用层HTTP/HTTPS的通用攻击防护。2. 精细化策略配置为不同的业务板块配置不同的策略。例如前台展示页面主要防护爬虫和CC攻击Web攻击规则可以宽松些。后台管理入口加强爆破防护设置更严格的IP白名单只允许办公网IP访问开启所有Web攻击防护。开放API接口重点配置频率限制防刷针对API常见的注入攻击加强防护但可能需要为某些复杂的查询参数配置白名单。3. 利用“观察模式”进行规则调优在每次对核心业务进行重大变更如上线新功能、重构接口前可以将该业务对应的防护站点或特定URL路径切换到“观察模式”跑一段时间。收集这期间的攻击日志分析新业务是否引入了新的攻击面或者是否容易被现有规则误伤。根据分析结果提前调整规则或添加白名单等稳定后再切回拦截模式。这能极大降低变更带来的线上故障风险。4. 关注攻击日志中的“低频攻击”高频的、明显的攻击如扫描器、大规模CC很容易引起注意。但一些高级的、低频的、针对性的攻击尝试如对某个特定管理接口的密码爆破可能每天只有几次容易被海量日志淹没。建议定期如每周对攻击日志进行汇总分析按攻击类型、目标URL排序看看有没有一些“执着”的攻击源在尝试突破某个点。5. 证书管理的便利性如果你有多个HTTPS站点雷池的证书管理功能非常方便。你可以在雷池上统一上传、更新和续期SSL证书无需在每个后端服务器上操作。这对于使用Let‘s Encrypt等短期证书的服务尤其有用可以集中管理续期任务。雷池WAF社区版是一个强大的工具它降低了企业级Web应用防火墙的使用门槛。从安装部署到策略调优整个过程也是加深对Web安全理解的过程。记住没有一劳永逸的安全配置。WAF的规则和策略需要随着你的业务发展和威胁态势的变化而持续运营和优化。把它当作一个需要定期维护和“喂养”的系统而不仅仅是一个设置好就忘掉的软件它才能真正成为你业务安全的可靠屏障。