假设我拥有两个域:
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.com
或example2.com
。