Linux 系統初始化安全加固清單
當我們拿到一台全新的 Linux 伺服器時,出廠預設的設定通常著重於「相容性」與「易用性」,而非「安全性」。對於中階 Linux 使用者而言,理解如何針對生產環境進行安全加固(Hardening)是日常維護的核心技能。本文將以 Ubuntu 22.04 LTS 與 Debian 12 為基準,提供一份循序漸進的安全檢查與加固清單。
1. 更新系統與封包管理
安全加固的第一步永遠是確保系統處於最新狀態。漏洞修補(Patch)是抵禦已知攻擊最有效的手段。
首先,更新套件索引並升級所有已安裝的軟體:
sudo apt update && sudo apt full-upgrade -y
升級完成後,建議清理不再需要的依賴套件:
sudo apt autoremove -y
2. 建立非 root 使用者與 SSH 金鑰認證
預設的 root 使用者是攻擊者最常嘗試暴力破解的目標。我們應建立一個具有 sudo 權限的一般使用者,並禁用 root 的 SSH 直接登入。
建立新使用者
sudo adduser myuser
sudo usermod -aG sudo myuser
設定 SSH 金鑰認證
在本地端機器生成金鑰(若已有金鑰可跳過此步):
ssh-keygen -t ed25519 -C "your_email@example.com"
將公鑰複製到伺服器:
ssh-copy-id myuser@your_server_ip
驗證金鑰登入正常後,編輯 SSH 設定檔 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
修改以下參數以強化 SSH 安全:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
重新啟動 SSH 服務使設定生效:
sudo systemctl restart sshd
注意:在關閉密碼登入前,務必確認金鑰已正確部署,否則將被鎖在系統之外。
3. 配置防火牆 (UFW)
Ubuntu 和 Debian 預設安裝了 ufw (Uncomplicated Firewall)。我們僅允許必要的通訊埠,拒絕所有其他連線。
首先,允許 SSH 連線(若未允許,設定後可能斷線):
sudo ufw allow OpenSSH
若需開放 Web 服務:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
啟用防火牆並檢查狀態:
sudo ufw enable
sudo ufw status verbose
4. 安裝與配置 Fail2Ban
Fail2Ban 可以監控日誌檔,偵測多次登入失敗的行為,並自動封鎖來源 IP。
安裝套件:
sudo apt install fail2ban -y
建立自訂設定檔以保留預設值並進行微調:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
在 [sshd] 區塊中,確保設定如下:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
重新啟動服務:
sudo systemctl restart fail2ban
5. 定期自動更新 (Unattended Upgrades)
為了確保系統能即時獲得安全修補,建議啟用自動更新功能。
安裝套件:
sudo apt install unattended-upgrades -y
初始化設定:
sudo dpkg-reconfigure -plow unattended-upgrades
確認 /etc/apt/apt.conf.d/50unattended-upgrades 中包含安全更新選項。
常見問題 (FAQ)
Q1: 修改 SSH 設定後無法連線怎麼辦?
如果在修改 sshd_config 後失去連線,請不要嘗試重新 SSH 登入。請透過雲端控制台的「VNC Console」或「Serial Console」進入系統。檢查 /etc/ssh/sshd_config 是否有語法錯誤,並確認 PermitRootLogin 是否被誤設為 no 而你又沒有其他使用者。若需緊急恢復,可將 PermitRootLogin 改回 yes 並重啟 SSH 服務。
Q2: UFW 啟用後某些服務無法連線?
這通常是因为防火牆阻擋了預設埠口。請使用 sudo ufw status numbered 查看規則順序,並使用 sudo ufw allow <port>/tcp 明確開放所需埠口。若服務監聽在特定介面(如 localhost),請確認服務本身配置無誤,UFW 預設僅過濾外部網路流量。
小結
透過上述五個步驟,我們完成了基礎的系統安全加固:更新了系統、建立了最小權限使用者、配置了防火牆、防止了暴力破解,並設定了自動更新。這些措施雖然簡單,但能有效抵禦絕大多數自動化腳本攻擊。
安全加固是一個持續的過程,建議定期檢視 /var/log/auth.log 與 fail2ban 的日誌,並根據實際業務需求調整防火牆規則。記住,安全性與便利性往往需要權衡,但在伺服器領域,穩固的基礎是穩定運行的前提。