要拦截恶意请求,核心思路是分层防护:在Web应用防火墙(WAF)上配置精准的规则集,结合IP信誉库、速率限制和Bot行为分析,把攻击流量挡在源站之前。单纯的网络层防火墙只能封端口和IP,面对应用层的SQL注入、CC攻击、撞库扫描基本无能为力,下面直接进入配置实操,按防护层级逐一拆解。
WAF和防火墙的区别,为什么必须上应用层
很多人问我,服务器自带的防火墙(比如iptables、安全组)够不够用,这里直接说结论:不够,iptables工作在L3/L4层,它不认识HTTP协议,看不懂URL参数里藏着的攻击载荷,而WAF(Web Application Firewall)工作在L7层,能解析完整的HTTP请求,识别出`/admin.php?id=1 AND SLEEP(5)`这种SQL注入特征。
网络层防火墙的局限在哪里
– 只能基于IP、端口、协议做黑白名单
– 对CC攻击(应用层洪水)无解,因为每个请求本身是合法的HTTP访问
– 无法检测请求体(POST内容)中的恶意Payload
– 遇到CDN回源IP时,封禁用户真实IP会误伤大量正常访客
应用防火墙拦截恶意请求的典型场景
用我们最常见的场景来举例:一个电商站点遇到抢购脚本,同一个IP在1秒内发送了50次加入购物车的请求,每次请求都带不同的User-Agent,网络层防火墙看到的是50个正常TCP连接,但WAF能通过频率特征和行为指纹判断这是工具脚本,直接触发滑块验证或拦截响应。
配置WAF拦截规则的前提准备
在动手配置规则之前,有几个基础设施必须先搞定,否则规则写得再好也会误伤。
确认WAF的部署模式
– 反向代理模式:DNS解析指向WAF,流量先过WAF再回源站,是最推荐的部署方式
– 透明桥接模式:串在链路上,不需要改DNS,但性能损耗较大
– DNS牵引模式:通过DNS引流到清洗节点,适合大流量DDoS场景
收集源站IP段和白名单
这一步非常关键,避免把自己锁在门外,先把运营商的动态IP、办公网出口IP、第三方支付回调IP加入白名单,行业共识认为,WAF配置阶段至少预留2-3小时的白名单观察期,再逐步收紧策略。
应用防火墙拦截恶意请求的具体配置方法
下面是核心部分,按防护优先级从高到低排列,配置顺序错了容易导致漏防或误封。
第一步:启用基础托管规则集
主流的WAF产品(如简米云WAF、酷番云EdgeOne、Cloudflare)都内置了OWASP Core Rule Set(CRS)的托管规则,开启时注意选择防护模式而不是检测模式,否则只记录日志不拦截。
- 先去规则管理页面,找到托管规则组
- 勾选SQL注入、XSS、本地文件包含、远程代码执行这四类高危规则
- 把规则动作从“仅记录”切换为“拦截”
- 开启紧急威胁检测(对应CVE漏洞利用特征的实时更新)
第二步:配置IP黑白名单和地域封禁
IP黑名单是成本最低的拦截手段,根据近3个月的日志统计,攻击源集中在海外机房IP段,以及部分IDC动态IP。
- 访问控制里添加IP黑名单,支持IPv4/IPv6网段
- 地域封禁勾选高频攻击源区域(如境外某些国家),国内业务通常可以直接封掉海外流量
- 注意把CDN节点IP段加白,否则所有经过CDN的访客都会被误判
第三步:自定义防护规则精准拦截恶意请求
托管规则覆盖通用攻击,但业务特有的恶意行为需要自定义规则,举个实际案例:某在线教育网站被爬虫抓取课程目录,特征是把`/course/list`接口的`page`参数从1扫到999,URL长度固定,UA不随机。
在自定义规则里这样配置:
- 匹配字段:URI + 参数名
- 条件:URI等于
/course/list且 参数page值大于500 - 动作:拦截并返回403
- 生效时间:全时段
再比如防撞库场景,登录接口/api/login出现同一IP多次POST且密码字段为MD5格式时,直接触发验证码或临时封禁15分钟。
第四步:配置速率限制CC攻击的克星
频率限制的核心是设定“阈值”和“时间窗口”,阈值设太小会误伤正常用户,设太大等于没防。
| 接口类型 | 正常用户访问频率 | 建议限制阈值 | 封禁时长 |
|---|---|---|---|
| 静态资源(/static/) | 页面加载时并发请求多 | 30次/秒/IP | 10分钟 |
| 登录接口(/login) | 人工输入慢 | 5次/分钟/IP | 15分钟 |
| 搜索接口(/search) | 用户多次点击 | 10次/分钟/IP | 5分钟 |
| 注册接口(/register) | 人工填写 | 3次/分钟/IP | 30分钟 |
针对登录和注册接口,业内专家指出,速率限制 + 人机验证的组合是最有效的撞库防护手段。
第五步:开启Bot管理模块
2026年的攻击流里,模拟浏览器的恶意Bot占比相当可观,它们用Puppeteer或Selenium模拟真实浏览器行为,单看频率和Header很难识别。
Bot管理的核心机制:
- 主动挑战(JS挑战):对可疑请求返回一段JavaScript,能执行的就是真实浏览器
- 行为指纹:鼠标轨迹、键盘延迟、页面可见性API的调用顺序
- 设备指纹:Canvas指纹、WebGL渲染特征、字体列表
对命中“伪装浏览器”标签的请求,可以直接拦截,这个模块务必开启“拦截”而非“观察”,否则恶意Bot会持续消耗源站带宽。
第六步:配置日志告警和联动策略
规则不是配完就不管了,登录WAF控制台,检查“安全日志”里的拦截记录,结合响应码分布(重点看404、403、499)判断是否有漏网之鱼,通过API接口把WAF日志同步到对象存储,保留至少6个月,用于事后溯源和攻防演练。
应用防火墙和CDN联合配置的常见坑
很多站点同时接入了CDN和WAF,这时候如果配置顺序不对,会出大问题。
正确的链路是DNS → CDN → WAF → 源站
CDN先缓存掉一部分静态攻击流量(比如图片盗链),动态请求再回源到WAF过滤,但要注意:CDN回源到WAF时,IP是CDN节点IP,直接按来源IP封禁会失效,必须让CDN把真实客户端IP通过`X-Forwarded-For`头传递下来,在WAF侧配置“获取真实IP”的回源策略。
HTTPS证书卸载的位置
证书可以放在CDN上,也可以放在WAF上,如果WAF要看到明文HTTP请求内容,就必须在WAF处解密,有数据表明,相当一部分中小网站在证书放置上出过错,导致WAF看到的全是加密流量,规则形同虚设。
WAF误伤正常用户怎么办
误伤是WAF配置必须面对的问题,处理思路是“灰度发布”+“精准加白”。
误伤排查三步走
1. 收到用户反馈无法访问后,先查WAF日志中的拦截记录,匹配到具体规则ID
2. 将该用户IP、Session ID或设备指纹加白
3. 调整触发误伤的规则阈值(通常是速率限制或自定义条件的粒度太粗)
合理的加白策略并不代表放松防护
比如App端的API请求统一加白客户端的签名头(`X-Api-Sign`),但保留服务端对签名合法性的校验,这样即使WAF放行,业务层也能拦截伪造请求。
常见问题解答(Q&A)
网站被恶意请求攻击,如何快速应急处理
登录WAF控制台,将防护模式从“观察”切换为“拦截”,优先启用托管规则中的紧急威胁检测和IP黑名单,如果攻击流量超过WAF清洗能力,启用DDoS高防进行流量牵引,再把WAF的源站IP改为高防的清洗IP,形成高防 → WAF → 源站的链路。
CDN的防护能力和WAF的防护能力怎么协同
CDN主要负责大流量DDoS清洗和静态内容缓存,降低回源压力,WAF负责精细化拦截Web攻击,两者不冲突,配置时让CDN优先响应静态资源请求,动态请求透传到WAF检查,缓存命中率提升后回源量减少,WAF的过滤压力也会随之降低。
免费WAF和付费WAF的拦截效果差别大吗
免费版WAF(如Cloudflare免费计划、云厂商的基础版)提供基础托管规则,能拦截常见注入和XSS,付费版的差异体现在:自定义规则数量上限、速率限制的精准度、Bot行为分析、实时威胁情报更新,对于带支付和登录功能的业务,建议使用付费版,因为这类攻击模式变化快,免费版的规则更新有明显的滞后周期。
回到最初的问题:应用防火墙拦截恶意请求的落脚点在于精确的规则配置和持续的调优,先把托管规则开起来,再根据业务日志定制专属策略,最后配合速率限制和Bot识别三层联动,恶意流量基本进不了源站,配置完成后,每周抽10分钟去看一次拦截报告,比任何安全软件都管用。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/635581.html


