如何将端口转发到非 http 服务的子域

如何将端口转发到非 http 服务的子域

我的家庭网络上运行着两个 minecraft 服务器。我想通过转发端口将它们开放给全世界。我可能会添加更多 minecraft 服务器,但我不想一直开放端口,因为这不安全。有没有办法让我只开放一个端口,比如 25565,并允许用户连接到我的其他 minecraft 服务器,比如托管在 25566 和 25567 上的子域?

我在 Linux 上运行 NGINX。感谢您的帮助

答案1

有没有办法让我只打开一个端口(比如 25565),并允许用户连接到我的其他 minecraft 服务器(比如说托管在 25566 和 25567 上使用子域)?

这通常取决于协议是否允许客户端指定他们想要的域(例如 HTTP 中的“Host:”标头或 TLS 中的“服务器名称指示”)。

对于 Minecraft Java 版来说,似乎有可能,因为握手数据包中有一个“主机”字段,我发现了一个名为“蹦极绳索“它有forced_hosts将域映射到特定服务器的选项。

许多其他协议有类似的东西。

我不想继续开放端口,因为这不安全。

不,这简直是胡说八道。

端口本身不做任何事情——实际的服务确实如此。如果您在 10 个端口上运行完全相同的服务,那么您的脆弱性不会增加 10 倍——它仍然是相同的服务,端口不会改变其行为方式。同样,如果您运行三个可通过一个端口访问的不同服务,那么与在单独的端口上单独运行这些服务相比,它仍然具有同样的安全风险。

这可能不是完全如果它们实际上是 HTTP 服务,并且您使用 NGINX 作为 HTTP 反向代理,它本身可以处理请求,因此可以保护编写不良的服务免受其 HTTP 解析器中的错误的影响(但不能保护服务逻辑本身中的错误!)。但是对于 Minecraft-over-NGINX 来说情况并非如此,因为 NGINX 不会理解任何有关 Minecraft 协议的内容,因此无法有效提高安全性。(出于同样的原因,NGINX 不能用于 Minecraft 的虚拟主机/子域,因为这也需要至少对协议有一点了解。)

另一方面,使用像 BungeeCord 这样的代理,你仍然需要担心 Minecraft 服务器中的错误代理本身存在错误(因为它确实处理命令)。

相关内容