SSH 隧道避免暴露管理控制台

SSH 隧道避免暴露管理控制台

我正在运行 Lucee Server,这是一个冷聚变服务器引擎,在我的情况下它在 Apache 上的 Tomcat 上运行。

我正在研究通过各种方式来强化它,并且遇到了有关此处描述的 SSH 隧道方法的问题:https://docs.lucee.org/guides/deploying-lucee-server-apps/lockdown-guide.html#restricted-access-plus-ssh-tunnelling

问题是,我认为有关如何进行 SSH 隧道的描述并不准确或完整。我花了很多时间查看 SSH 文档以及其他一些 Stack Exchange 问题(https://superuser.com/q/588591/504387https://superuser.com/q/237977/504387),但仍然无法按照该指南或任何其他方式使 SSH 隧道正常工作。


当前设置,我在 server.example.com 上运行 lucee,监听端口 8888。在同一服务器上运行的 Apache 监听端口 443,并配置为将所有请求代理到端口 8888 上的 127.0.0.1(即转发到 lucee)。但它配置为拒绝对 /lucee 的请求,如上述文档所述。

这意味着 Lucee 管理控制台只能通过端口 8888 直接访问,而不能通过端口 443 访问。防火墙规则(iptables)设置为仅允许来自公司内部网络的端口 8888 上的传入流量,这样我们可以访问 lucee 控制台,但外界则不能。

可能没问题,但我试图看看我是否能让隧道方法按所述工作。如果隧道可以工作,我们可以放弃 iptables 允许规则,完全阻止端口 8888(环回除外),或者重新配置 lucee 以仅绑定到 127.0.0.1。


SSH 位于 server.example.com 上的非标准端口上,我们假设它是 3300。

我想要做的是在笔记本电脑上运行一个 SSH 命令,它将:

  1. 使用我现有的 ssh 配置和密钥将我连接到 server.example.com(其中 sshd 正在监听端口 3300),
  2. 绑定到我的笔记本电脑上的本地主机上的任何端口,比如说 60001,
  3. 从 server.example.com 的远程端依次连接到 127.0.0.1:8888,以便流量可以传递到 lucee。

最终结果应该是我可以访问http://127.0.0.1:60001/lucee/admin/server.cfm在我的笔记本电脑上,它将由在 server.example.com 上运行并监听该服务器上绑定到 127.0.0.1 的端口 8888 的 lucee 接收。

我怎样才能做到这一点?

答案1

您应该仅将 Lucee Server 绑定到,localhost因为它在端口上不提供 TLS 8888。然后,您有两个选项可以安全地访问管理路径。

SSH 隧道

SSH(1)

-L [ bind_address:]port:host:hostport

指定将port本地(客户端)主机上的给定内容转发到host远程端的给定端口。

填写您问题的参数:

ssh -L 60001:127.0.0.1:8888 [email protected] -p 3300

具有适当访问控制的 Apache 代理

由于端口上的代理443使用 TLS 加密,您根本不需要 SSH 代理,但您可以在 Apache 的配置中允许从公司网络连接到管理路径。

该文档有点过时,因为示例使用的是 Apache 2.2 语法:

<Location /lucee>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Location>

但是 Apache 2.4 上的文档访问控制告诉:

提供的AllowDeny和指令已弃用,并将在未来版本中消失。您应避免使用它们,并避免使用推荐使用它们的过时教程。Ordermod_access_compat

假设你想限制访问,/lucee仅允许 LAN192.168.22.0/24和公共 IP 198.51.100.22

<Location /lucee>
    <RequireAny>
        Require ip 192.168.22.0/24
        Require ip 198.51.100.22
    </RequireAny>
</Location>

相关内容