痛點拆解:安全與交付節奏的雙頭馬車
把遠端 Mac 暴露在公網做 SFTP,本質是平台維運題:資安希望失敗越快越好並封鎖來源;交付需要 CI 短時間平行上傳且會重試。若沒有共用語言,現場常誤判成網路問題,實際卻是 MaxAuthTries 與外層閾值打架。
「只允許公鑰」仍擋不住掃描握手成本;若 CI 端 known_hosts 與主機不一致,重試帳面像攻擊。LoginGraceTime 過短也會讓跨區工程師首次對指紋時被踢線。
矩陣 Job 會放大預算:多 Job×重試若未用 Match User 分段,整機驗證預算易被單一管線綁架。另若無視 MaxSessions 與 keepalive,會出現「參數很嚴、連線仍塞滿」的假象。
威脅模型:掃描噪音與 CI 抖動如何分流
暴力猜解常見分散帳號與機械節奏;CI 抖動多綁定固定服務帳號並與 DNS/跳板變更相關。混在同一計數器會讓政策搖擺。建議分層:可達性、主機身分、驗證與工作階段;主機身分正確後,再以 MaxAuthTries/LoginGraceTime 給自動化可理解的失敗預算。有跳板時,對外層先聚合節流,內層略寬,避免矩陣一次鎖死全鏈路。
可量化基線:用比率而不是用感覺
先算每來源每小時失敗與成功工作階段比;帳號分散偏掃描,單一指紋集中偏金鑰/主機金鑰事件。用「每 Job 重試×矩陣寬÷秒數」估尖峰,對照 macOS OpenSSH 語意。LoginGraceTime 以 RTT P95 為準;發佈窗暴量多為憑證漂移。工件 SHA256 失敗應與 SSH 驗證分桶,避免誤白名單。
雲端安全群組擋得了洪水但不懂驗證語意,需周邊限速加 sshd 參數並標明負責團隊。macOS 上 Fail2ban 非首選整合路徑;務實作法是先關密碼、ed25519、Match User 分段,必要時改 私網 mesh 收斂入口。
決策矩陣:限次、寬限、外層封鎖與 CI 白名單
| 控制手段 | 最適場景 | 效益 | 主要風險 |
|---|---|---|---|
| 僅提高 MaxAuthTries | 金鑰事件應急 | 快速止血 | 若仍殘留密碼路徑會放大窗口 |
| 緊縮 MaxAuthTries 且僅金鑰 | 公網入口 | 降低密碼猜解面 | 錯金鑰更快失敗;流程需退避 |
| 縮短 LoginGraceTime | 半開連線濫用 | 省 CPU | 高 RTT 使用者可能被斷線 |
| 雲端防火牆限速 | 掃描風暴 | 在碰 sshd 前吸收 | 門檻過低仍可能打到 CI burst |
| Fail2ban 類自動封鎖 | Linux 且日誌穩定 | 自動響應 | 共享 NAT 誤判 |
| Mesh 或私網入口 | 架構可改 | 縮小暴露面 | 路由與 ACL 成本 |
下決策前先問三件事:是否仍有任何密碼或鍵盤互動路徑?CI 是否走共享 NAT?跳板是否單點?任一為真,就應組合多個控制項,而不是賭單一參數。
sshd 設定片段與流程退避(示意)
# sshd_config 片段(請依實際 OS 與發行版調整)
# PasswordAuthentication no
# KbdInteractiveAuthentication no
# MaxAuthTries 4
# LoginGraceTime 45
# ClientAliveInterval 30
# ClientAliveCountMax 4
# Match User ci-upload
# MaxAuthTries 6
# ForceCommand internal-sftp -d /Volumes/artifacts
# GitHub Actions:驗證失敗後在 workflow 使用指數退避 sleep
落地步驟:從帳號分段到演練
一、Match 分真人與 CI 上傳帳號。二、internal-sftp/ForceCommand 時先查 chroot 權限,避免誤判驗證。三、MaxSessions 對齊併發並銜接 OIDC/部署金鑰。四、StrictHostKeyChecking=yes 與 UserKnownHostsFile 納秘密管理。五、大輪替期暫緩過激封鎖並雙人覆核防火牆。六、測試機演練錯金鑰復原,禁止壓力下關閉主機檢查。
稽核可把連線計數與產物校驗綁票;SIEM 不落私鑰。主機金鑰輪替應有雙金鑰窗口,避免團隊為救 CI 永久放寬檢查。負向測試慢握手與大檔上傳;校驗 keepalive。多區重試加抖動;自架與託管 Runner 出口分開記帳;環境分帳號。參數數字要寫明理由,避免從無關伺服器抄更嚴值。
若自建在補丁、日誌與演練上負担過重,可把同一模型交給 SFTPMAC 託管遠端 Mac,把「擋掃描/不擋 CI」收斂成可營運預設。
建議閱讀順序(全為站內連結)
建議依序閱讀:Actions 主機金鑰 → OIDC 與部署金鑰 → 併發 SFTP → ProxyJump 跳板 → 可選 Tailscale/Headscale mesh → 首頁了解託管容量。
FAQ、檢查清單與為何看向託管
總結:公網 SFTP 應把 MaxAuthTries、LoginGraceTime、僅金鑰、主機檢查與工作階段預算寫在同一 runbook,並用外層限速與拓樸吸收掃描。自建成本含 macOS 升級後 OpenSSH 行為差異與日誌整合;若要把細節變成可重複能力,SFTPMAC 託管遠端 Mac 能把張力變成預設營運值。
on-call 一頁清單:密碼關閉、Match User、每角色 MaxAuthTries、LoginGraceTime 附 RTT、MaxSessions 對齊 CI、known_hosts 釘選、外層封鎖有負責人、回滾不需關主機檢查。
