Nginx -- 如果是 referer,将 (x-forwarded-for) ip 添加到黑名单

Nginx -- if referer, add (x-forwarded-for) ip to blacklist

我写了一个基本的 http referer 重定向器,看起来像这样:

if ($http_referer ~* (google|yahoo|bing|duckduckgo)) {  return 301 https://altavista.com; }

我的目标是这样的

if ($http_referer ~* (google|yahoo|bing|duckduckgo)) {
    add $x-forwarded-for bad_ips.txt; <-- this line is the question (x-forwarded-for because it's behind cloudflare)
    return 301 https://altavista.com; 
}
if ($bad_ip) { 
    return 301 https://altavista.com; 
}

有什么办法吗?目标基本上是如果您是从黑名单上的网站引荐的,我想将您的 ip 添加到重定向列表中。

注意:这不需要纯粹在nginx中完成;使用除 nginx 之外的其他技术是可以的,只要它们是免费的。

请注意我的网站使用的是 cloudflare,因此必须使用 x-forwarded-for 地址而不是禁止简单的 IP,否则我只是禁止 cloudflare。

谢谢

直到我记得没有直接的方法可以做到这一点。

根据this 博客,付费选项可以使用 Nginx Plus。

除此之外,我现在可以看到 2 个选项:

  1. OpenResty 与 LUA 模块一起使用。你要做的是

    1. 在每次请求时将 IP 写入文件
    2. 每次从文件中读取请求时,如果 IP 存在,则 301 重定向。

    如果你不想使用 OpenResty 那么你也可以 build Nginx with LUA module.

    [我现在关心的是效率。此方法可能会增加性能开销,因为必须在每次请求时解析文件。]

  2. 在 Nginx 中使用 Fail2Ban。

I wanted to add this in the comment but I don't have enough reputation to comment.