【问题标题】:Using Firebase Hosting, how can I restrict PURGE request to specific IPs使用 Firebase 托管,如何将 PURGE 请求限制为特定 IP
【发布时间】:2021-07-27 20:48:12
【问题描述】:

我有一个托管在 Firebase 上的网站,使用静态 html,没有使用服务器端函数来传递结果。

运行curl -X PURGE https://mywebsite.com -v -L时,结果为:

{ "status": "ok", "id": "20755-1619059392-3560756" }

我需要一种方法将此操作限制为特定 IP,这样任何人都无法重置我的缓存,这可能会导致额外费用。

此外,Firebase 似乎使用 Varnish 来管理缓存(这是空的)。

我客户的安全顾问向我们发送了有关如何处理此问题的建议,我不确定这是 .htaccess 语法还是什么:

# Varnish recommends to using PURGE method only by valid user,
# for example by ip limiting and for other return 405 Not allowed:


acl purge { 
 "localhost";
 "192.168.55.0"/24;
}

sub vcl_recv {
 # allow PURGE from localhost and 192.168.55...
 if (req.method == "PURGE") { 
  if (!client.ip ~ purge) {
   return(synth(405,"Not allowed."));
  }
  return (purge);
 }
}

我不知道如何在 Firebase 托管中应用它,我也没有使用服务器功能,只是带有以下标题的常规 firebase.json

      "headers": [
        {
          "source": "*.[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].+(css|js)",
          "headers": [
            {
              "key": "Cache-Control",
              "value": "public,max-age=31536000,immutable"
            }
          ]
        },
        {
          "source": "**/*.@(json|eot|otf|ttf|ttc|woff|font.css)",
          "headers": [
            {
              "key": "Access-Control-Allow-Origin",
              "value": "*"
            }
          ]
        }
      ]

【问题讨论】:

  • 这最好直接针对Firebase Support,因为它需要有关内部系统和架构的信息。

标签: firebase caching varnish firebase-hosting purge


【解决方案1】:

以下代码为VCL代码

acl purge { 
 "localhost";
 "192.168.55.0"/24;
}

sub vcl_recv {
 # allow PURGE from localhost and 192.168.55...
 if (req.method == "PURGE") { 
  if (!client.ip ~ purge) {
   return(synth(405,"Not allowed."));
  }
  return (purge);
 }
}

此代码允许您扩展 Varnish 的行为。必须将此代码添加到您的 /etc/varnish/default.vcl 文件中。

将此代码添加到您的 VCL 文件后,您必须重新加载您的 varnishd 进程才能激活此 VCL 配置。

如果无法重新加载varnishd,您还可以使用以下命令激活新的 VCL 文件:

sudo varnishadm vcl.load purge_acl /etc/varnish/default.vcl
sudo varnishadm vcl.use purge_acl

有关 VarnishVCL 编程语言的更多信息,请查看http://varnish-cache.org/docs/6.0/reference/index.html

【讨论】:

  • 谢谢蒂斯。这澄清了很多,但是由于 node/js 开发人员仍在努力研究如何在 Firebase 项目中应用它。 /etc/varnish/default.vcl 文件夹结构看起来像一个标准的 linux 托管,这可以通过在根目录上创建和 etc 文件夹来应用于 Firebase 托管吗?另外,我如何远程连接到 Firebase 主机来执行你提到的 sudo 命令来激活新的 VCL?
  • @Ribal 抱歉,我不熟悉 Firebase。我只能就 Varnish 相关的话题提供建议。但是,我仍然愿意提供帮助。您的 Firebase 主机是否真的支持 Varnish?如果是这样,Varnish 是否与您部署的代码库托管在同一台机器上?
  • Firebase 控制台或 GCloud 中没有提到 Varnish 的地方,但是当我运行 PURGE 命令时,我在响应 X-Varnish: 2860902786 Via: 1.1 varnish 中得到以下内容,这在这个问题中制作了标签 Varnish,但除此之外没有其他参考资料(老实说,这是我第一次了解清漆).. 我仍在尝试研究这个主题。同时,您认为贵公司中是否有任何人可能更熟悉 Firebase,并且可能会在这方面为我们提供帮助?
  • 会不会是 Varnish 刚刚安装在您的 Firebase 应用程序前面?您可以对接受 PURGE 请求的 IP 地址进行 IP WHOIS 吗?我想知道这是 Firebase IP 还是某些提供 Varnish 的第三方托管服务提供商的 IP 地址。
  • 这是我可以执行 IP WHOIS site24x7.com/find-ip-address-of-web-site.html 的地方吗?如果是,我这样做了,结果对我来说看起来很奇怪.. 客户名称是机密的,所以我将替换为“abcdef”。奇怪的是网站是abcdef.om,ip 结果删除了第一个字母并返回以下内容:bcdef.om./23.6.99.23,这对你来说看起来正常吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 2021-08-21
  • 1970-01-01
  • 2021-11-09
  • 2020-04-20
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多