強化新 VPS
回答
強化新 VPS 約需二十分鐘:停用密碼與 root SSH 登入、啟用僅金鑰認證、設定 nftables 預設拒絕入站、啟用自動安全性更新,並安裝 fail2ban。這五個步驟能消除絕大多數的實際入侵。
實際入侵伺服器的因素
不是零時差漏洞。實際上是:對弱憑證的 SSH 密碼暴力破解、數月未修補的服務、暴露的管理後台配預設密碼,以及操作者安裝的應用程式漏洞。這清單無趣,且十五年未變。
以下清單按每步每分鐘能消除多少風險排序。照順序執行,失去耐心就停下——您仍已消除大部分風險。
步驟 1 — 僅限 SSH 金鑰
此單一變更即可完全消除最常見的攻擊。產生一把 Ed25519 金鑰,將公鑰上傳至伺服器,然後編輯 /etc/ssh/sshd_config,設定 PasswordAuthentication no、PermitRootLogin prohibit-password 及 KbdInteractiveAuthentication no。
在關閉第一個終端機前,請在第二個終端機測試金鑰。將自己鎖在門外雖然難堪,且在可存取主控台的機器上完全可恢復——但還是請依正確順序操作。
第二步——預設拒絕的防火牆
在現代 Debian 與 Ubuntu 上使用 nftables,在 RHEL 衍生版本上使用 firewalld。預設拒絕入站,允許已建立與相關連線,允許您的 SSH 連接埠,允許工作負載實際需要的連接埠,其餘一律阻擋。
重要的紀律是「其餘一律阻擋」正是重點。一個在除錯期間加入寬鬆規則且從未移除的防火牆,等於沒有防火牆。
- 預設政策:丟棄入站,接受出站
- 接受已建立與相關連線
- 接受 loopback
- 接受 SSH 連接埠,最好加上速率限制
- 接受工作負載連接埠,明確列出
- 接受 ICMP echo——不要破壞路徑 MTU 探索
第三步——自動安全性更新
在 Debian 與 Ubuntu 上使用 unattended-upgrades,在 RHEL 衍生版本上使用 dnf-automatic,僅設定安全性更新。多數入侵是利用幾個月前就已修補的漏洞。
若您的工作負載可容忍,請在維護時段啟用自動重新開機。核心更新在重新開機前不會生效,而一部運行 400 天且有 11 個未處理核心 CVE 的伺服器,不是值得驕傲的事。
第四步——fail2ban,以及其實際價值的說明
在已停用密碼驗證的情況下,fail2ban 能阻止的實際入侵相對有限。它的真正價值在於大幅減少記錄雜訊,因為充滿數千筆失敗嘗試的記錄檔,不會有人閱讀;而沒人閱讀的記錄檔,正是真正的入侵能持續數週不被發現的原因。
預設的 sshd jail 已足夠。為您暴露在網際網路的其他服務加入 jail。
第五步——縮小攻擊面
執行 ss -tlnp,查看正在監聽的服務。在預設安裝中,這通常包含一些您不知道在運行且不需要的服務。請移除它們,而不是用防火牆擋住——未安裝的軟體沒有漏洞。
將僅需本機存取的服務綁定到 127.0.0.1,而非 0.0.0.0。一個在防火牆後方監聽所有介面的資料庫,距離公開只差一個錯誤設定。
可以略過的項目
變更 SSH 連接埠可減少記錄雜訊,但對針對性攻擊的防禦效果為零。若您喜歡,可以這樣做,但別將其視為安全性措施。連接埠敲門增加了脆弱性,卻只換來邊際效益。入侵偵測系統會產生警報,但在單一伺服器上,這些警報通常無人處理。
若您想在上述五個步驟之外再採取一項有意義的措施,那就是在不同司法管轄區進行加密的異地備份,並透過實際還原來測試。復原能力比多一層防禦更有價值。
常見問題
01 變更 SSH 連接埠值得嗎?
為了減少記錄雜訊,值得。為了安全性,不值得——它能阻止機會主義掃描器,但對針對性攻擊的防禦效果為零。如果您喜歡更安靜的記錄,可以這樣做,但別將其視為控制措施。
02 如果使用 SSH 金鑰,還需要 fail2ban 嗎?
就直接安全性而言,幾乎不需要。但為了記錄衛生,需要——數千筆失敗嘗試會讓記錄無法閱讀,而沒人閱讀的記錄正是真正的入侵得以隱藏的原因。
03 我應該啟用自動重新開機嗎?
若工作負載可容忍,應該,在維護時段啟用。核心修補在重新開機前不會生效。長時間運行卻有未處理的核心 CVE,是負債,不是成就。
相關