在特定端口上运行的服务可从任何网站运行...如何禁用它?

在特定端口上运行的服务可从任何网站运行...如何禁用它?

因此,我在我的 VPS 上运行多个网页,并利用 Apache 的虚拟主机来确保任何访问我网站的人都被发送到正确的网站。不幸的是,在设置 Jenkins 实例后,我注意到我可以转到指向不同虚拟主机上的 VPS 的任何这些域,并在它们后面附加 :8080 以访问 Jenkins 服务器。我想找到一种方法来防止这种情况,并允许我仅通过 ip:port 访问 Jenkins 服务器。任何帮助都非常感谢!

另外还有一个问题,有什么办法可以让我放弃连接 ip:80 的尝试吗?谢谢。

答案1

我可以访问这些域中的任何一个 [...] 并附加到:8080它们以访问 Jenkins 服务器。我想找到一种方法来防止这种情况并允许我仅通过 访问 Jenkins 服务器ip:port

正如评论中提到的,第一步是阻止公共访问your_ip:8080(Jenkins 仍可在此端口上内部运行)。如何执行此操作可能取决于您的 VPS(尽管您的 iptables 或防火墙接口可能是个不错的起点)。

第二步是将端口:XXa设置为“默认”Apache 虚拟主机反向代理(使用 Apachemod_proxy模块)并将代理目标设置为对在端口上运行的 Jenkins 的(本地)引用:8080。此反向代理将允许访问 Jenkins,即使否则它将被公开阻止。您可能特别感兴趣的是Jenkins 官方 wiki 中关于在 Apache 后面运行 Jenkins 的说明

笔记

  • 您希望将反向代理设为给定端口的“默认”主机的原因是,使用 Apache 和基于名称的虚拟主机时,:XX请求 IP 时会返回此“默认”主机(通常是第一个具有端口的虚拟主机)。

  • 反向代理的端口由虚拟主机条目定义。但是,如果 Apache 和 Jenkins 在同一台服务器上运行,则此端口不能与 Jenkins 运行的端口相同(例如:8080)。

  • 不要忘记在 Apache 配置中添加适当的Listen端口指令。:XX

  • 如果您使用端口:443(SSL),则该端口的证书应包含您的 IP 作为有效名称。否则,您可能会收到证书警告。


需要明确的是,端口:XX只是一个示例/占位符,指的是您选择的任何端口。


有没有什么办法可以让我放弃连接尝试ip:80

Listen仅在 之外的端口上运行 Apache :80。但是,这将破坏:80对您网站的所有正常端口 HTTP 访问(即,如果用户未https://在其浏览器中明确输入或使用明确https://链接访问,他们将无法连接)。

作为一种折衷方案,您可以使用上面相同的技术(在端口上使用“默认”主机:80)将请求重定向(而不是代理)到您的主站点或其他地方(例如https://www.google.com)。

相关内容