我将在远程位置部署一台 Linux 机器作为一种公共终端。我希望能够通过 SSH 远程访问它以进行维护,但我不想在需要访问这台机器的极少数情况下保持远程防火墙上的端口打开。我虽然有一个简单的脚本来创建一个到外部机器的反向 SSH 隧道,但我宁愿不必让用户在我需要访问它时做任何事情。有任何想法吗?
更新:我决定使用我最初的脚本计划来创建反向 ssh 隧道。虽然其他建议的解决方案(例如端口敲击)更符合我真正想要做的事情,但在这种情况下,除了引导用户完成配置之外,我没有任何配置路由器的权限。不寒而栗
我不会那么担心让端口 22 可以访问互联网,但我会采取一些措施来保护它。
首先,禁用键盘交互身份验证并移至 ssh 键。
其次,在你的远程服务器上安装类似fail2ban的东西,以阻止重复探测你机器的IP 地址。因为您已经设置了 ssh 密钥,所以授权用户应该不会出现身份验证失败。
或者,如果您可以,请采纳 WerkkreWs 的建议并在机器前配置防火墙以终止 vpn 连接,然后只允许远程服务器上的 ssh 守护程序接受来自该 vpn 的连接。
或者,如果您的防火墙无法终止 vpn 连接,您可以将 GRE 或 IPSEC 数据包转发到您的 linux 机器,并在那里终止它。
如果更改路由器完全不可能,您可能需要查看像Hamachi这样的 P2P 或 VPN 解决方案。如果您将系统设置为在启动时自动建立 VPN 连接,那么您应该能够在需要时进行连接。Hamachi 为您完成所有的防火墙协商。一个缺点是,当您需要连接时,您必须依赖 Hamachi 服务器启动并正常运行。
如果您的服务器始终处于启动状态,您可以设置autossh以便远程系统始终保持隧道打开并连接到您的服务器。一个缺点是远程系统受到威胁,攻击者将获得用于建立 ssh 会话的密钥。保持接受 ssh 连接的系统真正处于锁定状态非常重要。
以下是我的原始答案,我假设更新路由器是一种选择。
如果您的防火墙支持它,您可能想要调查的一种解决方案是端口敲击。对于某些防火墙,应该可以发送一组特殊的数据包,防火墙会注意到这些数据包,然后暂时打开防火墙的漏洞。
有许多实现方式比其他实现方式更好。有些人使用强大的密码学使没有正确密钥的人几乎不可能发送正确的敲门声。
听起来你正在寻找敲门声
您可以使用iptables在 linux 服务器本身上安装它,这样它就有点像二级防火墙。即使在前端防火墙上打开了端口 22,它也不会在服务器上打开,因此端口扫描不会看到任何打开的端口。然后,当您发送“秘密敲门”时,突然之间您就有了通往 22 端口的开放路径。
那有意义吗?
总结所有答案:
使用 ssh,但要使其更加隐蔽和安全。
为了安全:
对于默默无闻:
计划任务脚本为您的反向 ssh 隧道,或打开防火墙端口。
如果您担心 SSH 向世界开放,您可以在维护期间使用 iptables 脚本安排任务,并且只有端口可用。
查看端口敲门以打开您的 SSH 隧道。
此外,在收到太多错误请求后,运行拒绝主机以锁定人员。
这两个软件包都在标准的 Ubuntu、Fedora 和 RHEL 存储库中可用。
继续打开一个端口,让它超出正常范围。我会将其设置为 1024 上的随机端口。这样黑客甚至不太可能寻找它。
如果您需要远程访问机器,没有理由不戳防火墙上的漏洞,但很少。
但是,如果您仍然不想(或不能)打开端口,一个简单的 shell 脚本可以监控您控制的某些 Internet 可用资源并侦听启动反向隧道的命令。电子邮件帐户、IRC 频道和网页会立即成为触发设备。
当然,这比仅仅打开端口更脆弱,更不安全。但我相信你有你的理由。