关键在于构建“日志筛查→特征定位→实时拦截→持久封禁”闭环,apache需配合日志分析、mod_remoteip识别真实ip、fail2ban实现自动持久封禁,或mod_evasive应急限流。

识别并封锁异常流量源,关键不是等攻击发生后再处理,而是建立“日志筛查→特征定位→实时拦截→持久封禁”的闭环。Apache 本身不自动封 IP,但能配合日志分析和外部机制快速响应。
从 access.log 快速筛出高危 IP
异常流量往往藏在高频、低质量、行为反常的请求里。别只看单条记录,要聚合统计:
- 查最近 10 分钟内请求次数 Top 20 的 IP:
awk -v d="$(date -d '10 minutes ago' '+%d/%b/%Y:%H:%M')" '$4 > "["d {print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -20 - 专盯 404/500 + 非浏览器 UA:
awk '$9 ~ /^(404|500)$/ && $12 !~ /(Chrome|Firefox|Safari|Edge)/ {print $1, $12}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -15 - 发现 Slowloris 类慢连接(需日志含 %T):
awk '$12 > 10 {print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10(注意:$12 是 %T 所在列,按实际日志结构调整)
区分真实客户端 IP 和代理失真
Cloudflare、Nginx 反向代理或 WAF 会把真实 IP 藏在 X-Forwarded-For 头里,(默认 %h)可能只是中间节点。必须提前配置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用
mod_remoteip,指定可信代理 IP 段:RemoteIPHeader X-Forwarded-For<br>RemoteIPInternalProxy 192.168.0.0/16 10.0.0.0/8 172.16.0.0/12
- 改用
%{X-Forwarded-For}i记录真实 IP(仅当可信时),并在日志格式中显式定义:LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T" combined_real
用 fail2ban 实现自动持久封禁
这是最稳定、可落地的方案——它监听日志、匹配规则、调用系统防火墙(iptables/firewalld),重启不失效:
- 在
/etc/fail2ban/jail.local中新增 Apache 规则:[apache-slowloris]<br>enabled = true<br>filter = apache-slowloris<br>logpath = /var/log/apache2/access.log<br>maxretry = 5<br>bantime = 3600
- 自定义 filter(
/etc/fail2ban/filter.d/apache-slowloris.conf):failregex = ^<host> .* "(GET|POST) .+ HTTP/.+" 200 .+ \d+\.\d+$</host>
(配合日志中 %T > 10 秒的条件,实际需结合脚本预处理或用 multi-line 规则) - 重启生效:
systemctl restart fail2ban
轻量级应急:用 mod_evasive 快速限流
适合应对突发 HTTP Flood,不依赖外部服务,但只能临时封禁、无法持久化:
- 启用模块后配置示例:
<ifmodule mod_evasive24.c><br>DOSHashTableSize 3097<br>DOSPageCount 2<br>DOSSiteCount 50<br>DOSPageInterval 1<br>DOSSiteInterval 1<br>DOSBlockingPeriod 600<br></ifmodule>
- 它会在内存中记录请求频率,超阈值即返回 403 并写入日志;可配合邮件通知触发脚本,将 IP 写入 iptables 或同步到 fail2ban。









