安装NTP模块并设置时区
安装NTP模块
一般的服务器NTP服务默认是不安装的,需要安装NTP模块【7】并启用。
运行以下指令检查你的NTP模块是否已启用,已启用则忽略安装NTP模块的内容
timedatectl
如果你的返回内容和以下图片一样,则表示NTP未启用
SSH【3】登录你的服务器后,更新apt【8】包,安装Chrony【9】
sudo apt update
sudo apt install chrony
安装后会自动启用NTP模块,再次运行timedatectl【10】指令,预计返回以下内容:
设置时区
以设置时区为上海举例,运行以下指令,依次回复5,69
sudo dpkg-reconfigure tzdata
配置 Google Authenticator
安装 Google Authenticator 模块
运行以下指令进行安装,Do you want to continue? 中回复y
sudo apt install libpam-google-authenticator
配置 Google Authenticator
运行以下指令进行配置,Do you want authentication tokens to be time-based (y/n) 回复y
google-authenticator
将会返回一个二维码,使用支持 TOTP【11】 的应用扫描二维码,如Google Authenticator【12】,Apple Password,Authy等
二维码下将尾随Your new secret key is:,也可以在 TOTP 的应用中输入密钥进行设置
在Enter code from app (-1 to skip):后输入你的验证码应用中的六位动态验证码
优先考虑安全性的话,下面四个问题的回答分别是yyny
这四个问题的中文翻译为:
- 您是否希望我更新您的“/root/.google_authenticator”文件?(y/n)
- 您是否希望禁止多次使用同一个身份验证令牌?这会将您限制为大约每 30 秒登录一次,但这会增加您发现甚至阻止中间人攻击【13】的机会 (y/n)
- 默认情况下,移动应用每 30 秒生成一个新令牌。为了补偿客户端和服务器之间可能存在的时间偏差【14】,我们允许在当前时间前后各生成一个额外的令牌。这允许身份验证服务器和客户端之间最多存在 30 秒的时间偏差。如果您遇到时间同步不佳的问题,可以将窗口大小从默认的 3 个允许代码(一个前一个代码、当前代码、下一个代码)增加到 17 个允许代码(8 个前一个代码、当前代码和 8 个后一个代码)。这将允许客户端和服务器之间最多 4 分钟的时间偏差。是否要启用?(y/n)
- 如果您登录的计算机未针对暴力破解【15】登录尝试进行强化,您可以为身份验证模块启用速率限制【16】。默认情况下,这会将攻击者每 30 秒的登录尝试次数限制为不超过 3 次。是否要启用速率限制?(y/n) y
为SSH开启2FA
编辑 PAM 配置文件以启用 Google Authenticator
路径为/etc/pam.d/sshd【17】,在顶部添加以下内容(这里推荐使用服务器面板进行编辑)并注释@include common-auth【19】,这将配合后面的配置禁用密码验证
auth required pam_google_authenticator.so
配置 SSH 服务
编辑 SSH 配置文件:/etc/ssh/sshd_config【20】
需要有以下内容,有预设则修改,无预设则添加:
PermitRootLogin yes |
|
PasswordAuthentication no |
|
KbdInteractiveAuthentication yes |
|
ChallengeResponseAuthentication yes |
|
UsePAM yes |
|
AuthenticationMethods publickey,keyboard-interactive |
配置完成后重启ssh服务,以1panel为例,系统-SSH管理-重启
重新进行服务器SSH连接,效果如下所示,在经过证书验证后,还需要输入动态验证码才能成功连接
通过修改配置,还可以达成不同的ssh连接条件,以下给出部分示例(记得取消注释@include common-auth)
允许 root 登录,使用证书 + 密码 + 动态验证码三重SSH 验证
PermitRootLogin yes |
|
PasswordAuthentication yes |
|
KbdInteractiveAuthentication yes |
|
ChallengeResponseAuthentication yes |
|
UsePAM yes |
|
AuthenticationMethods publickey,password,keyboard-interactive |
允许 root 登录,使用密码 + 动态验证码双重SSH 验证
PermitRootLogin yes |
|
PasswordAuthentication yes |
|
KbdInteractiveAuthentication yes |
|
ChallengeResponseAuthentication yes |
|
UsePAM yes |
|
AuthenticationMethods password,keyboard-interactive |
推荐禁用密码验证的方式进行SSH连接,仅保留证书和动态验证码,即本文给出的例子