潜在被劫持的 SSH 会话和 SSH 最佳实践

Mar*_*n29 14 security linux unix ssh hacking

我现在有点害怕。我正在通过 SSH 连接到我最近委托的远程服务器。我正在以 root 身份执行此操作。我已经安装了 fail2ban 并且在日志中有大量被禁止的 IP。

上次登录时,我注意到我的终端非常卡顿,然后我的互联网连接中断了。当我在大约 5 分钟后重新购买它时,我重新登录到服务器并做了一个“谁”并意识到有两个 root 用户登录。我本以为如果我的连接终止了上次会话的进程停在服务器上?

当我第一次断开连接时,连接以“写入失败:管道损坏”结束。我用另一个 root 终止了 bash 会话。我不太了解 ssh 安全性,但是会话会被劫持吗?有没有办法检查这个?我需要继续通过 ssh 登录,我应该采取什么预防措施?如果我以某种方式通过代理访问我的服务器(就像中间人攻击一样),他们会劫持我的 ssh 会话吗?

Spo*_*ler 41

root 登录名可能是曾经是你的悬空 shell 会话。您的服务器也可能因为所有尝试登录而受到 dDOS 攻击。

锁定SSH。不允许 root 登录,那些试图暴力破解这台机器的请求将立即失败(占用更少的资源)。以普通用户身份登录并通过 提升权限sudo,无论如何您都应该这样做。还将 SSH 登录限制为客户端 IP 列表,以便令人讨厌的机器甚至无法尝试登录。

使用 SSH 密钥代替密码进行用户登录。它们更容易处理,并且可以通过密码保护自己,以防您不小心将私钥放在错误的地方(让您有时间替换它们并使旧的无效)。正如评论中提到的@EEAA,如果您希望限制客户端仅使用密钥而不是密码和密钥,您还必须禁用基于密码的身份验证。

如果蒙古部落继续攻击你的城墙,也许将 SSH 移动到不同的高端口(低于 1024,正如@AustinBurke 指出的那样 - 以便使用特权端口)而不是 22。如果这样,这将减少该端口的流量对你来说是个问题(而且大多数机器人都不是很优雅,所以他们只会尝试 22)。它不会阻止尝试端口 22 甚至扫描您的机器以查看正在侦听 SSH 的端口,并且在大多数情况下是不必要的不​​便。但它可能会有所帮助。

其他人可能能够提供更多提示,但这些是面向公众的 SSH 服务器的非常通用的安全措施。

  • **使用**键是不够的。还必须*禁用*密码身份验证。 (22认同)
  • @marcelm “_大量禁止的 IP 日志_”是否暗示这可能正在发生? (4认同)
  • @tripehound 不,不是。它没有说明消耗的相对资源。 (4认同)
  • 虽然这在这个宇宙中是可行的,但 ssh 非常安全。您当然可以在传输中获取该流量并将其存储在加密状态,但使用 Diffie-Hellman 密钥交换来建立加密通道。如果您同时拥有用于身份验证的私有和公共 ssh 密钥,则甚至不可能破解此问题,因为在会话期间从未传达过流密钥。等到有人破解那条溪流时,我们都会死。 (4认同)
  • 不过,它_是_暗示了这种效果,@marcelm。 (3认同)
  • @MarMan29 执行蛮力攻击的机器人似乎没有经过深思熟虑的设计。他们倾向于为每个他们想要尝试的密码连接到服务器,即使服务器完全禁用了对密码身份验证的支持。但是禁用密码验证仍然有帮助。根据我的经验,当您禁用密码身份验证时,它确实减少了服务器上的负载。与服务器验证密码并告诉客户端它不正确相比,服务器告诉客户端密码身份验证不被允许的工作要少得多。 (3认同)
  • 对于备用 SSH 端口,我建议使用 _under_ 1024 端口,因为在技术上高于它的任何端口都被视为非特权端口。在您的服务器受到威胁的情况下,攻击者可以等待 SSH 重新启动并在 sshd 之前将自己绑定到端口,以获得 root 或其他凭据。 (3认同)
  • _“您的服务器也可能因为所有尝试登录而遭受 dDOS 攻击。”_ - 没有理由根据所提供的信息得出结论。特别是:悬垂的服务器端会话表示网络问题,例如数据包丢失,而不是 CPU 限制或连接计数问题,因为过多的 SSH 登录尝试会导致。 (2认同)