10 分鐘完成 Linux VPS 安全設定:SSH 金鑰、防火牆、Fail2ban 與自動更新
擁有公網 IP 的新 VPS 上線幾分鐘內就會開始收到自動化的登入嘗試。本文提供一份清單,教您約 10 分鐘完成新 Linux VPS 的安全設定:更新套件、建立 sudo 使用者、改用 SSH 金鑰登入、停用 root 密碼登入、防火牆只開放必要連接埠、以 fail2ban 阻擋暴力破解,以及啟用自動安全更新。指令分別提供 Debian/Ubuntu 與 CentOS/Rocky Linux/AlmaLinux 版本,適用約翰尼斯堡、莫斯科、東京或首爾的任何 JUSTG 雲端伺服器。
步驟 1:更新所有套件
以 root 登入(可參考我們的 SSH 登入教學),在做任何事之前先安裝最新的安全修補:
# Debian / Ubuntu
apt update && apt upgrade -y
# CentOS / Rocky / AlmaLinux
dnf upgrade -y
# reboot if a new kernel was installed
reboot
步驟 2:建立新的 sudo 使用者
整天用 root 操作,任何打錯字都可能釀成大禍,而且 root 是攻擊者第一個嘗試的帳號。請建立具 sudo 權限的一般使用者(此處為 deploy)。Debian/Ubuntu 的管理群組是 sudo,RHEL 系列則是 wheel。
# Debian / Ubuntu
adduser deploy
usermod -aG sudo deploy
# CentOS / Rocky / AlmaLinux
useradd -m deploy
passwd deploy
usermod -aG wheel deploy
步驟 3:設定 SSH 金鑰驗證
SSH 金鑰比密碼安全得多,也無法被猜中。請在 您自己的電腦 上產生金鑰對(不是在伺服器上),再把公鑰複製到新使用者。產生時建議為私鑰設定密碼短語。
# on your own computer (Windows PowerShell, macOS, Linux)
ssh-keygen -t ed25519 -C "my-laptop"
# macOS / Linux: copy the public key to the server
ssh-copy-id [email protected]
# Windows PowerShell (no ssh-copy-id)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
開啟一個 新的 終端機,確認可以用金鑰登入並使用 sudo:
ssh [email protected]
sudo whoami
步驟 4:停用 root 登入與 SSH 密碼驗證
較新的版本(Debian 12、Ubuntu 22.04 以上、Rocky/AlmaLinux 9)會讀取 /etc/ssh/sshd_config.d/ 內的設定檔,且以最先讀到的值為準。因此請使用排序靠前的檔名,例如 01-hardening.conf,才能覆蓋雲端映像在 50-cloud-init.conf 中開啟的密碼登入。舊系統請直接在 /etc/ssh/sshd_config 修改相同設定。
sudo nano /etc/ssh/sshd_config.d/01-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
檢查語法並重新啟動 SSH:
sudo sshd -t
# Debian / Ubuntu
sudo systemctl restart ssh
# CentOS / Rocky / AlmaLinux
sudo systemctl restart sshd
再從新的終端機測試:ssh [email protected] 應該會被拒絕,而 ssh [email protected] 仍可登入。
步驟 5:設定防火牆,只開放必要連接埠
預設拒絕所有連入,再只開放 SSH 與實際執行的服務(架站則開 80 與 443)。啟用防火牆 之前 一定要先允許 SSH;若已修改 SSH 連接埠,請改為允許新連接埠。
# Debian / Ubuntu (ufw)
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
# CentOS / Rocky / AlmaLinux (firewalld)
sudo dnf install firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
ufw 與 firewalld 都會把規則同時套用到 IPv4 與 JUSTG VPS 的免費 IPv6 位址。
步驟 6:安裝 fail2ban 阻擋暴力破解
即使已停用密碼登入,fail2ban 仍可讓日誌保持乾淨並封鎖掃描器。它會監看驗證失敗紀錄,並暫時封鎖來源 IP。systemd 後端直接讀取 journal,兩大發行版系列都適用。
# Debian / Ubuntu
sudo apt install fail2ban python3-systemd
# CentOS / Rocky / AlmaLinux
sudo dnf install epel-release
sudo dnf install fail2ban python3-systemd
sudo nano /etc/fail2ban/jail.local
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
步驟 7:啟用自動安全更新
大多數入侵利用的都是早已有修補的漏洞。讓伺服器自動安裝安全更新:Debian/Ubuntu 使用 unattended-upgrades,CentOS/Rocky/AlmaLinux 使用 dnf-automatic。
# Debian / Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
sudo unattended-upgrade --dry-run --debug
# CentOS / Rocky / AlmaLinux
sudo dnf install dnf-automatic
sudo nano /etc/dnf/automatic.conf
# upgrade_type = security
# apply_updates = yes
sudo systemctl enable --now dnf-automatic.timer
systemctl list-timers dnf-automatic.timer
核心更新仍需重新開機才會生效。請定期安排短暫的維護重開機,或在 Debian/Ubuntu 檢查 /var/run/reboot-required 是否存在。
常見問題
停用密碼登入後把自己鎖在外面了,怎麼辦?
從 JUSTG 客戶中心 開啟 VNC 主控台登入,修正 /etc/ssh/sshd_config.d/ 中的設定檔或防火牆規則。主控台不依賴 SSH 與防火牆。
需要同時修改 SSH 連接埠嗎?
把 SSH 移出 22 埠可以減少日誌雜訊,但本身並非真正的安全措施。若要修改,請先更新防火牆;在啟用 SELinux 的 Rocky/AlmaLinux 上還要執行 semanage port -a -t ssh_port_t -p tcp 2222。
Windows VPS 也適用嗎?
觀念相同:保持 Windows Update 開啟、使用強度高的 Administrator 密碼,並在 Windows Defender 防火牆中只允許您自己的 IP 使用 RDP。
如需協助強化伺服器安全,請提交工單聯繫 JUSTG 技術支援。