以下是
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。
我只看到两种方法:
- 配置 nginx 以使用 X-Forwarded-For(或 cloudflare 另外提供的 CF-Connecting-IP),再加上 401 响应的评估和 limit_req(这可行吗?如何?)
- 不要通过 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 上进行匹配并对其应用速率限制,有关更多详细信息,请查看此答案: