我在 Amazon ELB 网络负载均衡器后面有几个 Web 服务器。负载均衡器将客户端数据包的源 IP 地址替换为其自己的源 IP 地址。
例如,IP 为 的客户端203.0.113.1
连接到我的负载均衡器。负载均衡器将客户端流量转发到源 IP 为的 Web 服务器172.16.1.1
。这使得选择性阻止客户端 IP 变得困难。
Amazon 网络负载均衡器中有两种解决方案:
- IP 保留通过负载均衡器透明地保留 IPv4 IP,但它本身不支持 IPv6,因为 IPv6 地址仍会转换为
172.16.1.1
- 可以在负载均衡器上启用代理协议 V2,该协议将标头添加到
TCP DATA
包含寻址信息的字段之前。它支持 IPv4 和 IPv6,并且受我的 Apache Web 服务器支持。 IP数据包中的源IP地址仍然是172.16.1.1
,但是真正的源 IPv4/6 地址位于代理协议 V2 标头内的 TCP 数据字段中。
通常,我的服务器的防火墙日志由 Fail2Ban 读取,它会阻止行为不当的地址。我的问题是我不知道如何阻止使用代理协议 V2 封装的行为不当的流量,如IPTables 似乎无法直接检查代理协议 V2 标头,否则我会使用 Fail2Ban 和 IPtables 来实现此目的。
我的下一个解决方案是将 IP 地址发送到 Lambda 脚本,以阻止我的 VPC 的网络 ACL 或路由表中的 IP,但这会增加一些初始复杂性,因为这似乎是阻止流向网络负载均衡器的流量的唯一方法。
Apache、IPTables 或其他工具是否有任何简单的方法可以根据代理协议 V2 标头中找到的 IP 值动态阻止流量?