Linux服务器中SSH安全加固

时间:2020-03-05 15:29:45  来源:igfitidea点击:

SSH是访问远程服务器的最常用方法之一。

SSH也是导致Linux服务器受损的最常见原因之一。

在本文中,将介绍一些实用的方法来提高SSH安全性,从而保护Linux服务器的安全。

在Linux服务器上保护SSH的提示

不要盲目遵循此处提到的所有SSH强化技巧。
阅读所有内容,然后查看哪些内容符合需求。
还请记住,某些技巧可能与其他技巧不兼容。

例如,如果禁用基于密码的SSH登录,则无需使用Fail2Ban这种解决方案。

如果我们了解SSH基础知识,则知道SSH配置文件位于/etc/ssh/sshd_config中。

此处提到的大多数SSH强化技巧都将要求我们编辑此配置文件。
这就是为什么备份原始文件是一个好主意的原因。
如果我们对SSH配置文件进行了任何更改,则还需要重新启动SSH服务。

让我们看看我们可以采取哪些步骤来保护SSH服务器的安全。

1.禁用空密码

是的。
在Linux中可能有没有任何密码的用户帐户。
如果这些用户尝试使用SSH,那么他们也不需要密码即可通过SSH访问服务器。

那是安全隐患。
我们应该禁止使用空密码。
在/etc/ssh/sshd_config文件中,确保将PermitEmptyPasswords选项设置为no。

PermitEmptyPasswords no

2.更改默认的SSH端口

默认的SSH端口为22,大多数攻击脚本检查仅围绕该端口进行。
更改默认的SSH端口应该添加一个添加的安全层,因为攻击的数量(来自端口22)可能会减少。

在配置文件中搜索端口信息,并将其更改为其他内容:

Port 2345

3.禁用通过SSH的root登录

老实说,应该禁止将服务器用作根用户本身。
这是有风险的,并且没有审核线索。
像sudo这样的机制仅出于这个原因存在。

如果我们在系统上添加了sudo用户,则应使用该sudo用户通过SSH(而不是root)通过SSH访问服务器。

我们可以通过修改PermitRootLogin选项并将其设置为no来禁用root登录:

PermitRootLogin no

4.禁用ssh协议1

这是如果我们使用的是较旧的Linux发行版。
某些较旧的SSH版本可能仍具有SSH协议1.
该协议具有已知漏洞,不得使用。

较新的SSH版本会自动启用SSH协议2,但仔细检查它不会有任何危害。

Protocol 2

5.配置空闲超时间隔

空闲超时间隔是SSH连接可以保持活动状态而不进行任何活动的时间。
这样的空闲会话也存在安全风险。
配置空闲超时间隔是一个好主意。

超时间隔以秒为单位,默认情况下为0。
我们可以将其更改为300,以保持5分钟的超时间隔。

ClientAliveInterval 300

在此间隔之后,SSH服务器将向客户端发送一条实时消息。
如果没有响应,则连接将被关闭,最终用户将被注销。

我们还可以控制断开连接前发送活动消息的次数:

ClientAliveCountMax 2

6.仅允许SSH访问选定的用户

当涉及到安全性时,我们应该遵循最小特权原则。
不需要时不授予权利。

Linux系统上可能有多个用户。

我们是否需要允许SSH访问所有这些端口?
也许不是。

这里的一种方法是允许SSH访问选定的几个用户,从而限制所有其他用户。

AllowUsers User1 User2

我们也可以将选定的用户添加到新组中,并且仅允许该组访问SSH。

AllowGroups ssh_group

我们也可以使用DenyUsers和DenyGroups拒绝对某些用户和组的SSH访问。

7.禁用X11转发

X11或者X显示服务器是图形环境的基本框架。

X11转发允许我们通过SSH使用GUI应用程序。

基本上,客户端在服务器上运行GUI应用程序,但是由于X11转发,在计算机之间打开了一个通道,并且GUI应用程序显示在客户端计算机上。

X11协议不是面向安全的。
如果不需要,则应禁用SSH中的X11转发。

X11Forwarding no

8.自动缓解暴力攻击

要阻止SSH暴力破解攻击,可以使用Fail2Ban这样的安全工具。

Fail2Ban检查来自不同IP地址的登录失败尝试。
如果这些错误尝试在设定的时间间隔内超过阈值,则会在特定时间段内禁止IP访问SSH。

我们可以根据自己的喜好和要求配置所有这些参数。
我已经编写了有关使用Fail2Ban的详细入门教程,我们应该阅读该教程。

9.禁用基于密码的SSH登录

无论我们尝试多少,都将始终在Linux服务器上看到通过SSH进行的错误登录尝试。

攻击者很聪明,他们使用的脚本通常会处理Fail2Ban之类的工具的默认设置。

要摆脱持续的暴力攻击,我们只能选择基于密钥的SSH登录。

通过这种方法,我们可以将远程客户端系统的公共密钥添加到SSH服务器上的已知密钥列表中。

这样,那些客户端计算机无需输入用户帐户密码即可访问SSH。

进行此设置后,可以禁用基于密码的SSH登录。
现在,只有具有指定SSH密钥的客户端计算机才能通过SSH访问服务器。

在采用这种方法之前,请确保已将自己的公钥添加到服务器并且该公钥有效。
否则,我们将被锁定在外,并且可能会失去对远程服务器的访问权限,特别是如果我们使用的是Linode这样的云服务器,而我们对该服务器没有物理访问权限。

阅读此详细教程,以了解如何禁用基于密码的SSH身份验证。

10.使用SSH进行两因素身份验证

为了使SSH安全性更上一层楼,我们还可以启用两因素身份验证。
通过这种方法,我们会在手机,电子邮件或者第三方取消认知应用程序上收到一次性密码。

我们可以在此处阅读有关使用SSH设置两因素身份验证的信息。

总结

我们可以使用以下命令查看SSH服务器的所有参数:

sshd -T

这样,我们可以轻松查看是否需要更改任何参数来增强SSH服务器的安全性。

我们还应该保持SSH安装和系统更新。