apache本身不提供流量清洗功能,需通过mod_rewrite轻量拦截、modsecurity+owasp crs深度防护、协同调度层动态分流三层组合实现;强清洗需求应前置专用waf,apache专注负载均衡。

Apache 本身不内置流量清洗能力,所谓“过滤异常流量”不是开个开关就能实现的功能,而是需要在负载均衡链路中嵌入多层预处理机制。核心思路是:让请求先被识别、拦截或标记,再决定是否转发、转发到哪、是否降级或丢弃。配置的关键不在 balancer 本身,而在它前面的处理层。
用 mod_rewrite 做轻量级实时拦截
适合快速屏蔽已知攻击特征,比如恶意路径、危险参数或可疑 User-Agent。规则生效快,无需额外组件,但无法应对动态变化的攻击。- 在
<virtualhost></virtualhost>或<proxy></proxy>块内,把RewriteRule放在ProxyPass之前 - 示例:拦截含
eval(或base64_decode的 GET 参数RewriteCond %{QUERY_STRING} (eval\(|base64_decode) [NC] RewriteRule ^ - [F] - 可结合环境变量做更细粒度控制,比如只对特定 IP 段启用规则
SetEnvIf Remote_Addr "^192\.168\.100\." block_traffic RewriteCond %{ENV:block_traffic} 1 RewriteCond %{HTTP_USER_AGENT} (sqlmap|nikto|dirb) [NC] RewriteRule ^ - [F]
用 ModSecurity + OWASP CRS 实现深度行为过滤
这是真正具备“清洗”能力的方案,能基于规则评分、IP 封禁、异常响应码拦截等,支持按需开启严格模式。- 确保已加载
mod_security2并启用 OWASP CRS 规则集(推荐 v4.x) - 把 ModSecurity 配置放在
ProxyPass之前,确保所有进来的请求都先过 WAF 引擎 - 关键配置示例:
SecRuleEngine On SecRequestBodyAccess On SecResponseBodyAccess On SecResponseBodyMimeType text/plain text/html text/xml SecResponseBodyLimit 524288 # 对高频扫描 IP 计数并封禁 SecRule IP:bf_counter "@gt 5" "phase:1,deny,status:429,tag:'BLOCKED'" SecAction "phase:1,pass,nolog,ip:setvar:ip.bf_counter=+1,expirevar:ip.bf_counter=60"
- 注意:清洗后返回 429 或 403,可配合
failonstatus=429,403让对应后端自动下线(如果该状态由 WAF 返回)
通过动态路由把清洗与未清洗流量分开处理
不是所有请求都需要强清洗。可根据请求头、来源 IP、URL 路径等条件,把流量导向不同后端池,实现“按需清洗”。-
定义两个 balancer 池:
<proxy balancer:> BalancerMember http://192.168.1.101:8080 loadfactor=3 BalancerMember http://192.168.1.102:8080 loadfactor=2 </proxy><proxy balancer:> BalancerMember http://192.168.1.103:8080 </proxy>
-
使用
mod_rewrite动态选择目标:
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteCond %{HTTP:X-Clean-Mode} ^strict$ [NC] RewriteRule ^(.*)$ balancer://cleaned$1 [P,L] RewriteCond %{REMOTE_ADDR} ^10\.10\.10\. RewriteRule ^(.*)$ balancer://cleaned$1 [P,L] RewriteRule ^(.*)$ balancer://raw$1 [P,L] 这样既保留了高性能直通路径,又为高风险流量提供深度防护
配合后端反馈做自适应清洗联动
清洗效果不能只靠前端规则,还要看后端真实响应。Apache 可根据后端返回的状态码,自动调整节点可用性或触发重路由。- 设置
failonstatus捕获清洗结果:<proxy balancer:> BalancerMember http://waf-proxy:8080 status=+H ProxySet failonstatus=429,403 </proxy>
- 若后端 WAF 返回 429,该节点会被临时摘除;也可搭配
retry=30控制恢复时间 - 更进一步,可将清洗日志输出到单独文件,用外部脚本分析攻击趋势,再动态更新
mod_rewrite规则或 ModSecurity 白名单
不复杂但容易忽略









