>Tips
下文如果没有特别说明,均为Debian8以上版本的系统操作。
- ##常规操作
刚刚以及说过了一些常规的操作就是关闭root登录,更换ssh端口之类的。下面来说一下具体操作。
首先是关闭root登录,编辑 `/etc/ssh/sshd_config`,添加
`PermitRootLogin no`
这样就禁止了root账户登录,即使别人知道你的root密码也无法远程爆破你的服务器了。
接下来是更换ssh端口,22号端口是默认端口,太容易被扫了,更换一个高位端口会好一点。
>如果你使用的是阿里云之类的带有端口控制功能的云服务器,请记得先在控制面板中打开你所需要使用的端口。具体操作方法请参考云服务提供商的文档。
然后依旧是编辑`/etc/ssh/sshd_config`,在 `Port 22` 这一行,把22改为别的数字,一般来说建议不要使80之类的常用端口。
最后重启ssh服务 `systemctl restart sshd` 就可以生效了
以上说的这些都是一些比较常规的操作,还有就是使用复杂密码之类的,也需要注意一下。
- ##进阶操作
如果刚刚说的那些常规操作还无法满足你对于隐私保护的需求,或者你的服务器经常被扫担心被攻破的话,也可以来尝试一下这些进阶的操作。
首先是更换证书登录,证书登录有很多的好处,提升安全性的同时也可以防止忘记密码。
- 生成证书的话如果你是linux环境,直接命令行:
`ssh-keygen -t rsa -b 4096` 即可。
>这里-t指的是加密方式,证书一般用rsa即可,-b指的是rsa加密用的质数位数,4096一般就够用了,这个数字是2的12次方,按照现在计算机的算力需要几千年才能破解。
期间会要求你输入密码,我一般不会输入,你也可以输入提升安全性,需要一定的长度并且包含一个特殊字符,具体终端窗口会有提示。在生成的时候最好做一些无意义的操作,比如随便敲敲键盘鼠标导出乱点,这样会让随机性更好一点。结束之后会在当前用户的家目录的.ssh文件夹下生成id_rsa和id_rsa.pub这两个文件,其中id_rsa这个文件是私钥,一定要保存好,id_rsa.pub是要放在服务器上的,可以打开把内容先复制下来。
- 如果你是Windows环境的话,那么我推荐Xshell这款工具,这款工具是付费软件,不过如果你是个人用户,也可以到官网输入邮箱获取免费版本。
安装好之后打开Xshell,在Tools选项中选择New User Key Wizard,加密方式选择rsa,位数尽量选择大一点,一路下一步,最后一步时公钥会显示出来,你可以复制下来,接下来会用到,结束之后私钥会自动被添加到Xshell的密钥管理器里,如果需要可以导出。
接下来就是使用证书登录,先登录服务器,在服务器需要登录的用户家目录下建立一个.ssh文件夹,然后建立一个authorized_keys文件,将刚才复制下来的公钥复制进去,如果你有很多对密钥对的话,一行一个公钥,对应不同的私钥。注意登录使用的用户一定要读这个文件的权限,不然无法验证就无法登录了。
接下来编辑 `/etc/ssh/sshd_config` 文件,添加:
```
RSAAuthentication yes #开启RSA加密方法验证
PubkeyAuthentication yes #开启公钥证书验证
PasswordAuthentication no #禁用密码登录
```
保存退出后重启ssh服务 `systemctl restart sshd`
之后这个命令行窗口先不要关闭,先另开一个命令行测试一下是否可以登录,成功后就可以退出之前的命令行了,以后就可以使用证书登录了,不但非常方便而且还提高了安全性。
- ##强迫症操作
如果你对於安全性真的有非常非常高的要求, ~~或者你和我一样有强迫症的话~~ 那么这边还有一些提高安全性的操作你可以尝试一下。
要进行这个操作首先要开启PAM管理,即在 `/etc/ssh/sshd_config` 文件中添加 `PAM yes` 并重启。(一般来说这个功能都是开启的,你只需要检查一下即可)
>PAM(Pluggable Authentication Module) 是 Linux 系统上用于对用户进行身份验证的身份验证基础结构。
确认开启后就可以来安装Google的TOTP模块了:
```
apt update && apt upgrade -y #首先更新一下系统
apt install libpam-google-authenticator #安装Google authenticator模块
```
然后接下来就需要用你**登录的账户**来设置 Google authenticator 模块了。
>当你进行Google authenticator模块设置的时候,只会针对执行命令的用户进行设置,所以如果你创建了一个用户用户登录并且禁止了root登录的时候,一定要切换到用于登录的用户下进行操作!
运行 `google-authenticator` 来进行设定:
```
Do you want authentication tokens to be time-based (y/n) y #基于时间的身份令牌
#接下来此处会显示二维码,请确保你的shell窗口足够大,不然可能会显示格式错误
Your new secret key is: ABCDEFG
Your verification code is 123456
Your emergency scratch codes are:
12345678 #此处仅为示例,这里的emergency scratch code是用于遗失令牌无法登录的情况,请务必牢记
Do you want me to update your "/userhome/.google_authenticator" file (y/n) y #是否更新验证文件,选择同意
Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y #是否禁止同一个验证码复用?选择是确保安全性
By default, tokens are good for 30 seconds. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens).
Do you want to do so? (y/n) n #由于时间可能不同步,是否将验证码可用时间延长至四分钟以确保在时间相差的情况下也可以登录?选择否,不延长可用时间以确保安全性
If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module.By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)y #是否限制暴力破解,默认情况下每30秒只允许三次尝试,选择是以确保安全性
```
至此,Google authenticator的服务端设置完成,至于生成二维码,需要使用手机app进行扫描,Google推荐使用自家的Google Authenticator app进行扫描,但是其实由于其令牌是基于时间的,所以其实有很多选择,只要是基于时间生成安全码的令牌app都可以使用,比如Microsoft Authenticator以及Symantec的VIP Access等等。
接下来设置ssh,编辑配置文件 `/etc/pam.d/sshd`,确保 `@include common-password` 没有被注释,然后在文件底部添加 `auth required pam_google_authenticator.so nullok` 这里的nullok代表选项可选, ~~因为此次设置为测试,如果失败了的话还可以强行登陆~~ 接下来继续编辑配置文件 `/etc/ssh/sshd_config` 将ChallengeResponseAuthentication 选项设置为yes,即 `ChallengeResponseAuthentication yes` ,最后重启sshd服务即可。
当前ssh窗口不要关闭,再开一个shell窗口登录本台服务器,这时你应该可以看到ssh连接要求你输入验证码了:

输入刚刚扫描完成后手机上显示的验证码,如果可以成功登录就可以去`/etc/pam.d/sshd` 文件将nullok删除了,这时重启sshd服务,MFA就将强行打开,下次登录您将必须输入验证码才可以登录了。
最后,如果你还想要更多一层的安全保障的话,那么只有登录用户的密码了,首先设置登录用户的密码:
`passwd loginuser`
>新建用户默认没有密码,一定要设置了密码才可以使用密码登录。
输入两遍相同密码,密码没有回显,设置成功后编辑 `/etc/pam.d/sshd` ,确保 `@include common-auth` 没有被注释后,重启sshd服务即可。
接下来再开一个新窗口进行登录,如果你没有取消掉证书登录的话,你会发现,登录是需要证书,密码以及随机验证码这三重验证才能够登录了。
这次给服务器加了那么多特技,除非被绑架,大概没有别的方法可以爆破服务器了吧。^V^