如何提高 ssh 安全性?我可以同时要求密钥和密码吗?

如何提高 ssh 安全性?我可以同时要求密钥和密码吗?

我有一个小型服务器网络,我想提高总体安全性。我没有足够的时间/金钱/偏执来设置 VPN——有什么基本方法可以提高系统的安全性?

可以做的一件事是要求用户发送密钥并输入密码。这在 Google 上有点难找到,因为有关“ssh 密钥密码”的所有内容都与无密码 ssh 有关。:-)

我一直想尝试的一个方案是要求传入连接仅来自 dyndns ip 地址的白名单。我知道一些安全主管一想到这个想法就会感到恶心,但事实上,这会增加利用盒子的复杂性。

您觉得怎么样?还有什么?

答案1

使用密码和密钥登录与“仅使用密钥”相同。在创建密钥期间,系统会要求您输入密码。如果您将其留空,则不会要求您输入密码。如果您填写了密码,则每次登录时都会要求您输入密码。

如果您担心安全问题,请考虑本论坛中提到过数万亿次的这些建议:

  • 禁用 root 的 ssh 登录
  • 仅允许从定义的 IP 地址进行 ssh 访问(iptables、hosts.allow ……)
  • 将 ssh 端口移至另一个端口(更隐蔽而不是更安全,但有效)
  • 监控外部登录尝试并做出相应反应
  • 保持系统更新

等等等等。

更新:请参阅答案在这里了解如何使用 OpenSSH 服务器来要求输入公钥和本地系统密码。

答案2

我发现一个有趣的想法是端口敲击- 基本上,为了建立 ssh 连接,您必须先探测其他端口序列,然后 ssh 服务器才会确认连接请求。如果没有使用正确的端口序列,则不会有任何响应,因此实际上看起来好像没有 ssh 服务器正在运行。端口序列是可自定义的,并且可以与您的目标用户共享;其他所有人都无法连接。

我自己还没有尝试过,但是从我听到的(实际上并不多)来看,开销可以忽略不计,但却极大地降低了你的可见性。

答案3

与直接在 SSH 中启用相关的补丁和大量相关讨论:

通过使用密码验证脚本和ForceCommand配置选项,无需修改即可完成此操作。

最后,尽管没有现有的模块,但如果您将公钥认证移至 PAM,那么您将能够要求两个步骤都通过,PAM 才认为认证成功。

答案4

您还可以使用一次性密码以提高安全性。如果用户先前生成了下一个密码,这将允许用户从可能装有键盘记录器的不安全终端登录。此外,甚至可以在您随身携带的旧款 Java MIDP 手机上安装密码生成器。

相关内容