我想使用 SSH 密钥加密和验证运行 Jenkins 的服务器上的 8078 端口(我会根据需要传递公钥或私钥),并阻止除 SSH 之外的任何设备访问 8078。目前只有少数开发人员使用该机器。
问题:A/ 我是否需要防火墙来完成此操作以阻止非 SSH 访问 8078?B/ 当重定向到端口 8078 时,通过端口 22 解密的请求会被防火墙看到吗?B/ 当 SSH 服务器将端口 22 上的未加密请求重定向到端口 8078 时,防火墙将看到什么 IP/端口?C/ 对于非 Web 服务器应用程序的加密和身份验证,这是否是一个好的长期解决方案?D/ VPN 解决方案是否更适合此目的?
答案1
A) 一旦 SSH 服务器在服务器上侦听 8078,其他任何应用程序都无法侦听,包括 Jenkins。B) 我感到困惑:SSH 不会重定向未加密的请求。C) 我假设您要执行以下操作:
- 将 Jenkins 配置为在端口 8078 上运行,不加密,但在本地主机 IP 127.0.0.1 上运行。无需防火墙,因为外部任何人都无法连接该 IP。仅当无法将 Jenkins 配置为绑定到 127.0.0.1 时,才需要防火墙。
- 创建一个具有自定义 shell 的特殊用户帐户,该帐户充当 127.0.0.1:8078 的 telnet 客户端。您可以使用非常简单的 bash 脚本来执行此操作。授权所有公钥使用该帐户。
- 像往常一样使用特殊用户连接到端口 22 的 SSH。该连接将打开特殊的 telnet shell。
脚本看起来如下:
#! /bin/bash
telnet localhost 8078
保存在 /usr/local/bin/jenkins-ssh 中并
chmod a+x /usr/local/bin/jenkins-ssh
useradd jenkins-ssh
passwd jenkins-ssh (or don't, use pubkey only)
chsh jenkins-ssh -s /usr/local/bin/jenkins-ssh
D) VPN 解决方案的优势在于它可以用于多个服务。但您必须将服务绑定到内部 IP,而该 IP 可能仅在启动 VPN 服务后才可用,从而使启动顺序变得复杂。