Node.js 如何阻止从特定浏览器到我的docker web应用程序的流量?
我有一个node.js web应用程序在redhat服务器上的docker容器上运行,我想强制用户不要使用Internet explorer访问我的网站。我部署了一个Squid代理,能够阻止来自IE的流量,但这个解决方案的问题是,我必须配置我的浏览器来使用代理,我不能真正强迫我的用户在他们的计算机上配置代理,就像我不能强迫他们使用Firefox或Chrome一样Node.js 如何阻止从特定浏览器到我的docker web应用程序的流量?,node.js,docker,Node.js,Docker,我有一个node.js web应用程序在redhat服务器上的docker容器上运行,我想强制用户不要使用Internet explorer访问我的网站。我部署了一个Squid代理,能够阻止来自IE的流量,但这个解决方案的问题是,我必须配置我的浏览器来使用代理,我不能真正强迫我的用户在他们的计算机上配置代理,就像我不能强迫他们使用Firefox或Chrome一样 是否有方法使用简单的工具(如iptables或firewall cmd)阻止IE?否。防火墙工具(如iptables)只能基于IP级元
是否有方法使用简单的工具(如iptables或firewall cmd)阻止IE?否。防火墙工具(如
iptables
)只能基于IP级元数据阻止数据包(例如,拒绝所有连接,但显然来自特定IP地址范围的连接除外)。对于调用方声称的浏览器,您唯一的身份是HTTPUser-Agent:
头,以及涉及实际知道如何处理HTTP协议的工具的处理。原则上,使用标准HTTP服务器(如Nginx或Apache)构建的反向代理可以实现这一点
从安全角度来看,这并不特别可靠。像curl
这样的命令行客户端工具可以提供它喜欢的任何用户代理:
头;如果你看一下,你会发现大多数流行的浏览器都声称是“Mozilla”。MDN有一个适当的注释:
值得重复:使用用户代理嗅探很少是个好主意。您几乎总能找到更好、更广泛兼容的方法来解决您的问题
如果您确实无法以任何其他方式解决此问题,MDN页面将介绍如何解决此问题。它也有很好的理由不这样做,还有一些典型的解决办法。否。
iptables
等防火墙工具只能基于IP级元数据阻止数据包(例如,拒绝所有连接,但显然来自特定IP地址范围的连接除外)。对于调用方声称的浏览器,您唯一的身份是HTTPUser-Agent:
头,以及涉及实际知道如何处理HTTP协议的工具的处理。原则上,使用标准HTTP服务器(如Nginx或Apache)构建的反向代理可以实现这一点
从安全角度来看,这并不特别可靠。像curl
这样的命令行客户端工具可以提供它喜欢的任何用户代理:
头;如果你看一下,你会发现大多数流行的浏览器都声称是“Mozilla”。MDN有一个适当的注释:
值得重复:使用用户代理嗅探很少是个好主意。您几乎总能找到更好、更广泛兼容的方法来解决您的问题
如果您确实无法以任何其他方式解决此问题,MDN页面将介绍如何解决此问题。它也有很好的理由不这样做,还有一些典型的解决办法。如果有人感兴趣,这就是我使用Squid代理和iptables解决这个问题的方法 我将Squid代理配置为拒绝来自除Firefox之外的任何浏览器的流量。然后使用iptables将所有发往端口80的传入流量重定向到squid代理 Squid代理配置:
acl block_browser browser Firefox
http_access deny !block_browser
http_port 3128 intercept
iptables规则:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination x.x.x.x:3128
如果有人感兴趣,这就是我如何使用Squid代理和iptables解决这个问题的方法 我将Squid代理配置为拒绝来自除Firefox之外的任何浏览器的流量。然后使用iptables将所有发往端口80的传入流量重定向到squid代理 Squid代理配置:
acl block_browser browser Firefox
http_access deny !block_browser
http_port 3128 intercept
iptables规则:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination x.x.x.x:3128
为什么要阻止IE用户与您的nodejs应用程序通信?最好的方法是用javascript在前端添加一条消息。@jmaitrehenry我的应用程序在从IE访问时有很多问题,因为它没有经过优化。这可能与您使用Squid的方法类似,但对于nginx:为什么您要阻止使用IE的用户与您的nodejs应用程序通信?最好的方法是用javascript在前端添加一条消息。@jmaitrehenry我的应用程序从IE访问时有很多问题,因为它没有经过优化。这可能与您使用Squid的方法类似,但对于nginx: