安裝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連接,僅保留證書和動態驗證碼,即本文給出的例子