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

Joh*_*hir 16 security ssh

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

一件事可能是要求用户发送他们的密钥并输入密码。这有点难用谷歌搜索,因为关于“ssh 密钥密码”的一切都是关于没有密码的 ssh。:-)

我一直想玩的一个方案是要求传入的连接仅来自 dyndns ip 地址的白名单。我知道一些安全负责人一想到这个想法就会呕吐,但事实是,利用一个盒子会增加非常显着的复杂性。

你怎么认为?外面还有什么?

小智 8

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

如果您担心安全性,请考虑在本论坛中提及万亿次的一些建议:

  • 禁用 root 的 ssh 登录
  • 仅允许从定义的 ip 地址(iptables、hosts.allow、...)访问 ssh
  • 将 ssh 端口移动到另一个端口(比安全性更模糊,但它有效)
  • 监控外部登录尝试并做出相应反应
  • 使您的系统保持最新

等等等等。

更新:请参阅此处的答案,了解如何使用 OpenSSH 服务器同时要求公钥和本地系统密码。

  • 这是不一样的。如果您只需要密钥,则服务器无法对密钥实施任何密码强度策略。粗心的用户可能会在客户端上放置一个未加密的私钥,如果密钥被盗,您的服务器就会容易受到攻击。 (12认同)

小智 6

我发现一个有趣的想法是端口敲门- 基本上,为了建立 ssh 连接,您首先必须探测一系列其他端口,然后 ssh 服务器将确认连接请求。如果未使用正确的端口顺序,则没有响应,因此实际上看起来没有 ssh 服务器在运行。端口顺序是可定制的,可以与您的目标用户共享;其他人实际上将无法连接。

我自己还没有尝试过,但据我所知(实际上并不多),开销可以忽略不计,并且极大地降低了您的可见性配置文件。