0

(事实上​​,我在 AWS ELB 背后的 CentOS 上。但我不希望这个问题只针对 AWS ELB,而是针对一般情况。)

我正在研究一个CentOS 6.5盒子,它在一个Load-balancer只将X-Forwarded-ForIP传递给我的后面。作为一个 Web 服务器,我知道坏 IPs 进来,我需要从服务器本身阻止它们。(假设前面没有任何 IPS/IDS/防火墙可以依赖。)

到目前为止,我不知道(我不能)阻止我的那些坏 IP,iptables因为没有真正的 IP,但只有 X-Forwarded-For IP 传递给我。(所以我所做的是,我正在使用.htaccessto 阻止。它有效)

请问如何通过适当的防火墙级别来实现这一点?

4

3 回答 3

0

既然你提到了 .htaccess,听起来你正在使用 Apache Webserver,所以我建议在那里而不是在 iptables 中添加这些规则。Apache中基于X-Forwarded-For的阻塞的基本方式是这样的:

RewriteCond %{HTTP:X-FORWARDED-FOR} ^171.42.6.123$
RewriteRule .* - [F,L]

由于 IP 地址只是一个匹配的字符串,因此您可以在条件中指定各种正则表达式。有关执行此操作的示例,请参见此问题。

于 2016-01-13T21:46:52.503 回答
0

除了每个 ACL 只能有 20 条规则。

于 2016-07-27T19:22:59.210 回答
0

我想做同样的事情。我有很长的 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。否则你'

于 2016-03-29T13:37:19.560 回答