我有一台 EC2 机器在 AWS Application Load Balancer 后面运行。我已经设置了 mod_evasive (用于 DDOS 防护)。
问题是,每当客户端向负载均衡器请求时,它都会转发自己的 IP,而不是客户端的实际 IP。我还实现了 X-Forward-Header 来获取客户端请求的真实 IP,并成功阻止了该 IP。主要问题在于,当客户端再次向负载均衡器发出请求时,由于负载均衡器的 IP 地址,该请求会再次到达 EC2。我无法阻止负载均衡器 IP。
有什么解决办法吗?有什么建议吗?
使用 AWS Application Load Balancer (ALB) 时,实际的客户端 IP 地址通常会在 X-Forwarded-For 标头中传递到您的 EC2 实例。看来您已经将系统配置为使用此标头来获取真实的客户端 IP。
现在,如果您使用 mod_evasive 进行 DDoS 防护,并且基于 X-Forwarded-For 标头阻止 IP,则可能会遇到 ALB 的 IP 被阻止且来自客户端的后续请求无法通过的问题再次通过ALB,触发保护机制。
一种可能的解决方案是修改 mod_evasive 配置以排除 ALB 的 IP 地址被阻止。这样,只有实际的客户端 IP 才会受到 DDoS 保护规则的约束。以下是如何执行此操作的总体概述:
确定您的 AWS ALB 使用的 IP 地址范围。您可以在 AWS 控制台或 AWS CLI 中找到此信息。
更新您的 mod_evasive 配置以排除此 IP 范围。配置可能看起来像这样:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify [email protected]
DOSWhitelist 127.0.0.1
DOSWhitelist ALB-IP-Range
将 ALB-IP-Range 替换为 ALB 使用的实际 IP 范围。
重新启动或重新加载 Apache 以应用更改。
这样,ALB的IP就不会触发DDoS防护,只有来自实际客户端的请求才会受到保护。