通过 IP 地址而不是主机名访问网站

通过 IP 地址而不是主机名访问网站

我想知道仅通过域名无法访问网站并且通过其直接 IP 地址被拒绝访问的可能性。

我希望提请大家注意以下示例,但该问题与任何其他场景都相关:www.kickass.to网站具有以下地址,

  • 67.212.88.146
  • 67.212.88.10
  • 205.204.64.122
  • 68.71.58.34

当我使用上述方法时,我收到一条名为“禁止”的消息,但我可以轻松放置完整的 URL 并访问该网站。

根据我的理解,任何域名地址最终都会被浏览器转换为 IP 地址。我对此有点不清楚。

答案1

简短回答?基于名称的虚拟主机允许对 Web 服务器的 IP 地址访问与对同一 Web 服务器的主机名访问进行区别对待。许多 Web 系统管理员出于基本的安全原因将 IP 地址访问“封锁”。此外,IP 地址访问被阻止时通常不会发送“禁止”消息;我的直觉告诉我,某些 Web 服务器防火墙正在检测 IP 地址访问并立即阻止它。

更长的答案?尽管基于名称的虚拟主机设置,如 Apache 中使用的设置允许多个主机名使用相同的 IP 地址,这本身并不意味着如果您尝试通过原始 IP 地址访问服务器,您将收到“禁止访问”的提示。话虽如此,执行此curl -I操作www.kickass.to表明Nginx正在使用:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.7.8
Date: Tue, 10 Feb 2015 05:46:59 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://kickass.to/

虽然我提到了自己使用 Apache(互联网上最常用的 Web 服务器)的经验,但 Nginx 正在获得越来越多的关注,并且允许实现与我所描述的 Apache 类似的行为。包括能够使用 ModSecurity。请继续阅读以了解详细信息;相同的基本概念适用于 Apache 和 Nginx。

当我使用基于名称的虚拟主机设置 Apache 服务器时,我确实会非常有意识地努力创建“虚拟护城河”,方法是让defaultApache 配置(通常000-default在目录中设置sites-enabled)将所有非主机名/IP 特定的访问抛到一个空白的 HTML 页面。其逻辑是,许多恶意软件会尝试通过 IP 地址获取访问权限来“破解”网站。为什么?很简单。许多 Apache 设置都在该地址设置了默认的“成功了!”页面。有能力的系统管理员会删除该页面,因为想要破解网站的机器人/蜘蛛会专门寻找那种“成功了!”页面作为基本线索,“嘿!这位管理员刚刚将服务器投入生产,而没有真正清理这些基本内容。让我们看看这个服务器上可以尝试什么漏洞。”信不信由你,但终止defaultApache 配置是阻止不需要的访问和 DDoS 尝试的最简单方法。

但就像我说的,“禁止”对我来说并不像是故意“死胡同”。谁知道呢,也许系统管理员确实将 Apachedefault配置“死胡同”到了一个完全死的或不存在的目录中。但每当我看到这种情况下的“禁止”时,我就会相信管理员已经ModSecurity已安装。

ModSecurity 是一个 Apache Web 服务级模块,可充当 Web 服务器与有害流量之间的防火墙。它使用“规则集”实时扫描流量(在实际发出 HTTP 请求时),如果访问/行为模式检查为“不良”,则会对该访问发出“禁止”通知。对于原始 IP 地址,ModSecurity 核心规则集 (CRS) 中的核心规则之一是“禁止”对原始 IP 地址的任何访问。

因此,以我的拙见,您看到使用 ModSecurity 或类似防火墙工具的 Web 服务器对原始 IP 请求的反应是将该请求完全阻止为“禁止”。

此外,您指出www.kickass.to有多个 IP 地址。这告诉我,当向 发出请求时,会发生某种负载平衡www.kickass.to。任何设置负载平衡集群的人都一定会确保他们的子节点相当可靠,并且无法访问不需要的请求。所以正如我上面描述的,甚至更多。

答案2

Web 服务器通常配置为使用基于名称的虚拟主机,其中提供的内容取决于主机头

基于名称的虚拟主机对于几乎所有共享主机以及大多数Web 应用程序在操作中使用多个域名。由于它使用频率很高,即使在只处理单个域名请求的 Web 服务器上也经常启用它,无论是为了像这样的花哨域名重定向,还是仅仅由于组织标准和/或管理员的疏忽。

更多信息:

开发此方法是为了允许将不同域名的网站托管在同一 Web 服务器上。当您在 Web 浏览器中访问某个站点时,它会发送一个 Host 标头,其中包含尝试加载的 URL 中的域名,然后服务器将发送相应站点的内容。

例如浏览器发送:

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36
Host: www.kickass.to
Accept: */*

服务器回复:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.7.8
Date: Tue, 10 Feb 2015 05:50:25 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://kickass.to/

<html>

[...剪辑...]

(在这种情况下,服务器实际上只是向我发送了一个重定向到 ,http://kickass.to/而不是 的页面http://www.kickass.to/

当您使用仅包含服务器 IP 地址的 URL 访问服务器时,IP 地址将在 Host 标头中发送,而不是域名。

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36
Host: 67.212.88.10
Accept: */*

如果服务器配置为基于名称的虚拟托管,则根据配置的详细信息,它可能会为您提供设置为在 IP 地址上托管的默认站点的特定站点,或者可能会给您错误响应。

HTTP/1.1 403 Forbidden
Server: nginx/1.7.8

[...剪辑...]

相关内容