SSH服务的安全调优设置
SSH服务作为管理和维护Linux服务器的最常用远程连接方式,也是生产环境中,安全加固最经常检测的项目。因其一些默认配置存在一些安全的隐患,同时ssh也是入侵的一个重要的途径。故基本上,每台暴露在外网的服务器,都会在ssh服务的配置上做一些调整和优化,以此来提高自身的安全性。下面介绍几个常用的设置:
修改ssh服务的端口号
SSH服务默认的端口号是22,这个基本上是所有知道ssh服务的使用者都知道的公共知识。在很多企业中,对自己的服务器安全扫描中,22被列为高危端口,都是强制需要进行修改的,一些云服务器的供应商,也是经常提示用户需要修改ssh的默认端口。虽然使用Nmap可以扫描出指定的服务器的端口,但是,修改端口可以在一定程度上增加攻击者的工作量,使得一些漫无目的的攻击者暂时放弃对该服务器的兴趣。
要修改SSH服务的端口,只需修改ssh的配置文件中的Port项,然后重启服务即可,ssh的配置文件存放在/etc/ssh目录中,这个目录存放了ssh服务的全部配置内容,对应服务器端的配置是sshd_config这个文件。完整的路径是/etc/ssh/sshd_config。
- 用编辑器打开sshd_config文件:
nano /etc/ssh/sshd_config - 找到
Port这个配置项这个配置项默认状态是处于注释状态的
- 去掉该配置项前面的#号,后面的22修改为自己想要的端口号,注意不要占用其他支持使用的服务的端口和知名软件在使用的端口。如这里就演示修改为10022这个端口。

- 修改完成后,保存并退出编辑,然后使用命令
systemctl restart sshd重新启动ssh服务后,即可使用新的端口进行登录,同时22端口也失效了
使用SSH密钥进行登录
使用SSH密钥连接登录到服务器是一个安全登录服务器的方法及习惯。使用SSH密钥进行登录的时候,不用输入登录的密码,同时可用将ssh的密码登录模式关闭,有效的阻挡ssh的密码爆破攻击。
要使用ssh密钥登录,首先需要生成ssh密钥,密钥分为公钥和私钥。其中公钥在服务器上使用,而私钥则是下载到需要连接服务器的电脑上,通过软件进行连接时根据提示使用该私钥即可。
使用ssh-keygen命令可以生成ssh的密钥对,过程需要需要确认密钥的保存路径,加密的算法等信息。一般情况下,可以直接按enter键使用默认值,当然如果使用自己的自定值,安全性更高。因为这里演示的是在虚拟机里面,所以就直接使用了默认值。

默认参数生成的密钥被保存在用户的home目录中,一个叫作.ssh的隐藏文件夹中,id_rsa为私钥,id_rsa.pub为公钥。

密钥生成后,还需要一个安装和修改权限的动作
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
chmod 700 ~/.ssh/
配置文件的配置,编辑/etc/ssh/sshd_config文件,修改和添加下面的内容
RSAAuthentication yes
PubkeyAuthentication yes
然后重启ssh的服务即可
注意:在确定密钥登录成功之前,先不要禁用密码登陆,等验证并确认密钥登录密钥问题后,再禁用。 禁用密码登陆的操作为,找到
#PasswordAuthentication yes将其修改为PasswordAuthentication no记得修改完也是需要重启ssh服务。
禁用root用户ssh登录
正常情况下是建议使用一个具有管理员权限的新用户进行远程登录,关闭root用户的远程登录作为一种安全策略。root用户拥有的权限实在是太大,一旦被入侵者破解并登陆成功,危害极大。
创建一个具有管理员权限的用户可以使用以下的步骤:
useradd -m 用户名
passwd 用户名
usermod -aG sudo 用户名
这样就创建完并提权为一个管理员权限的用户。
其实,服务器在安装的过程中,有提示新建一个用户,这个步骤添加的用户,就是一个用管理员权限的用户。而云服务器提供的镜像安装,一般都跳过了这个步骤,直接给你root用户,你自己就可以通过上面的步骤禁止root的远程登录,使用新创建的用户进行登录。
阻止root用户的登陆设置就是在/etc/ssh/sshd_config文件中找到#PermitRootLogin prohibit-password修改为PermitRootLogin no。
禁止空密码的用户登录和限制密码错误的次数
默认情况下,ssh的远程连接是允许空密码的用户直接在输入密码的阶段输入enter键直接登陆。也允许用户在忘记密码的情况下多次输入密码尝试登录。多次尝试登录的配置,就为攻击者的暴力破解提供了有乘之机。修改错误登陆的尝试次数,可以在一定的时间内阻止攻击者无限制的尝试,并在这段时间内采取一些措施来禁止攻击者继续这种行为。
禁止空密码用户登陆在新版本的ssh服务当中,默认是被禁止的。如果查看/etc/ssh/sshd_config文件发现PermitEmptyPasswords yes就表示空密码登陆的功能是开启的,修改为#PermitEmptyPasswords no将其关闭即可。
控制错误尝试次数是MaxAuthTries这个配置项,默认值是6,建议将这个数值下调到3次左右。
使用最新版本的SSH服务和只开启ssh2协议
关于ssh的升级就不再这里做详细的讲解,攻击者都会关注到ssh服务的bug和漏洞的信息,通常Linux安装完成后的ssh版本都不是最新版本的。就算是使用软件仓库安装的也未必是新版本的。新版本修复了很多已知的BUG,可以有效的抑制攻击者的大部分已知针对远程连接的攻击。
ssh服务的默认配置中是没有指定ssh连接的协议类型,建议在配置文件中添加一个指定协议版本的配置项Ptotocol 2以加固ssh的服务只提供ssh2的服务。提高ssh连接的安全性。