不,没有防火墙

不,没有防火墙

假设我拥有两个域: example1.com并且example2.com
我还有一个服务器,其中运行 2 个 Node.js Web 应用程序:

  • app1 正在端口 81 上运行并且
  • app2 正在端口 82 上运行

现在我的两个域都连接到该服务器,这意味着如果我访问 http://example1.com:81或访问,http://example2.com:81我将获得 app1 页面,如果我访问 http://example1.com:82或访问,http://example2.com:82我将获得 app2 页面。

现在我的问题: 是否可以使用 iptables 来阻止来自某个域的所有请求?

如果有人请求,http://example1.com:81他们就会得到该应用程序1。
但如果他们提出要求http://example1.com:82,他们将得不到答复。

同样,如果有人请求,http://example2.com:82他们将获得 app2,
但如果他们请求,http://example2.com:81他们将得不到答案。

我希望我的问题很清楚。我在标题中描述它有些困难;我对此感到抱歉。

答案1

“现在我的问题是:是否可以使用 iptables 来阻止来自某个域的所有请求?”

不,没有防火墙

因为域名不属于 IP 或 TCP 或任何级别 1 -> 3 的部分。首先,客户端从域名中查找 IP 地址,然后使用 IP 地址进行通信。

怎么做呢,有不同的方法。

某些协议(例如 http)将域名嵌入请求中。因此,您可以将过滤放在 Web 服务器配置中。

如果您愿意,您可以通过一个端口完成这一切。或者如问题中所述。

答案2

不,您不能告诉 IPtables 阻止端口 81 上的所有流量,但接受端口 81 上的流量。是哪个?接受还是阻止?如果它阻止了他们,它如何知道他们想要哪个域名?如果它如何知道他们想要哪个域名,那么在决定阻止它们之前它不是接受了它们吗?

您必须在 HTTP 级别执行您想要的操作。假设您使用 Apache,它可以配置虚拟主机容器以仅侦听特定端口上的特定域。用户的连接不会超时(就像被 IPtables 阻止一样),但他们可能会收到黑页、错误消息、重定向等,这实际上会阻止他们在错误的端口上使用该服务。

不确定你的项目,但我认为你可以使用 Apache 将流量转发到node.js,如果你能做到这一点,那么你就不必使用不同的端口。 Apache 可以接受同一端口上的所有流量,然后代理将该流量转发到node1.js或 ,node2.js具体取决于提供的主机名example1.comexample2.com

相关内容