SSH,是大多数类 Unix 系统默认支持的服务。它可以支持用户通过 ssh 协议远程访问服务器。它本来是非常安全的,但是有些时候,例如新手对 ssh 的配置不了解,或者粗心大意配置了弱密码,都会使这款本来应该十分安全的服务变得不堪一击。

下面我们将讲解通过配置来提升 ssh 的安全性,即使你只是初识 ssh ,也能让它变得非常安全。本文将使用 CentOS 6 ,通过下面几个配置来讲解:

  • 变更监听端口
  • 禁止 root 登录
  • 禁止使用密码登录
  • 使用防火墙保护

阅读本文,您需要会使用 vim 基本操作,查找文本、修改和保存文本文档。

变更监听端口

大多数 Linux 都是使用了 OpenSSH 来提供 ssh 服务,ssh 协议的默认端口是 tcp 22,如果我们将其变更为不同于 22 端口的其他端口,就可以防止被一些只扫描 22 端口的傻瓜肉鸡扫描到,从而从根本就禁止了 ssh 被破解。

查看 ssh 的监听端口:

[root@qiansw.com ~]# netstat -tnlp|grep sshd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      10059/sshd

要变更这个配置,我们需要使用 root 打开 ssh 的配置文件 /etc/ssh/sshd_config,修改 Port 配置,这个配置默认是 22 ,我们需要将其手动指定一个小于 65536 且不与其他服务冲突的端口,建议您选择 30000 以上的端口。

修改ssh端口.jpg

修改完成后重启 sshd , service sshd restart,然后重新查看 ssh 的监听端口:

[root@qiansw.com ~]# netstat -tnlp|grep sshd
tcp        0      0 0.0.0.0:43567                  0.0.0.0:*                   LISTEN      10293/sshd

成功,以后连接这台 Linux 服务器要使用新的端口连接,原先的 22 端口就无响应了。

禁止 root 登录

上面变更监听端口的措施,只能防止被只扫描 22 端口的傻瓜肉鸡发现,如果有黑客定向要找到你的 ssh 端口,上面的措施就不管用了,攻击者会使用端口扫描工具,扫描你系统开放的所有端口,只要逐一测试就可以发现你变更后的端口了。

下面提供一个判断是否是 ssh 端口的方法,使用 telnet 工具连接这个端口,如果发现返回文本中包含 OpenSSH ,基本就可以判断这个 sshd 的监听端口:

C:\Users\feng>telnet 10.79.8.180 22
SSH-2.0-OpenSSH_5.3

以如今的强大 CPU 计算能力来说,暴力破解很容易,如果你使用了弱密码,很可能攻击者在很短的时间就可以暴力破解出你的密码。

所以设置一个强密码是一个策略,更好的策略,则是隐藏你的默认 ssh 用户。类 Unix 系统的默认最高权限账户都是 root ,我们不仅要为 root 设置一个强密码,我们还要禁止 root 通过 ssh 登录,root 无法通过 ssh 登录,那么即使攻击者知道你的 root 密码,也无法对你的服务器造成威胁了。

禁止 root 登录,依然是要修改 sshd 的配置文件 /etc/ssh/sshd_config,找到 PermitRootLogin 项,将其配置值改为 no

禁止root登录ssh.jpg

修改完成保存后,重启 sshd 即可生效,这个配置不影响您本地通过 root 账户登录到服务器。

配置这一项以前,您一定要新建一个普通用户用来登录到服务器,从而可以使用普通用户身份执行 su 后输入 root 密码进行 root 身份登录,或者配置 sudo ,使这个普通权限用户可以以 root 身份执行一些命令。

下面是普通用户登录后切换到 root 的方法。

[user@qiansw.com root]$ su root
密码:
[root@qiansw.com ~]#

禁止使用密码登录

通过上一步骤加固以后,root 密码丢失被黑的风险就已经没有了,如果攻击者不知道您普通用户的名称,那么他就无法通过这种方式黑掉你的服务器。但是,如果您普通用户的名称被黑客获取,您仍然有被暴力破解的风险。通过下面方法,我们可以完全避免被暴力破解密码的风险。

执行下面配置变更以前,您必须能使用密钥登录,您应该先配置好使用密钥登录,否则你就无法通过 ssh 来登录到您的服务器了。本文不讲解密钥的配置,您可以参考这篇文章【Mac 使用私钥公钥验证ssh登录信息】,或者通过搜索引擎搜索更多相关文章。

修改 sshd 的配置文件 /etc/ssh/sshd_config,找到 PasswordAuthentication 项,将其值改为 no,然后重启 sshd 即可生效,至此您就无法通过密码登录了,这个配置不影响您本地通过密码登录到服务器。

使用防火墙保护

执行了上述策略以后,您还是有可能丢失你的密钥,导致服务器被黑。要彻底避免黑客通过 ssh 获取服务器的权限,我们还可以使用防火墙来保护。

具体防火墙的策略配置就不详细讲了,因为有不同品牌的防火墙,要讲也讲不完。即使您没有防火墙设备,也可以使用系统自带的 iptables 来保护您的 ssh 。

防火墙配置的基本策略为 只允许白名单 ip 访问 ssh 端口,或者直接禁止 ssh 端口对公网开放,只能通过私网 ip 访问服务器的 ssh 端口。

执行了上述策略以后,服务器 ssh 这方面的安全性就大大提高了,一般就不会被黑客从这里攻破。