我们设置我们的网站运行在播放框架上。 它在http上运行9000.我们可以通过访问http://servername.domain.com:9000访问该站点,其中servername是web服务器的名称。
我们还设置了我们的F5负载均衡器,将所有stream量从httpredirect到https以及从端口443到9000的stream量。我们为F5设置了一个域名vip.domain.com,后者连接到这个networking服务器。 我们从池中取出了其他Web服务器进行debugging,因此当前池中只有一台服务器。
当我访问Chrome上的网站时,如果我们访问http ://vip.domain.com,F5会将我们redirect到https://vip.domain.com ,我们会得到绿色的挂锁,并显示“Secure”。
当我inputhttp://server.domain.com:9000时 ,它说“不安全”,我们没有挂锁。
有人进行了安全扫描,并表示我们正在以未encryption的方式发送内容。 我们已经完成了所有的testing,并告诉每个人去http://vip.domain.com ,但我想扫描使用http://servername.domain.com:9000 。
有没有办法使http://servername.domain.com:9000不工作,但仍然离开港口9000打开http://vip.domain.com ? 我们可以根据需要对服务器和VIP进行更改。
最简单的方法是build立一个防火墙,阻止来自除负载均衡IP以外的任何主机的端口9000(假设它不是dynamic的)
简单的规则:
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
这些将会:
更好的方法是在你的应用程序中检测连接中使用了哪个域,并在使用错误的地址时redirect到安全地址。 我不确定你的框架/应用程序,但大多数更大的提供这样的机制。
使用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 )
只需在处理端口9000stream量的虚拟服务器中引用它即可。 您可以通过决定是否拒绝连接的条件获得更多创意。