拒绝来自 nginx/iptables 的 X-Forwarded-For IP

拒绝来自 nginx/iptables 的 X-Forwarded-For IP

以下是


visitor --> Cloudflare proxy --> Front --> Back
                                ^^^^^^
                    -->iptables(fail2ban)-->nginx-->

我想要做的是通过 401 拒绝来追踪暴力破解 IP,并禁止该 IP 进行任何后续请求。


   FE                    BE
    |                     |
..  |                     |
    |  POST /oauth/token  |
    |-------------------->|
    | 401 (access denied) |
    |<--------------------|
..  |                     |
    |                     |

但是 FE 上唯一的传入地址是 cloudflare 的 IP,而不是访问者的 IP。因此我无法通过 iptable 禁止传入 IP。

我只看到两种方法:

  1. 配置 nginx 以使用 X-Forwarded-For(或 cloudflare 另外提供的 CF-Connecting-IP),再加上 401 响应的评估和 limit_req(这可行吗?如何?)
  2. 不要通过 fail2ban 监禁检测到的暴力破解 IP,而是将其映射到被禁止的 IP(例如 140.1.1.1 或非洲的任何 IP),并通过 nginx 上的 Deny 指令拒绝 http 流量。

后者是否可行?如果不行,还有其他选择吗?

答案1

由于 TCP 会话在 Cloudflare 的服务器上终止,这意味着您无法使用 iptables 直接或轻松地禁止您的客户端,除非您不遗余力地使用 iptables 搜索如下字符串来禁止:Iptables 规则阻止对 domain.com 的所有 Web 请求

即使在这种情况下,一些来自客户端的请求也会被 cloudflare 缓存,毕竟这是使用 CDN 的原因之一,所以您甚至看不到请求的到来。

您可以做的是根据 X-Forwarded-For 内容在 nginx 上进行匹配并对其应用速率限制,有关更多详细信息,请查看此答案:

使用 X-Forwarded-For 标头限制 nginx 速率

相关内容