我想做同样的事情。我有很长的 IP 地址列表要以 CIDR 格式阻止,将其转换为正则表达式以在 .htaccess 文件中使用似乎不是正确的做法。而且您知道,就处理器负载而言,.htaccess 中的正则表达式甚至与 iptables 可以做的整数位摆弄不在同一个星系。但我不相信可以为此使用 iptables。iptables 在内核中运行,在读取任何标头之前,它会在低级别阻止传入的 IP 地址。
就我而言,我只是将负载均衡器用作处理 https 请求的一种便捷方式,我真的不需要在多个 Web 服务器实例之间平衡繁重的负载。所以我一直在考虑使用 nginx 反向代理运行一个单独的实例来处理我的 apache 网络服务器的 https,添加 X_FORWARDED 标头,就像 AWS 负载均衡器一样。这样我就可以在运行 nginx 的实例上使用 iptables,而不必触摸我的 apache 配置或在负载均衡器后面运行的 webapps。
您失去了负载均衡器本身的多个 IP 地址的冗余,以及与 AWS Cloud Front 的集成以平衡后端负载,但您获得了使用 iptables 的能力,并且您可以从 apache 卸载静态内容的处理,也许会缩短您的响应时间. 由于 nginx 在简单的请求处理方面据说比 apache 轻得多,因此您在该实例上不需要太多精力。我想知道 AWS 负载均衡器是否实际上只是运行 nginx 的实例。如果您查看定价,负载均衡器的每小时成本与 t2.small linux 实例大致相同。
我自己还没有尝试过,因为 nginx 配置对我来说是全新的,它需要购买和安装 SSL 证书,而不是使用非常简单方便的证书管理器。
我想知道 AWS 是否会考虑用户功能请求以便能够使用 iptables 配置负载均衡器......
更新:我刚刚在 AWS EC2 论坛上发布了这个。
更新 2:我向 AWS 提出的功能请求,请求为负载均衡器配置 iptables 的功能得到了答复,并解释了如何使用网络 ACL 阻止来自列表中任何 CIDR 的请求到达负载均衡器。对我来说,这也是一个很好的解决方案。OP 正在寻找不特定于 AWS 的解决方案,但这不符合该标准。如果您在反向代理后面的某些服务器上遇到此问题,则根本不可能使用该服务器的 iptables 样式的防火墙来阻止基于原始 IP 地址的传入请求 - 防火墙需要决定是否阻止请求在它读取标头之前很久,这是唯一可以找到原始请求地址的地方。如果您在 AWS 上,则可以使用网络 ACL。否则你'