我在家里运行一个 Web/邮件服务器,它可以通过标准端口公开访问。我在非标准端口上运行 SSH,通常可以从外部连接到它,但我的日常工作有一个防火墙,阻止我通过该备用端口上的 SSH 进行连接,即使工作中的端口扫描显示该端口是开放的。防火墙可以识别出这是 SSH 流量,因此会阻止它。
我一直在寻找一些软件,让我在现有服务器上创建一个网页,该网页会弹出一个窗口,让我有一个 ssh 会话来与 Web 服务器本身通信。我找到了一些 Web SSH 包,但它们提供了一个监听新端口的新服务,我需要从现有 Web 服务器提供这项服务,而无需使用新端口,因此它必须与 Apache 配合良好。我只需要它与一个特定系统通信,在本例中是 localhost。
答案1
我日常的工作有防火墙
根据你的工作场所,情况可能从“只要与 IT 员工沟通即可获得豁免”一直到“试图绕过防火墙策略会导致你被解雇”。请谨慎行事。
特别是如果它是一个通过内容检测流量的 DPI 防火墙,我倾向于后者。
这使得我无法通过该备用端口上的 SSH 进行连接,尽管工作中的端口扫描显示该端口是开放的。防火墙可以识别出这是 SSH 流量,因此会阻止它。
直接将 SSH 流量放入 TLS 中可能就足够了;有几种方法可以做到这一点。例如,stunnel
(原始 TLS)或使用 Apache 作为 HTTP“CONNECT”代理(HTTPS 切换到原始 TLS)。前者仍然使用单独的端口;后者可以在与您的 Web 虚拟主机相同的 443 上运行。
对于第一个示例,请在服务器上运行 stunnel 以设置 TLS 侦听器,该侦听器代理与本地非 TLS 服务 (sshd) 的连接;socat 也可能有效。在客户端,要么设置为ProxyCommand
连接到 TLS 服务器的命令 (socat、gnutls-cli、openssl s_client),要么运行具有相反配置的类似 stunnel 实例。
对于第二个示例,将 Apache httpd 配置为“正向”代理(“常规”类型的 HTTP 代理,不要与下面的反向代理混淆),接受对 localhost 的 CONNECT 请求(注意不要将您的服务器设置为“开放代理”;如果不确定,请启用身份验证)。在客户端,proxytunnel
可以用作 ProxyCommand。
我找到了一些 Web SSH 包,但它们提供了在新端口上监听的新服务,我需要从现有的 Web 服务器提供这项服务,而无需使用新端口
这是运行非 PHO Web 应用程序的非常常见的方式。在自己的端口上拥有单独的服务允许应用服务在 HTTP 请求之间保持持久状态(更重要的是,持久 TCP 连接)。
部署此类 Web 应用程序的通常方式是将它们置于 HTTP 反向代理(和/或负载均衡器)之后,例如 Nginx、Traefik 或 Apache httpd。
在 Apache httpd 中,您可以使用ProxyPass
(几种不同的方式)将单个 vhost 或该 vhost 内的特定 URL 路由到您的 webapp 服务;Apache 将在其常用端口上接受请求,并将它们代理到在 localhost:23456 或其他地方运行的应用程序。