一、密鑰認證:徹底消除密碼泄露風險
1.1 傳統密碼登錄的隱患
密碼認證存在兩大致命缺陷:
- 弱密碼易被暴力破解:即使設置復雜密碼,仍可能被字典攻擊或GPU加速破解。
- 密鑰泄露風險:密碼可能通過釣魚郵件、鍵盤記錄器等方式泄露。
1.2 密鑰認證原理
密鑰對由公鑰(Public Key)和私鑰(Private Key)組成,公鑰存儲在服務器,私鑰由用戶保管。認證時,服務器通過公鑰加密隨機數,用戶需用私鑰解密并返回哈希值驗證身份。整個過程無需傳輸密碼,且私鑰泄露風險遠低于密碼。
1.3 實戰步驟
步驟1:生成密鑰對
bash
| ssh-keygen -t ed25519 -C "your_email@example.com" # 推薦使用ED25519算法 |
生成的文件默認位于~/.ssh/id_ed25519(私鑰)和~/.ssh/id_ed25519.pub(公鑰)。
步驟2:將公鑰上傳至服務器
bash
| ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip # 自動添加到~/.ssh/authorized_keys |
或手動追加公鑰內容至服務器~/.ssh/authorized_keys文件。
步驟3:禁用密碼認證
編輯服務器SSH配置文件/etc/ssh/sshd_config:
ini
| PasswordAuthentication no # 禁用密碼登錄 |
| ChallengeResponseAuthentication no # 禁用鍵盤交互認證 |
| PubkeyAuthentication yes # 啟用公鑰認證 |
重啟SSH服務:
bash
| systemctl restart sshd # 或 service ssh restart |
1.4 高級防護措施
- 私鑰加密:使用
ssh-keygen -p為私鑰設置密碼,即使私鑰文件泄露也無法直接使用。 - 限制密鑰權限:確保
~/.ssh目錄權限為700,私鑰文件為600:bashchmod 700 ~/.ssh && chmod 600 ~/.ssh/*
二、Fail2ban:動態防御暴力破解
2.1 Fail2ban的作用
Fail2ban通過監控系統日志(如/var/log/auth.log),識別異常登錄行為(如多次失敗嘗試),并自動封禁攻擊者IP。與靜態防火墻規則相比,其優勢在于實時響應和自適應防護。
2.2 安裝與配置
步驟1:安裝Fail2ban
bash
| # Debian/Ubuntu |
| apt install fail2ban |
| # CentOS/RHEL |
| yum install fail2ban |
步驟2:創建SSH專用配置
復制默認配置文件并修改:
bash
| cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
編輯jail.local,啟用SSH防護:
ini
| [sshd] |
| enabled = true |
| port = ssh # 或指定端口如2222 |
| filter = sshd |
| logpath = /var/log/auth.log # 根據系統調整(CentOS為/var/log/secure) |
| maxretry = 3 # 允許3次失敗嘗試 |
| bantime = 86400 # 封禁24小時(單位:秒) |
| findtime = 600 # 在10分鐘內檢測 |
步驟3:啟動服務
bash
| systemctl enable --now fail2ban |
2.3 高級優化技巧
- 自定義白名單:避免誤封合法IP,在
jail.local中添加:ini[DEFAULT] ignoreip = 192.168.1.0/24 127.0.0.1 # 允許內網和本地IP - 郵件告警:通過
action配置發送封禁通知(需安裝sendmail或postfix)。 - 動態調整策略:針對持續攻擊的IP,可修改
bantime為指數增長(如首次24小時,第二次1周)。
三、綜合加固:多層次防御體系
3.1 端口修改與訪問限制
- 修改SSH默認端口(如2222),減少自動化掃描風險。
- 使用
tcpwrapper限制訪問IP:
編輯/etc/hosts.allow和/etc/hosts.deny,僅允許特定IP訪問SSH端口。
3.2 日志審計與定期檢查
- 定期分析
/var/log/auth.log,關注異常登錄記錄。 - 使用
goaccess或ELK搭建日志分析平臺,實現可視化監控。
3.3 定期更新與備份
- 保持SSH服務(OpenSSH)和系統補丁最新。
- 備份
~/.ssh/authorized_keys和Fail2ban配置,避免誤操作導致鎖定。
結語
通過密鑰認證和Fail2ban的組合使用,可構建起事前預防、事中攔截、事后審計的完整SSH安全體系。實際環境中,還需結合防火墻規則、雙因素認證(2FA)等手段進一步強化。安全是一個持續優化的過程,建議定期評估服務器暴露面,及時調整防護策略。