如何增加SSH的安全性?我可以同时要求输入密钥和密码吗?


16

我的服务器网络很小,我想提高总体安全性。我没有足够的时间/金钱/偏执狂来建立VPN-我可以提高系统安全性的基本方法是什么?

一件事可能是要求用户既发送密钥又输入密码。Google很难做到这一点,因为有关“ ssh key password”的所有内容都是关于没有密码的sshing。:-)

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

你怎么看?还有什么呢?


您还可以使用AllowUsers或DenyUsers指令来限制允许连接的用户列表。有关此帖子的更多详细信息。
弗雷德

Answers:


8

使用密码和密钥的登录与“仅使用密钥”相同。在密钥创建过程中,要求您输入密码。如果将其保留为空白,则不会要求您输入密码。如果您填写了一些密码,则每次登录时都会要求您输入密码。

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

  • 禁用root的ssh登录
  • 仅允许通过已定义的ip地址(iptables,hosts.allow,...)进行ssh访问
  • 将ssh端口移到另一个端口(比安全性更晦涩,但是可以)
  • 监视外部登录尝试并做出相应反应
  • 保持系统最新

等等

更新:有关如何在OpenSSH服务器上同时要求公共密钥和本地系统密码的信息,请参阅此处的答案


感谢您的所有提示,我们将调查这些提示。如果同时需要密钥和密码,那么如果利用者找出了密码(例如,如果用户在不安全的其他地方使用了该密码),那么他们就不能没有密钥进入,并且如果利用者从用户的机器上窃取了密钥,他们不知道密码就无法进入…对吗?
约翰·巴希尔

12
这是不一样的。如果仅需要密钥,则服务器无法对密钥强制执行任何密码强度策略。粗心的用户可能会在客户端上摆放未经加密的私钥,如果密钥被盗,则会使服务器容易受到攻击。
200_success

mkudlacek-我以前不了解hosts.allow-谷歌搜索,似乎我的dyndns白名单想法毕竟不是那么愚蠢,我想我会尝试一下。
约翰·巴希尔

1
200_success-是否可以同时要求密钥和密码?
约翰·巴希尔

我还使用DenyHosts应用程序来帮助锁定那些不断尝试进入并失败的人。黑名单的人..的一个不错的小积极主动的自动化的方式
詹姆斯牛逼斯内尔

6

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

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


如果您只是想“提高常规安全性”,我会这样做,但您可能应该尝试解决特定的安全性问题。
Stefan Thyberg

我在所有ssh进入的站点中都使用此命令,这是非常有效的恕我直言。
Sirex

这和密码长4个字符不一样吗?
约翰·巴希尔

并不是的。有65536个端口和26个字母。此外,您还具有任意长度的敲门序列,并且可以使用标准防火墙技术来限制重试。它本身不是安全的,但是很高兴。
Sirex '02

那么再长8或12个字符:-D
John Bachir

3

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

也可以通过将密码验证脚本与ForceCommand配置选项结合使用而无需修改即可完成此操作。

最后,尽管没有模块可用,但如果将公钥身份验证移至PAM,则您可以要求两个步骤都通过,然后PAM才认为身份验证成功。


2

只需使用

RequiredAuthentications publickey, password

sshd_config如果你正在使用的sshd从ssh.com。此功能在OpenSSH中不可用。


RequiredAuthentications绝对是OpenSSH的非标准扩展
Hubert Kario'1

您知道哪些sshd实现支持此功能吗?
约翰·巴希尔

Tectia SSH服务器确实支持它。顺便说一句:在回复他们的评论时使用@nameOfUser,这样他们将收到有关回复的通知
Hubert Kario 2012年

:类似的功能在OpenSSH的支持作为6.2版本的serverfault.com/a/562899
索伦Løvborg

1

您也可以使用一次性密码来提高安全性。如果用户先前生成了下一个密码,这将允许用户从可能具有按键记录程序的不安全终端登录。此外,即使您始终随身携带旧版Java MIDP电话,也可以安装密码生成器。


是的,在我的个人服务器上,除密码外,我还使用Yubikey令牌。令牌生成一次性密码。两者都需要进行身份验证。另外,如果您使用SSH密钥进行身份验证,则允许绕过密码/ otp对。Yubikey价格便宜,并且有很多软件可以将其与Linux的可扩展身份验证系统Pam集成。
Martijn Heemels,2012年

1

我建议您不要运行不受IP限制的sshd,rdp或此类管理服务。实际上,我建议限制通过VPN连接的管理员对此类服务的访问。


1

关于您最初要求同时输入密钥和密码的问题,如果您正在运行RHEL或CentOS 6.3,现在可以这样做。在RHEL 6.3发布说明形容它,它的加入给你的sshd_config中的问题

RequiredAuthentications2 publickey,password

0

我非常同意3molo。OpenSSH是Linux和Unix的默认SSH服务器。我们没有理由更改它,尤其是出于安全性考虑。VPN应该是最好的解决方案,它可以加密我们的流量并提供两步密码授权。


0

不知道为什么没有人提到它,但是-您应该确保生成的密钥长于默认的1024位,而后者不再被认为是安全的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.