2

使用 nginx,您可以允许和拒绝范围和 ips ( https://www.nginx.com/resources/admin-guide/restricting-access/ )。使用realip模块,可以将它使用的ip改成cloudflare后的真实IP。( http://nginx.org/en/docs/http/ngx_http_realip_module.html )

现在事情是这样的,我想将任何不是 Cloudflare 或 localhost 的 ip 列入黑名单。事实证明这相当困难,我尝试在设置 real_ip 模块设置之前将其放置,并且没有雪茄。

这可能吗?如果用户没有通过 cloudflare,这似乎是一个缺陷,它允许对某个虚拟主机进行更多的滥用。

有 $realip_remote_addr 变量,但我一生都无法找到一种方法来允许/拒绝使用它而不是正常的 $remote_addr。

编辑:我注意到防火墙可以帮助实现这一点。不幸的是,我真的只需要几个虚拟主机。

4

3 回答 3

2

您可以使用地理块轻松完成

geo $realip_remote_addr $giveaccess {
      default 0;
      IPBLOCK1 1;
      IPBLOCK2 1;
      …
    }
    server {
       …
       location / {
         if ($giveaccess = 0){
          return 403 "$realip_remote_addr";
          #use it for debug
        }
    }
于 2016-08-30T14:05:46.407 回答
1

这种简单性允许伟大的事情。

它使用起来更聪明,$realip_remote_addr == $remote_addr因为$http_*发送此类请求的客户端可以伪造它。(一位朋友向我指出)。

编辑:好的,考虑到上述观点,最好使用 Lua 模块。

类似于下面的东西。

access_by_lua_block {
    if ngx.var.remote_addr == ngx.var.realip_remote_addr then
            return ngx.redirect("http://somewhere.else.please/");
    end
}
于 2016-08-27T16:26:57.483 回答
1

我认为您想阻止直接访问您的机器,即通过您机器的 ip。

您可以为此使用 cloudflare 设置的 http 标头。每当通过 cloudflare 发出请求时,它都会设置$http_cf_connecting_ip为访问您机器的机器的 ip。

所以你可以写一个条件,拒绝所有空的请求$http_cf_connecting_ip

于 2016-08-27T09:33:03.377 回答