ssh 到路由器后面的机器的最安全方法是什么?

信息安全 SSH 港口 路由器
2021-08-26 04:53:46

我正在考虑将端口 22 转发到路由器后面机器上的 22,但它安全吗?任何人都可以尝试在端口 22 上连接到我的公共 IP,然后无限期地尝试猜测用户和密码。

似乎不是一个好主意。有什么建议?它是如何正确完成的?

3个回答

那里有许多自动机器人会尝试攻击 SSH 服务器,但如果您采取一些预防措施,您实际上可以使 SSH 非常安全。

  1. 完全禁用基于密码的登录,并使公钥/私钥对成为登录的唯一方式。此页面提供有关如何禁用密码登录的信息,本页将向您展示如何设置密钥对。暴力破解密钥基本上是不可能的,因此仅此一步将大大提高 SSH 安全性。唯一的缺点是您必须将密钥复制到您需要登录的每台计算机上。
  2. 设置速率限制 - 在一定次数的错误密码尝试后阻止 IP 地址。有很多方法可以做到这一点;我使用fail2ban,但如果你搜索谷歌,你会发现很多替代品。这很重要,因为如果您不阻止 IP,您将让机器人连续数小时猜测密码。当然,如果您使用基于密钥的登录,它们可能永远不会成功,但它们仍然会通过生成大量垃圾 SSH 流量(并且还会填满您的日志)来消耗大量带宽。
  3. 如果您知道您只会从某些 IP 地址访问此服务器,则可以只允许这些 IP 地址并阻止所有其他 IP 地址
  4. 禁用以 root 身份登录- 绝大多数机器人将尝试以 root 用户名为目标。
  5. 不时检查登录日志是否有未经授权的访问。

如果您采取这些步骤,您应该准备好打开 SSH 到 Internet。只要您保持您的密钥安全并且您的服务器包是最新的,您就不应该在 SSH 安全方面遇到任何问题。

编辑:如果您有两台机器需要访问但只有一个公共 IP 地址,您有两种选择:您可以将端口转发设置到一台机器,如果您需要访问第二台机器,您将登录到第一台机器一个和 SSH 从第一个到第二个的私有 IP 地址。

您的另一个选择是将第二台机器的 SSH 端口从 22 更改为其他值(例如 2222)。然后您可以将端口 22 转发到第一台机器,将 2222 端口转发到第二台机器。如果您需要访问第二台机器,那么您需要在 SSH 客户端中指定端口 2222。(旁注:如果需要,您可以在两台机器上使用非标准端口来减少机器人流量。)

如果你是唯一一个访问机器的人,我发现通过为 ssh 选择一个非标准端口来保持你的 ssh 日志干净是有帮助的。

是的,如果攻击者使用僵尸网络进行简单的端口扫描,这很容易绕过,因此不会增加针对严重攻击者的安全性(尽管它会阻止您成为最容易实现的目标)。拥有强大的 ssh 密码短语/密钥和其他最佳实践(例如,禁用 root 登录)仍然是有意义的。但是在我的 VPS 上,我发现它可以将我在日志中看到的来自随机 IP 地址的失败登录攻击从过去三个月的每天数千次尝试减少到​​零。

基本上只需选择一个未用于其他目的的端口(我倾向于通过检查/etc/services以确保您没有使用知名服务来选择未用于任何用途的端口 - 我也选择端口在小于 1024 的系统端口范围内),例如 501。然后只需在路由器中进行端口转发,即可将端口 501 上的传入 TCP 请求转发到本地计算机上的端口 22。

然后,您与ssh -p 501 $your_routers_ip外界联系。如果你设置一个.ssh/config文件,你可以把端口放在那里:

 host example
      Hostname example.com  # or ip address
      User jimbob
      Port 501
      ForwardAgent no
      ForwardX11 no

然后就可以了ssh example,它会自动转到正确的端口/正确的用户名(并禁用 X11/Agent 转发)。

我有一个本地家庭服务器,担心将端口 22 暴露给互联网。我采用这种方法安装 lokinet mixnet 服务并为其分配一个地址。您需要在笔记本电脑上安装 lokinet 客户端,以便它可以解析 .loki 域。此处指南:https ://docs.loki.network/Lokinet/Guides/ReverseSSHGuide/