什么使得 Cloudflare 能够禁用直接 IP 地址访问?

什么使得 Cloudflare 能够禁用直接 IP 地址访问?

当我使用该网站的 IP 地址访问具有 Cloudflare 的网站时,我收到此消息:

Error 1003
Direct IP access not allowed


What happened?

You've requested an IP address that is part of the Cloudflare network.
A valid Host header must be supplied to reach the desired website.

我是一名学生。

  1. 什么允许 Cloudflare 阻止直接 IP 地址访问?
  2. DNS 不是 IP 地址上的一层吗?如果是,那么 Cloudflare 作为 DNS 服务,为什么有能力阻止 IP 地址?

答案1

cloudflare 设置中没有什么特别的。这只是 HTTP 的一个属性。

当客户端打开一个URL时,有三个重要步骤:

  1. 如果需要,它会使用 DNS(或其他解析方法)将主机名转换为 IP 地址。如果 URL 指定了主机的 IP 地址,则使用该地址。
  2. 它通过一个众所周知的端口号(通常为 80)连接到该 IP 地址(除非在 URL 中被覆盖)
  3. 它向服务器请求页面,包括所需的主机名

一个经典的例子如下:

GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org

假设有一个大型主机,上面有许多网站。为简单起见,我们假设它只有一个 IP 地址。数百个域名解析到这个地址。服务器如何决定要传送哪些页面?它使用客户端在 HTTP 请求中提供的主机详细信息。如果您请求它没有或不想给您的东西,它会给您一个错误响应。

在您的情况下,请求包含主机说明符的 IP 地址。

GET /whatever HTTP/1.1
Host: a.b.c.d

很多主机商决定在主机由 IP 地址指定时不提供页面。这里 Cloudflare 没有什么特别之处,也与 DNS 无关。这关乎服务器如何响应由 IP 地址指定的主机的请求,您可以看到此错误消息指定了A valid Host header must be supplied

以下答案描述了如何以这种方式配置服务器:https://serverfault.com/a/607222

您可以使用 telnet 连接到服务器并手动发出 HTTP 请求来轻松验证此类行为。

PS. 同样的一般答案也适用于 HTTP年代请求,但使用服务器名称指示在设置中。值得注意的是,HostHTTP 1.1(1997 年)引入了 。在此之前,这里描述的机制并不存在,服务器无法可靠地判断客户端是否请求了合法解析为其 IP 地址的名称,或者是否直接通过 IP 地址请求主机。由于这是网站爆炸式增长的重要发展,许多旧客户端都已更新为发送Host。[感谢评论者对细节的关注。]

答案2

您尝试联系的系统在其 httpd 配置中列出了多个站点。

HTTP 服务器区分其托管的各个站点的唯一方法是使用直接 URL。

由于这些网站托管在 CloudFlare 的硬件上,因此它们可以提供任何所需的错误。CDN(内容分发网络)根据多种因素将连接转移到其网络上最近的缓存副本。

如果您查看 CloudFlare 提供的服务,您会发现在设置过程中,您将域的 DNS 记录重新指向其 DNS 服务器,然后仅使用其 CDN 系统。作为开发人员,如果您使用 CDN,您仍然知道您的实际主机位于何处,并且可以直接联系它们,而客户不再具有该访问权限。

这也有助于将您的主机与 DDoS 攻击隔离开来。除非您的整个基础设施都托管在 CDN 网络中,否则 CDN 仍会联系您的主机获取内容。

相关内容