在Linux Ubuntu上保护SSH

我如何保护SSH访问多个用户运行Ubuntu K的Linux机器?

这台服务器将为一个Web应用程序,但我不知道如何评估工具来执行此任务。 过去我已经尝试了一些工具,但不知道它们是如何叠加在一起的。 我如何评估我的SSH安全以及我将用于执行该安全措施的工具和实用程序?

你为了安全考虑了什么目标? 你是谁保护这个?

广泛的范围,使用iptables防火墙端口22,通过专门允许你想要的IP,然后阻止所有其他的IP。

您还可以指定用户是否可以使用密码login,或者是否需要证书,如果您怀疑有人会尝试打入他人的帐户,这可能是一个好主意。

但是具体来说,我们必须知道你在做什么。

编辑

好的,考虑到你在下面的评论中说了什么,你想防止未经授权的访问机器。 第二部分,确保你的用户不做任何坏事,超出了这个特定问题的范围,但也是一个值得的话题。 广泛,但值得问。

您需要编辑的主文件是/ etc / ssh / sshd_config,并且在每次更改configuration后,都需要运行/etc/init.d/sshd restart(或者/etc/init.d/ssh,如果是debian / ubuntu系统)。 当你第一次学习如何configurationssh时,在本地控制台上login是一个好主意,因为configuration错误会中断你的访问。

步骤1:确保root无法通过sshlogin。

PermitRootLogin no 

如果您绝对必须拥有rootlogin,则可以将其设置为“无密码”,这要求连接用户出示证书并进行身份validation。

第2步:允许(或拒绝)应该(或不应该)访问的任何特定用户

有多种configuration指令可以执行此操作,例如DenyUsers,AllowUsers,DenyGroups和AllowGroups。 这些以空格分隔的用户或组列表。

其中一个很好的事情是你可以指定user @ host,所以如果你只想让Bob能够连接他的主机,你可以说

 AllowUsers [email protected] 

第3步:显式允许公钥authentication

 PubkeyAuthentication yes 

这是默认的,但我们要确保它的生效,因为我们要禁用用户input密码的能力…

第4步:禁用密码authentication

密码可能会被窃取,偷听或从键盘下方的便笺中复制。 证书很难做到。 确保人们不能这样使用密码:

 PasswordAuthentication no 

第5步:确保客户使用现代协议

 Protocol 2 

OpenSSH支持2个协议,创造性地称为“1”和“2”。 “1”是旧的,允许像DESencryption和其他不安全的东西。

你将不得不让你的用户腻子证书才能连接。 最简单的方法是使用PuttyGEN,它可以在Putty网站上find( http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html )。

希望能帮助到你!

你可以尝试强制使用ssh密钥或者引入一个硬性(比如yubikey)将ssh从22端口移开来帮助对付脚本小子,但是肯定不会把你作为一个受害者的目标。

最上面的海报说,有一个名为“Denyhosts”的脚本,它将拒绝访问三次严重validation的任何内容,或者,对于更多的IP Tables方式来做同样的事情:

http://dwm.me.uk/articles/2008/mitigating-ssh-attacks

除了所有@MattSimmons在他的优秀答案中的build议之外,我会说,不要自己pipe理iptables,你可能要考虑使用:

fwknop – 单包授权和端口敲击 :

fwknop代表“FireWall KNock OPerator”,并实现称为单包授权(SPA)的授权scheme。 这种授权方法基于一个默认丢包filter(fwknop支持Linux系统上的iptables和FreeBSD和Mac OS X系统上的ipfw)和libpcap。 SPA本质上是下一代的港口敲门声。

那样的话,你就不必为fail2ban或者其他的ssh黑名单工具而烦恼了。 相反,你可以避免让任何人甚至连接到你的SSH端口,而不先做SPA。

要了解有关保护Linux的更多信息,请参阅NSA指南:

红帽企业Linux 5安全configuration指南

它在SSH上有一些很好的部分,强制密码长度等。

你可以采取不同的行动,如安装拒绝主机。 这将阻止三次尝试失败后的一个IP地址的SSH。 被阻止的IP地址将在/ets/hosts.deny文件中列出,您可以使用/etc/hosts.allow手动白名单

也让知道useraccounts只ssh到主机。 你可以通过使用pam.d模块来做到这一点。 您可以将规则添加到/etc/pam.d/sshd文件中,并且/ root / allow-users文件包含那些授权给ssh的用户列表。

auth需要pam_listfile.so item = user sense =允许file = / root / allow-users onerr = fail