【问题标题】:How to block traffic coming from a specific browser to my docker web application?如何阻止来自特定浏览器的流量到我的 docker web 应用程序?
【发布时间】:2020-05-28 03:18:06
【问题描述】:

我有一个 node.js Web 应用程序在 Redhat 服务器上的 docker 容器上运行,我想强制我的用户不要使用 Internet Explorer 访问我的网站。我部署了一个 Squid 代理,并且能够阻止来自 IE 的流量,但这个解决方案的问题是我必须配置我的浏览器以使用代理,我不能真正强迫我的用户在他们的计算机上配置代理,就像我不能强迫他们使用 Firefox 或 Chrome。

有没有办法使用简单的工具(如 iptables 或 firewall-cmd)来阻止 IE?

【问题讨论】:

  • 为什么要阻止使用 IE 的用户与您的 nodejs 应用程序通信?最好的方法是在你的前端用 javascript 添加一条消息。
  • @jmaitrehenry 我的应用在从 IE 访问时有很多错误,因为它没有经过优化。
  • 也许这与您使用 Squid 的方法类似,但对于 nginx:How to block a specific user agent in nginx config

标签: node.js docker


【解决方案1】:

如果有人感兴趣,这就是我使用 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

【讨论】:

    【解决方案2】:

    没有。像iptables 这样的防火墙工具只能阻止基于 IP 级元数据的数据包(例如,拒绝所有连接,除非那些显然来自特定 IP 地址范围的连接)。对于调用者声称的浏览器,您拥有的唯一身份是 HTTP User-Agent: 标头,并且处理涉及实际知道如何处理 HTTP 协议的工具。原则上使用标准 HTTP 服务器(如 Nginx 或 Apache)构建的反向代理可以完成此操作。

    从安全的角度来看,这并不是特别可靠。像curl 这样的命令行客户端工具可以提供它喜欢的任何User-Agent: 标头;如果您查看Mozilla's documentation for User-Agent:,您会注意到大多数流行的浏览器都声称是“Mozilla”。 MDN 有一个extended warning against checking this header value,它正确地指出:

    值得重申:使用用户代理嗅探几乎不是一个好主意。您几乎总能找到更好、更广泛兼容的方法来解决您的问题!

    如果您真的无法以任何其他方式解决此问题,MDN Browser detection using the user agent 页面描述了如何解决。它也有充分的理由不这样做,以及一些典型的解决方法。

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2018-10-21
      • 1970-01-01
      相关资源
      最近更新 更多