阻止所有直接 IP 请求但允许域请求

阻止所有直接 IP 请求但允许域请求

阻止所有对公共 eth 接口 IP 的直接 IP 请求但同时允许某些 fqdn(基于域的)请求的最佳 Linux 选项是什么?

例子:

服务器的公共 IP 是 166.137.1.1,www.mywebsite.com DNS 指向该服务器和 IP。以下是一些场景:

  1. 向 166.137.1.1 发出请求 - 阻止(在所有端口上)
  2. 对 www.mywebsite.com 的请求 - 允许(仅端口 80 和 443)
  3. 对 www.maliciouswebsite.com 的请求在我不知情的情况下指向我的服务器 IP 166.137.1.1 - 阻止(在所有端口上)

示例 3 使恶意用户能够伪造 Web 服务器的环境变量(CGI 范围),例如 HTTP_HOST

答案1

当数据包到达您的机器时,您完全不知道启动用户/软件/进程是否使用了 IP 地址或 DNS 名称。

答案2

HTTP 1.1 协议允许根据Host:标头中给出的主机名决定要做什么,因此您无法在防火墙的 TCP 数据包级别上执行此操作。不过,您可以获得几乎相似的结果:

  1. 在防火墙处DROP,除发往端口80和的数据包之外的每个数据包443
  2. 在 Web 服务器上
    • 创建一个默认的万能虚拟主机,响应错误404 Not Found或显示一些简单的“主机名未在此处配置”页面。或者301使用您的规范主机名;无论您希望如何。
    • 创建另一个仅为正确Host:标头提供内容的虚拟主机。

相关内容