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

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

例:

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

  1. 请求166.137.1.1 – BLOCK(在所有端口上)
  2. 请求www.mywebsite.com – 允许(只有端口80和443)
  3. 请求www.maliciouswebsite.com哪些点不知道我的服务器的IP为166.137.1.1 – BLOCK(在所有端口上)

示例3给恶意用户提供了例如欺骗web服务器的环境variables(CGI范围)的能力,例如HTTP_HOST

当数据包到达您的机器时,您绝对没有关于启动用户/软件/进程是否使用IP地址或DNS名称的信息。

这是HTTP 1.1协议,允许根据Host:头中给出的Host:名来决定做什么,所以你不能在防火墙上的TCP数据包级别上做这件事。 不过,你可能会得到几乎相似的结果:

  1. 在防火墙DROP每个数据包,除了端口80443
  2. 在Web服务器上
    • 创build一个默认的catch-all虚拟主机,回应错误404 Not Found或显示一些简单的“hostname not configured here”页面。 或301到你的规范主机名; 不pipe你想要什么
    • 创build另一个虚拟主机,只为正确的Host:头提供内容。