阿克森雲登入 / 註冊English/中文/cn繁體/tw

SSH 加固清單:上架第一小時的 12 個動作

新服務器上架第一小時的 12 個 SSH 加固動作:密鑰登入、禁 root 密碼、改默認行爲、fail2ban、日志與告警。每個動作一條命令 + 一個「爲什麼」,可直接照抄執行,全部冪等。

· AxionServe 編輯部 · 雲安全

互聯網上無差別的掃描與爆破每分鍾都在發生——新服務器上線的第一小時做完這 12 個動作,能擋掉絕大多數自動化攻擊。安全不是買來的產品,是一組默認動作。本篇是安全基線中心的核心清單篇:每個動作給「命令 + 爲什麼 + 驗證」,照抄即可,腳本化版本在自動化腳本。

SSH 加固十二動作分組示意

第一組:進門方式(動作 1–4)

  • ① 配置密鑰登入——密鑰對本地生成,公鑰上服務器:
    ssh-keygen -t ed25519 -C "admin@$(hostname)-$(date +%F)"   # 本地執行;ed25519 短且強
    ssh-copy-id root@新服務器IP                                  # 公鑰推送;沒有 ssh-copy-id 就手動追加到 ~/.ssh/authorized_keys
    爲什麼:密碼可以被字典爆破,256 位密鑰不能。驗證:新開終端用密鑰能登入,才算完成本步;
  • ② 禁用密碼認證——確認①成功後執行:
    echo -e "PasswordAuthentication no\nPubkeyAuthentication yes" > /etc/ssh/sshd_config.d/99-hardening.conf
    systemctl reload sshd   # Debian/Ubuntu 服務名可能是 ssh
    爲什麼:這是爆破攻擊的終局開關——密碼認證關了,字典攻擊的收益歸零;
  • ③ 限制 root 直登——PermitRootLogin prohibit-password(寫入同一 drop-in 文件):root 只許密鑰;更嚴格的做法是普通用戶 + sudo,審計粒度更細;
  • ④ 收緊嘗試參數——MaxAuthTries 3 與 LoginGraceTime 20:把每次連接的試探成本抬高,日志噪音同步下降。

第二組:自動防御(動作 5–7)

  • ⑤ 裝 fail2ban——
    apt-get install -y fail2ban   # 或 yum/dnf
    printf '[sshd]\nenabled = true\nmaxretry = 5\nfindtime = 600\nbantime = 3600\n' > /etc/fail2ban/jail.d/sshd.local
    systemctl enable --now fail2ban && fail2ban-client status sshd
    爲什麼:密鑰登入下爆破已無收益,但掃描噪音會淹沒有價值的日志——fail2ban 把慣犯 IP 關進小黑屋,日志清爽一半;
  • ⑥ 防火牆只留必要端口——默認拒絕入站,SSH(與業務端口)白名單放行,完整基線見防火牆基線;
  • ⑦ 自動安全更新——apt-get install -y unattended-upgrades && dpkg-reconfigure -f noninteractive unattended-upgrades:只自動裝安全補丁,大版本升級仍然人工——「不自動升級大版本」也是紀律的一部分。

第三組:可見性(動作 8–10)

  • ⑧ 登入告警——每次 SSH 登入發一封郵件/一條通知(/root/.ssh/rc 或 pam 腳本掛一行 curl 到你的通知端點):你自己沒登入而告警響了,就是入侵的第一信號;
  • ⑨ 審計日志確認——
    journalctl -u sshd --since "1 hour ago" | grep -E "Accepted|Failed" | tail -20
    last -10   # 最近登入記錄:IP 都認識嗎?
    爲什麼:出事後第一個問題永遠是「什麼時候進來的」——日志留存期與完整性要在第一天確認(雲鏡像有時默認裁剪日志);
  • ⑩ 基線快照——把當前狀態存檔:開放端口(ss -tlnp)、運行進程(ps auxf)、賬戶清單(awk -F: '$3>=1000{print $1}' /etc/passwd)、crontab——日後「多出來的東西」都對照這份快照找。

第四組:縱深(動作 11–12)

  • ⑪ 時間同步——timedatectl set-ntp true:日志時間戳錯亂的機器,取證時每一步都要先校時——第一小時就把它修好;
  • ⑫ 恢復通道確認——測試機房提供的 IPMI/VNC/控制臺通道可用(獨服)或快照功能可用(VPS):萬一 SSH 把自己鎖在門外(改配置手滑是高頻事故),這條通道就是唯一的門。驗證方式:真的用它登入一次。

十二動作速查表

#動作一句話命令/位置驗證方式
1密鑰登入ssh-keygen + ssh-copy-id新終端密鑰登入成功
2禁密碼認證sshd_config.d drop-in密碼登入被拒
3限制 rootPermitRootLogin prohibit-password配置回顯
4收緊嘗試MaxAuthTries/LoginGraceTime配置回顯
5fail2banjail.d/sshd.localstatus sshd 有 jail
6防火牆默認拒絕+白名單非白名單端口不通
7自動安全更新unattended-upgrades服務在位
8登入告警ssh rc/pam 掛鉤自己登入收到通知
9日志確認journalctl + last能看到 Accepted/Failed
10基線快照ss/ps/passwd/cron 歸檔快照文件存在
11時間同步timedatectl set-ntpNTP 狀態 synchronized
12恢復通道IPMI/VNC/快照真實走通一次

密鑰管理紀律:加固之後的一半工作

12 個動作把門換成了密鑰鎖,鑰匙本身的管理決定這套鎖的成色:①一機一鑰——每臺服務器獨立密鑰對,一把泄露不連坐;②私鑰加密存儲——ssh-keygen 時的 passphrase 別留空,私鑰文件權限 600,配合 ssh-agent 免去重復輸入;③人員變動即輪換——離職與外包結束的當天刪公鑰(authorized_keys 是一行一個的清單,刪行即斷權),這臺機器的授權面從此幹淨;④備份恢復通道與密鑰分離——IPMI/控制臺通道的憑據單獨存放(密碼管理器),SSH 密鑰全丟時它還在。四條約十分鍾就能落實到臺賬裏,但省掉的是「鑰匙失控」這類最難排查的事故。

常見翻車與誤區

  • 改端口不是安全——換端口只降噪音不降風險(掃描器全端口掃),做了②⑤之後端口號的邊際價值趨近於零;改與不改都隨意,別把它當核心防線;
  • 先禁密碼後配密鑰 = 自鎖門外——順序永遠是①→驗證→②;真鎖了走動作⑫的恢復通道;
  • 清單做完 ≠ 安全完成——這 12 個動作擋住的是自動化攻擊(佔實際攻擊的絕大多數),針對性攻擊要靠應急響應流程(見安全基線中心的後續批次與診斷思路)。

下一步:12 個動作的冪等腳本版在自動化腳本(新機器一條命令跑完);防火牆的完整口徑在防火牆基線;備份與恢復在恢復演練;全景回安全基線中心。練手環境從入門 VPS($5.34/月)開始,成本最低的沙盒。