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

第 2 課 · SSH 加固:密鑰、端口、fail2ban

上架第一小時 · L2 · 第 2 / 6 節 · 約 3 分鍾

SSH 是服務器的正門,也是爆破攻擊的靶心。這一課把正門換鎖:密鑰登入替代密碼、fail2ban 自動擋掃描、配置收緊減少暴露面——全部操作可復制,每步帶驗證。完整版十二動作清單在安全欄目的《SSH 加固清單》,本課是教學版:講清每個動作爲什麼。

SSH 加固三層示意

爲什麼密碼登入必須關

密碼認證的攻擊成本是「字典 × 時間」:一臺機器每小時能試數千次,弱密碼以小時計淪陷,強密碼也架不住全網盤庫碰撞。密鑰認證把問題換成了數學:ed25519 私鑰 256 位,暴力破解在物理上不可行——不是「更難猜」,是「猜這條路不存在」。這是全部 SSH 加固裏收益最大的一步。

實操五步(每步帶驗證)

# ① 本地生成密鑰對(passphrase 別留空——私鑰文件泄露時的第二道鎖)
ssh-keygen -t ed25519 -C "admin@server1"
# ② 公鑰上服務器(此時還能用密碼登,正是最後窗口)
ssh-copy-id root@服務器IP
# ③ 驗證密鑰登入成功後,才關密碼認證(順序錯了會把自己鎖外面)
printf 'PasswordAuthentication no\nPubkeyAuthentication yes\nPermitRootLogin prohibit-password\nMaxAuthTries 3\nLoginGraceTime 20\n' | sudo tee /etc/ssh/sshd_config.d/99-hardening.conf
sudo sshd -t && sudo systemctl reload sshd    # -t 先驗語法再 reload,防手滑斷門
# ④ 新開終端驗證:密鑰能登、密碼被拒
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@服務器IP   # 應失敗
# ⑤ fail2ban 上崗(擋掉噪音掃描,日志清爽)
sudo apt install -y fail2ban
printf '[sshd]\nenabled = true\nmaxretry = 5\nfindtime = 600\nbantime = 3600\n' | sudo tee /etc/fail2ban/jail.d/sshd.local
sudo systemctl enable --now fail2ban && sudo fail2ban-client status sshd

改端口:說清它的真實價值

把 SSH 從 22 改成高位端口不是安全機制(掃描器全端口掃,幾分鍾就找到),它的真實價值是降噪:日志裏的爆破嘗試從每小時幾百條降到個位數,真異常更容易被看見。改與不改都行,但要改就按紀律來:先 AllowTcpForwarding 確認新端口在防火牆放行 → 保持當前會話不斷開 → 新端口驗證登入成功 → 才關舊端口。順序錯了,你就體驗「鎖門外」了(恢復走機房 IPMI/VNC 通道——獨服交付時確認它可用,就是這個用途)。

authorized_keys:你的門禁名單

~/.ssh/authorized_keys 一行一把公鑰,就是「誰能進」的名單。三條紀律:①一人一行一注釋(-C 參數寫的注釋就是幹這個的——名單上每把鑰匙都要能回答「這是誰的」);②人員變動當天刪行(離職、外包結束、臨時調試的鑰匙——名單只增不減是通病);③私鑰永不離開你的設備(要給別人訪問權,讓他自己生成密鑰對交公鑰給你——「把我的私鑰發你」永遠錯誤)。文件權限 600、目錄 700(上一課的權限課在這裏落地);名單文件本身進你的配置備份範圍——機器重裝時,門禁名單和系統一起從零恢復,而不是憑記憶重收公鑰。

配置管理:drop-in 文件與語法預檢

sshd 配置有兩個紀律值得從第一天養成:①用 drop-in 不改主文件——/etc/ssh/sshd_config.d/ 目錄下的 .conf 文件會覆蓋主配置同名項(主文件 include 了這一目錄),你的加固寫進 99-hardening.conf,系統升級動主文件也不會衝掉你的設置,回滾就是刪一個文件;②改完必預檢——sudo sshd -t 只驗語法不生效,零風險;語法過了再 reload,reload 不斷現有會話。多人協作的機器再加一條:sshd 配置進版本庫(或至少改前 cp 一份帶日期的備份),「誰在什麼時候改了正門的鎖」必須可回答。

本節小結

  • 密鑰登入是數學級防御,密碼登入是字典級防御——關密碼是收益最大的一步,順序是「先驗證密鑰、後關密碼」;
  • fail2ban 擋掃描噪音,改端口只爲降噪不爲安全;兩者都不替代密鑰;
  • authorized_keys 是門禁名單:一人一鑰一注釋,變動當天更新。