我正在运行 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/504387,https://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 命令,它将:
- 使用我现有的 ssh 配置和密钥将我连接到 server.example.com(其中 sshd 正在监听端口 3300),
- 绑定到我的笔记本电脑上的本地主机上的任何端口,比如说 60001,
- 从 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 上的文档访问控制告诉:
提供的
Allow
、Deny
和指令已弃用,并将在未来版本中消失。您应避免使用它们,并避免使用推荐使用它们的过时教程。Order
mod_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>