目前來說,二次驗證(這裏就不做過多解釋了)是比較常用的安全手段,通過設置二次驗證(谷歌或其他工具),就可以有效的避免賬戶密碼的泄露導致的安全問題。因爲,每次登陸前都需要獲取一次性驗證碼,如果沒有驗證碼的話就無法成功登陸。
1安裝 PAM 模塊
# 時間與客戶端進行校驗 $ ntpdate pool.ntp.org # Ubuntu $ sudo apt install -y libpam-google-authenticator # CentOS7 $ yum install -y epel-release $ yum install -y google-authenticator
2生成二次驗證代碼
# 生成驗證碼 # 哪個賬號需要動態驗證碼,請切換到該賬號下操作 # -t: 使用 TOTP 驗證 # -f: 將配置保存到 ~/.google_authenticator 文件裏面 # -d: 不允許重複使用以前使用的令牌 # -w 3: 使用令牌進行身份驗證以進行時鐘偏移 # -e 10: 生成 10 個緊急備用代碼 # -r 3 -R 30: 限速 - 每 30 秒允許 3 次登錄 $ google-authenticator -t -f -d -w 3 -e 10 -r 3 -R 30 Warning: pasting the following URL into your browser exposes the OTP secret to Google: https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/vagrant@vagrant%3Fsecret%3DKZ7QPA11115XTQJQGBFWAIUJBY%26issuer%3Dvagrant Your new secret key is: KZ7xxx7EI5123xxx123 Your verification code is 90xx71 Your emergency scratch codes are: 1571xx03 9968xx56 2319xx89 8321xx97 9730xx15 3424xx23 5667xx03 9408xx86 7502xx41 4677xx14
3配置 SSH 服務啓用兩步驗證
# 啓用兩步驗證 $ sudo vim /etc/pam.d/sshd # @include common-auth # 將禁用密碼身份驗證 auth required pam_google_authenticator.so # 禁用密碼驗證 # 修改SSH配置文件 $ sudo vim /etc/ssh/sshd_config Port 1090 ChallengeResponseAuthentication yes PubkeyAuthentication yes PasswordAuthentication no AuthenticationMethods publickey,keyboard-interactive # 重啓SSH服務 $ sudo systemctl restart ssh.service
4配置 sudo 二次驗證
# 保存並退出 $ sudo vim /etc/pam.d/common-auth auth required pam_google_authenticator.so # 重啓SSH服務 $ sudo systemctl restart ssh.service
5手機安裝 Google 身份驗證器
- 通過此工具掃描上一步生成的二維碼圖形,獲取動態驗證碼
- 之後,就可以使用手機進行二次認證了,才能登陸服務器了
6使用 Fail2ban 去屏蔽多次嘗試密碼的 IP
# 安裝軟件 $ sudo apt install -y fail2ban # 配置文件 $ vim /etc/fail2ban/jail.local [DEFAULT] ignoreip = 127.0.0.1/8 bantime = 86400 findtime = 600 maxretry = 5 banaction = firewallcmd-ipset action = %(action_mwl)s [sshd] enabled = true filter = sshd port = 1090 action = %(action_mwl)s logpath = /var/log/secure # 重啓服務 $ systemctl restart fail2ban
7從二次驗證鎖定中恢復
# 禁用特定用戶的二步驗證(無法訪問身份驗證器應用程序) $ sudo vim /etc/ssh/sshd_config AuthenticationMethods publickey,keyboard-interactive AuthenticationMethods publickey # 重啓SSH服務 $ sudo systemctl restart ssh.service