从nginx / iptables中拒绝X-Forwarded-For IP

下面是以下内容

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

我想要做的是通过401拒绝追踪bruteforcing IP,并禁止这个IP做任何后续的请求。

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

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

我只看到两种方式:

  1. configurationnginx使用X-Forwarded-For(或通过cloudflare给出的CF-Connecting-IP addionnally),加上评估401响应加上limit_req(这是否可行?怎么办?
  2. 而不是通过fail2ban监测检测到的bruteforcingIP,将其映射到禁止的ip(例如140.1.1.1或非洲的任何IP),并通过nginx上的Deny指令拒绝httpstream量。

其中一个可行的是? 如果不是,可以select吗?

由于TCP会话在Cloudflare的服务器上被终止,这意味着你不能直接或通过iptables来禁止你的客户,除非你要用iptables来禁止searchstring的麻烦,例如: iptables rule to block all web请求到domain.com 。

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

你可以做的是基于X-Forwarded-For内容在nginx上进行匹配,并对其应用速率限制,更多详细信息请查看这个答案:

nginx速率限制与X-Forwarded-For头