如何阻止用户使用 server.domain.com 访问网站,但允许通过 vip.domain.com 访问?

如何阻止用户使用 server.domain.com 访问网站,但允许通过 vip.domain.com 访问?

我们将网站设置为在 Play 框架上运行。它在 9000 上运行 http。我们可以通过以下方式访问该网站:http://服务器名称.域名.com:9000其中 servername 是 Web 服务器的名称。

我们还设置了 F5 负载均衡器,将所有流量从 http 重定向到 https,并将流量从端口 443 重定向到 9000。我们为 F5 设置了一个域名 vip.domain.com,该域名连接到后端的此 Web 服务器。我们从池中取出其他 Web 服务器进行调试,因此池中目前只有 1 台服务器。

当我使用 Chrome 访问该网站时,如果我们访问http://vip.domain.com,F5 将重定向至https://vip.domain.com我们得到了绿色挂锁,上面写着“安全”。

当我进入http://server.domain.com:9000,它显示“不安全”,我们没有拿到挂锁。

有人进行了安全扫描,发现我们发送的内容是明文未加密的。我们已完成所有测试,并告知所有人http://vip.domain.com但我猜扫描使用的http://服务器名称.域名.com:9000

有没有办法http://服务器名称.域名.com:9000不起作用,但仍保留 9000 端口开放http://vip.domain.com? 如果需要,我们有权对服务器和 VIP 进行更改。

答案1

最简单的方法是设置一个防火墙,阻止除负载均衡器 IP 之外的任何主机的端口 9000(前提是它不是动态的)

简单规则:

iptables -A INPUT -p tcp --dport 9000 -m comment --comment 'allow LB traffic' -s LB.IP.ADDR.HERE -j ACCEPT
iptables -A INPUT -p tcp --dport 9000 -m comment --comment 'drop all other requests to 9000' -j DROP

这些将:

  • 允许 LB 机器使用 9000 端口(你可以为更多 LB 添加更多规则
  • 阻止到端口 9000 的其他流量

更好的方法是检测应用程序中连接中使用的域,并在使用错误的域时重定向到安全地址。我不确定您的框架/应用程序是否如此,但大多数大型框架/应用程序都提供此类机制。

答案2

使用 iRule 可以轻松实现这一点:

when HTTP_REQUEST {
  if { [HTTP::host] equals "servername.domain.com" } {
    # send a TCP reset
    reject

    # alternatively, redirect somewhere else
    # HTTP::redirect "http://www.somedomainyoufindentertaining.com"
  }     
}

(几乎逐字逐句地来自https://devcentral.f5.com/questions/block-domain-redirect

只需在处理端口 9000 流量的虚拟服务器中引用此内容即可。您还可以更有创意地使用条件来决定是否拒绝连接。

相关内容