You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS应用负载均衡器转发真实客户端IP并解决拦截失效问题?

解决ALB后端mod_evasive封禁真实IP无效的问题

核心调整:让mod_evasive基于X-Forwarded-For检测请求

mod_evasive默认以请求的源IP(也就是ALB的IP)作为统计和封禁依据,这就是你封禁客户端真实IP后请求仍能到达EC2的原因。你需要修改配置,让它优先读取X-Forwarded-For头中的真实客户端IP:

  • 找到mod_evasive的配置文件(通常为/etc/httpd/conf.d/mod_evasive.conf或/etc/apache2/mods-available/evasive.conf)
  • 添加或修改以下关键配置:
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
    # 启用X-Forwarded-For作为客户端IP来源
    DOSUseXForwardedFor On
    
  • 重启Apache服务:systemctl restart httpd(CentOS/RHEL)或systemctl restart apache2(Ubuntu/Debian)

这个配置会让mod_evasive以X-Forwarded-For头的第一个IP作为客户端真实IP,以此统计请求频率并执行封禁。

补充方案:在ALB层用AWS WAF前置拦截

如果mod_evasive的调整仍达不到预期效果,建议在ALB前端配置AWS WAF:

  • 基于X-Forwarded-For创建IP匹配规则,直接拦截被mod_evasive封禁的IP
  • 设置速率限制规则,提前在ALB层过滤高频请求,减轻EC2的防护压力
  • 可通过自动化脚本将mod_evasive的封禁列表同步到WAF的IP集,实现联动拦截

备选方案:用fail2ban配合日志补位防护

如果mod_evasive的DOSUseXForwardedFor配置因版本等问题无法生效,可借助fail2ban实现:

  • 修改Apache日志格式,添加%{X-Forwarded-For}i确保日志记录真实客户端IP
  • 配置fail2ban过滤规则,从日志中提取真实IP,通过Apache的deny规则或mod_security实现拦截(注意:不能封禁ALB IP,需针对真实IP做应用层拦截)

关键注意事项

  • AWS ALB默认会自动添加X-Forwarded-For头,无需额外配置,但要防止头伪造:在Apache中配置仅信任ALB的私有IP段,避免恶意客户端篡改该头
    # 示例:信任VPC内ALB的私有IP段,根据你的VPC配置调整
    SetEnvIf X-Forwarded-For "^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.)" trusted_proxy
    RequestHeader set X-Forwarded-For "%{X-Forwarded-For}i" env=trusted_proxy
    

内容的提问来源于stack exchange,提问作者Rehan CH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:52:51