防火墙挡端口、fail2ban 封 IP,这些挡的是「网络层」的攻击。应用层的攻击——SQL 注入、XSS、命令执行、恶意 UA——需要 WAF(Web 应用防火墙)来识别和拦截。
这篇讲两种 WAF 方案:ModSecurity(Nginx 经典方案,规则成熟)和雷池(国产开源,界面友好),从安装到调规则全流程。
需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,主流游戏快速部署。
一、WAF 是什么,解决什么问题
WAF 工作在 HTTP 层,检查每个请求的内容:
请求 → WAF 检查(GET/POST/Cookie/Header) → 放行 or 拦截能拦的攻击:
| 攻击 | 请求特征 | 拦截规则 | |
|---|---|---|---|
| SQL 注入 | ' or 1=1--、union select | SQL 关键词 + 编码变形检测 | |
| XSS | <script>alert(1)</script> | 脚本标签检测 | |
| 命令注入 | ;cat /etc/passwd、` | whoami` | shell 元字符 + 命令词 |
| 文件包含 | ../../etc/passwd | 路径穿越模式 | |
| 恶意扫描 | sqlmap/nikto UA、特征 URL | UA + 路径黑名单 | |
| webshell 上传 | .php 后缀伪装图片 | 文件类型校验 |
WAF 的局限:规则误报(正常请求被拦)、性能开销(每个请求都要检查)、防不住 0day(没规则就放行)。所以 WAF 是纵深防御的一层,不是银弹。
二、方案选型
| 对比 | ModSecurity | 雷池(SafeLine) |
|---|---|---|
| 形态 | Nginx 模块 | 独立反向代理服务 |
| 规则 | OWASP CRS 规则集 | 语义分析 + 规则 |
| 界面 | 无(改配置) | Web 控制台 |
| 误报处理 | 手工写排除规则 | 界面一键加白 |
| 性能 | 中(看规则数) | 中 |
| 适合 | 熟悉 Nginx 的技术人员 | 想要界面和省心的 |
建议:生产环境、团队维护 → 雷池;已有 Nginx 深度定制、想模块化 → ModSecurity。
三、ModSecurity 安装与配置
1. 安装(需编译安装)
Ubuntu/Debian 有现成包:
apt install -y libnginx-mod-http-modsecurity
# 或从源码编译 Nginx + ModSecurity(用 libmodsecurity)2. 基础配置
# /etc/nginx/modsec/main.conf(从示例拷)
# Include /etc/nginx/modsec/modsecurity.conf
# Include /etc/nginx/modsec/crs/*.conf (OWASP 规则)
server {
listen 80;
server_name 你的域名;
# 开启 WAF
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
location / {
proxy_pass http://backend;
}
}3. 模式选择
# modsecurity.conf
# 检测模式(只记录不拦截) — 新站先跑这个模式一两周
SecRuleEngine DetectionOnly
# 拦截模式(确认误报可控后开)
# SecRuleEngine On血泪教训:直接开 SecRuleEngine On,正常用户被拦一片,工单爆炸。必须 DetectionOnly 观察一周,把误报规则排除掉,再开拦截。
4. 看日志,排除误报
# 错误日志里搜拦截记录
grep -i "ModSecurity" /var/log/nginx/error.log | tail -50
# 日志格式: [id "942100"] [msg "SQL Injection Attack..."]
# id 942100 = 规则 ID,msg = 命中原因排除误报规则(自定义规则文件):
# /etc/nginx/modsec/crs-exclusions.conf
# 例子: 富文本编辑器提交 HTML 被 XSS 规则拦
<LocationMatch "/admin/editor">
SecRuleRemoveById 941100 941110 941160
</LocationMatch>
# 例子: 搜索接口含特殊字符被 SQL 规则误报
SecRule REQUEST_URI "@beginsWith /search" \
"id:1001,phase:1,pass,nolog,ctl:ruleRemoveById=942100"5. 常用自定义规则
# 封恶意 UA
SecRule REQUEST_HEADERS:User-Agent "@pm sqlmap nikto nmap masscan acunetix" \
"id:2001,phase:1,deny,status:403,log,msg:'Bad UA'"
# 文件上传限制(只允许图片)
SecRule FILES_NAMES "!\.(jpg|jpeg|png|webp|gif)$" \
"id:2002,phase:2,deny,status:403,log,msg:'Bad upload type'"
# 单 IP 频率限制(简单版,复杂用 limit_req)
SecRule IP:REQUEST_RATE "@ge 100" \
"id:2003,phase:1,deny,status:429,log,msg:'Rate limit'"四、雷池:安装十分钟
雷池是长亭科技开源的 WAF,Docker 一键部署,自带控制台:
# 官方一键安装脚本
bash -c "$(curl -fsSL https://waf-ce.chaitin.cn/release/latest/setup.sh)"
# 按提示设管理端口(默认 9443),装完访问
# https://服务器IP:9443配置站点
控制台 → 站点管理 → 添加站点:
- 域名:
你的域名 - 上游:
http://127.0.0.1:8080(你的真实服务) - 端口:80/443
- 证书:上传或自动申请
雷池作为反向代理站在 Nginx 前面,所有请求先过它。
防护模式
| 模式 | 行为 |
|---|---|
| 观察模式 | 只记录不拦截(先跑一周) |
| 拦截模式 | 命中规则返回 403 |
| 严格模式 | 更敏感的规则,误报多 |
看拦截日志、加白名单
控制台 → 防护日志,能看到每次拦截:时间、来源 IP、命中规则、请求详情。
误报处理:日志里点「加入白名单」,选条件(URL、IP、参数),实时生效。
雷池的优势:语义分析引擎比规则匹配误报低;界面一键操作;自动更新规则。省心程度比 ModSecurity 高一个量级。
五、规则调优:平衡安全与误报
无论哪个 WAF,目标都是高拦截率 + 低误报率:
上线流程(照做)
- 观察模式跑 7 天:收集命中记录,人工核对每条是否真攻击
- 排除误报:富文本接口、API 的合法特殊字符、搜索词——逐个加白
- 开拦截:先「宽松」模式
- 持续看日志:每周花 10 分钟过一遍拦截记录
- 逐步收紧:误报稳定后开严格模式
必须加白的场景
| 场景 | 原因 |
|---|---|
| 后台富文本编辑器 | 提交 HTML 内容,XSS 规则必误报 |
| API 接口传 JSON | 特殊字符被当注入 |
| 搜索接口 | 用户输入不可控 |
| 支付回调 | 第三方 POST 内容不可控 |
| 监控/健康检查 | 扫描型 UA 被拦 |
不该加白的
- 登录接口(防暴力破解)
- 文件上传(防 webshell)
- 带
../、union select特征的请求(基本是真攻击)
六、性能影响与测试
# 1. 对比开/关 WAF 的响应时间
ab -n 1000 -c 10 https://你的域名/
# 看 Requests per second,下降 < 20% 可接受
# 2. 验证拦截生效
curl "https://你的域名/?id=1' or '1'='1"
# 应返回 403(拦截模式)或记录日志(观察模式)
# 3. 验证正常请求不受影响
curl -I https://你的域名/
# 200 正常性能参考:规则数 200 条左右,响应增加 5–20ms。雷池语义分析引擎比传统规则稍重,但换来更低误报。
七、WAF 与 CDN/高防的分工
用户 → CDN/WAF(边缘拦截) → 源站 WAF(最后防线) → 应用| 层 | 职责 |
|---|---|
| CDN 自带 WAF | 拦大部分扫描和 CC,流量不进源站 |
| 高防 | 清洗大流量攻击 |
| 源站 WAF | 纵深防御,CDN 被绕过时的兜底 |
注意:用了 CDN,源站要限制只接受 CDN 回源 IP,否则攻击者直接打源站 IP 绕过 CDN。
八、常见问题
Q:WAF 会把正常用户拦哭?
误报没调完就开了拦截。回观察模式,加白名单,再逐步收紧。
Q:ModSecurity 和雷池能一起用吗?
可以但没必要,两层规则叠加误报更难调。选一个,另一个位置留给 CDN WAF。
Q:WAF 能防 0day 吗?
规则型 WAF 防不了未知漏洞。语义分析型(雷池)对未知变形有一定能力,但不保证。及时更新程序才是根本。
Q:NAT 型服务器怎么上 WAF?
把 WAF 跑在同机容器/服务里,域名/CDN 指过来。没有独立 IP 不影响——WAF 和网站在同一台机器,走内部回环。
Q:规则更新频率?
雷池自动更新;ModSecurity 的 OWASP CRS 每季度发新版,手动更或订阅更新源。
Q:日志里看到大量拦截,是被盯上了吗?
大概率是全网自动化扫描(每分钟都有无数扫描器在爬公网 IP)。雷池/ModSec 的拦截日志就是证据——这正是 WAF 的价值。
小结
WAF 是应用层防护的核心:上雷池或 ModSecurity,先观察后拦截,误报加白要勤。配合 CDN WAF 和源站限制,构成完整的 Web 防护体系。记住 WAF 不是银弹——程序及时更新、权限最小化、备份可靠,这三件事比任何 WAF 都重要。
更多安全内容见财富云计算知识库:CC 防护、漏洞防护、安全基线、应急排查全系列。需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]安全组是云服务器的第一道门:配错了,要么玩家连不上、要么全网都能扫到你。这篇把安全组的原理、配法、排查讲透——从默认规则到最小化实践,从游戏服到网站,全部有现成规则表。需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,主流游戏都能快速部署,安全组模板已内置。一、安全组是什么安全组是云平台提供的虚拟防火墙,在流量到达你的服务器之前[...]
2026-10-15 回复
[...]# 用 last/permanent 分清语义,配 error_log info 看跳转链完整 Web 防护见网站常见漏洞与基础防护和WAF 规则实战。七、速查表需求写法伪静态try_files $uri $uri/ /index.php?$query_string;HTTP→HTTPSreturn 301 https://$host$request_uri;www 跳主域return 301 h[...]
2026-10-15 回复
[...]# 或国产方案:雷池(SafeLine),面板化管理更适合新手规则实战见WAF 规则实战。新手建议直接上雷池这类可视化 WAF:规则不用手写、误报能一键加白、攻击日志看得懂。五、后台与入口加固扫描器最爱找的是已知路径,改掉它们成本最低:对象默认路径加固WordPress 后台/wp-login.php /wp-admin插件改登录地址 + IP 白名单phpMyAdmin/phpmyadmin改端[...]
2026-10-15 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复
[...])三条铁律:永远参数化,ORM(Sequelize/TypeORM/Prisma)同理绝不拼接 SQL,包括 ORDER BY 字段名(白名单校验)错误信息别返回给前端——err.message 里的表结构是给攻击者的礼物,统一返回"服务器错误"配套防护:WAF 规则过滤常见注入特征,见WAF 规则实战和网站常见漏洞与基础防护。五、Redis:会话和缓存的标配小程序登录态放 Redis 是标准姿势[...]
2026-10-18 回复
[...]个人中心(订单 / 地址 / 优惠券)四、接支付:最需要谨慎的一步国内自建电商的支付选项:方式资质要求费率说明微信支付企业主体 + 商户号约 0.6% 起需对接口,或用插件支付宝企业/个体户约 0.6% 起同上个人码收款无0仅限小额/熟人场景,风控严PayPal企业主体约 3.9%+做海外用硬性要求:企业主体才能申请微信/支付宝商户号,个人主体基本没戏——注册主体时想清楚全站 HTTPS 是强制的[...]
2026-10-18 回复