你的 Ubuntu 伺服器在裸奔嗎?資深工程師的 10 道終極安全防線,打造駭客也搖頭的 WordPress 堡壘
嗨,我是浪花科技的 Eric。身為一個整天跟程式碼和伺服器打交道的工程師,我看過太多令人心驚膽跳的場景。很多朋友花大錢做了漂亮的 WordPress 網站,裝了各種酷炫的 SEO、效能外掛,卻把網站蓋在一座「沒上鎖的毛胚屋」上——也就是一台幾乎全新、未經任何安全強化的 Ubuntu 伺服器。
這就像是買了頂級的保險箱,卻把鑰匙直接插在門上,大喊「歡迎光臨」。今天,我就要來點工程師的囉嗦,帶你一步步把這間毛胚屋,打造成一座連駭客都得繞道的數位堡壘。這篇不是空談理論,而是我多年實戰經驗總結下來的 Ubuntu 伺服器最佳安全設定實戰手冊,專為你的 WordPress 網站量身打造。
為什麼伺服器層級的安全是 WordPress 的地基?
很多人會問:「我裝了 Wordfence、Sucuri 這些資安外掛,還不夠嗎?」問得好。那些是「應用層」的安全防護,好比是你家的保全系統。但如果小偷直接把整棟公寓的大門撬開,直接進到你家所在的樓層,你家的保全再厲害,風險還是極高。
伺服器就是那棟公寓。如果伺服器本身被攻陷,駭客就能:
- 繞過所有 WordPress 的安全機制,直接存取你的資料庫。
- 在你的網站植入惡意程式、挖礦腳本,拖垮網站效能。
- 竊取使用者資料、訂單資訊,造成商譽和金錢上的巨大損失。
- 把你的伺服器當作跳板,去攻擊其他人,讓你背上黑鍋。
所以,別再只依賴外掛了。真正的安全,是從地基開始的「縱深防禦」。今天,我們就來把這個地基打穩。
安全設定前的飛行檢查
在我們開始動手之前,請確保你有一台全新的 Ubuntu 22.04 LTS 或更新版本的伺服器,並且擁有 root 或 sudo 權限。有點 Linux 指令基礎會更好,但別擔心,我會把每個步驟都解釋清楚。
工程師的小提醒:在對伺服器進行任何重大變更前,務必備份!務必備份!務必備份!重要的事情說三遍。一個好的備份策略,是你最終極的後悔藥。
第一道防線:拋棄 Root,建立專屬管理員帳號
直接使用 root 帳號操作伺服器,是新手最常犯的致命錯誤。root 權力過大,一個手滑打錯指令(例如 `rm -rf /`),整個系統就跟你說掰掰了,連哭的機會都沒有。我們第一步就是要建立一個具備 sudo 權限的一般使用者。
# 新增一個使用者,這裡以 eric 為例
adduser eric
# 將該使用者加入 sudo 群組,賦予管理員權限
usermod -aG sudo eric
完成後,請登出 root,改用你剛剛建立的新帳號登入。從現在開始,我們將告別 root。
第二道防線:加固 SSH,鎖死駭客的主要入口
SSH 是我們遠端管理伺服器的主要通道,也是駭客們最愛的攻擊目標。網路上無時無刻都有成千上萬的機器人,在掃描 IP 並嘗試用預設的 22 port 和常見密碼組合(如 root/password)來登入。我們必須把這扇門焊死。
1. 禁止 Root 遠端登入
既然我們已經有了 sudo 帳號,就沒有任何理由允許 root 直接從遠端登入。編輯 SSH 設定檔:
sudo nano /etc/ssh/sshd_config
找到 `PermitRootLogin` 這一行,把它改成 `no`。
PermitRootLogin no
2. 更改預設 SSH 埠號
這招叫做「安全始於隱匿」(Security through obscurity)。雖然無法抵擋鎖定目標的專業駭客,但能有效過濾掉 99% 的自動化掃描機器人。就像把家門從一樓改到十三樓,無腦的小偷就找不到了。
在同一個設定檔中,找到 `#Port 22`,拿掉前面的 `#`,並改成一個不常用的埠號,例如 `2288`。
Port 2288
3. (強烈建議) 使用 SSH 金鑰取代密碼登入
密碼有被猜到或暴力破解的風險,但 SSH 金鑰幾乎不可能。這相當於把傳統鑰匙鎖,升級成銀行金庫等級的虹膜辨識鎖。
這個過程稍微複雜,你需要在本機電腦產生一對公私鑰,再把公鑰上傳到伺服器。一旦設定完成,你就可以在 `sshd_config` 裡徹底禁用密碼登入:
PasswordAuthentication no
完成以上修改後,儲存檔案並重新載入 SSH 服務。工程師的血淚教訓:在你登出目前的連線之前,請務必開一個新的終端機視窗,用新的設定(新埠號、新使用者)嘗試登入一次!確認可以成功登入後,再關閉舊的連線,否則你很可能會把自己鎖在門外,到時候就真的欲哭無淚了。
sudo systemctl reload sshd
第三道防線:啟用 UFW 防火牆,只開放必要的通道
防火牆是伺服器的第一道屏障,它決定了哪些網路流量可以進出。Ubuntu 內建的 UFW (Uncomplicated Firewall) 非常好用,我們的原則很簡單:「預設全部禁止,只允許必要的」。
# 允許我們剛剛設定的 SSH 埠號
sudo ufw allow 2288/tcp
# 允許 HTTP 和 HTTPS 流量 (網站服務)
sudo ufw allow 'Nginx Full'
# 如果你用的是 Apache,就是 sudo ufw allow 'Apache Full'
# 啟用防火牆
sudo ufw enable
# 檢查防火牆狀態
sudo ufw status
執行 `sudo ufw enable` 後,系統會警告你這可能會中斷現有的 SSH 連線,按 `y` 確認即可。因為我們已經預先允許了新的 SSH 埠號,所以不會被鎖在門外。
第四道防線:定期系統更新,修補已知漏洞
軟體沒有百分之百安全的,總會有新的漏洞被發現。保持系統和套件的更新,就是最基本也最重要的安全工作。這就像定期打疫苗,預防已知的病毒入侵。
sudo apt update && sudo apt upgrade -y
但手動更新太麻煩了,身為懶惰的工程師,我們當然要自動化!Ubuntu 提供了 `unattended-upgrades` 套件,可以自動安裝重要的安全性更新。
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
設定好之後,你的伺服器就會在背景默默地幫你打上安全補丁,讓你高枕無憂。
第五道防線:部署 Fail2Ban,自動封鎖惡意 IP
即使我們已經加固了 SSH,還是會有機器人不停地嘗試連線。這些嘗試會佔用系統資源,並在日誌中產生大量噪音。Fail2Ban 就是我們的自動警衛,它會監控系統日誌,一旦發現有 IP 在短時間內多次登入失敗,就會自動透過防火牆將其封鎖一段時間。
# 安裝 Fail2Ban
sudo apt install fail2ban
# 複製預設設定檔來進行客製化(不要直接修改 .conf 檔)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 啟動並設定開機自啟
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
預設的 `jail.local` 已經開啟了對 SSH 的防護。你可以用 `sudo fail2ban-client status sshd` 來查看它已經抓到並封鎖了多少惡意的 IP。看到那長長一串被封鎖的 IP 列表時,你就會知道這個工具是多麽重要了。
總結:安全是一場永無止境的旅程
恭喜你!跟著以上步驟,你的 Ubuntu 伺服器已經從一間四面透風的毛胚屋,變成了一座有高牆、有警衛、有堅固門鎖的堡壘。我們回顧一下關鍵步驟:
- 建立 Sudo 使用者:避免使用 root 操作。
- 加固 SSH:改埠號、禁 root、用金鑰。
- 設定 UFW 防火牆:只開放必要服務。
- 自動化更新:及時修補安全漏洞。
- 安裝 Fail2Ban:自動阻擋暴力破解。
請記住,伺服器安全不是一次性的設定,而是一個持續的過程。你需要定期檢查日誌、關注安全新聞,並隨時準備應對新的威脅。這聽起來可能有點累人,但跟網站被黑、資料外洩後的焦頭爛額相比,這些預防措施絕對是值得的。
延伸閱讀
- 網站半夜被黑?別怕!資深工程師的 WordPress 終極安全指南,從預防到災難復原全攻略
- 「網站大門忘了鎖?」資深工程師帶你架起 WordPress 銅牆鐵壁:WAF、Bot 防護與外掛設定終極指南
- WordPress 安全不是單點防禦!資深工程師帶你構築「縱深防禦」三層鐵壁,駭客看了都搖頭
如果你覺得這些設定太過複雜,或者希望有專業的團隊來為你的 WordPress 網站架構與伺服器安全把關,歡迎隨時與浪花科技的我們聊聊。我們很樂意協助你打造一個既高效又安全的網站環境。
常見問題 (FAQ)
Q1: 為什麼不能直接用 root 帳號?這樣不是很方便嗎?
A1: 方便是魔鬼!root 帳號擁有系統的最高權限,任何操作都不會被詢問確認。這意味著一個小小的打字錯誤,比如在 `rm -rf` 指令後面加錯了路徑,就可能瞬間刪除整個系統的檔案,造成無法挽回的災難。使用具有 sudo 權限的一般使用者,可以在執行高權限指令前多一道 `sudo` 的步驟,這是一個重要的安全緩衝,能有效避免誤操作。
Q2: 更改 SSH 預設埠號真的有用嗎?駭客不是也能掃描到新埠號嗎?
A2: 這是個好問題。對於有特定目標、持續性的攻擊者來說,掃描所有埠號確實能找到你隱藏的 SSH 服務。然而,網路上絕大多數的攻擊流量來自於自動化的腳本和殭屍網路,它們為了效率,通常只會掃描預設的 22 埠。更改埠號就像是把你的門牌號碼拿掉,雖然不能阻止專程找你麻煩的人,但可以完美避開絕大多數的無差別廣告傳單和推銷員,大幅降低伺服器日誌的噪音和被暴力破解的風險。
Q3: 在這麼多安全設定中,如果時間有限,哪一項是最優先、最重要的?
A3: 如果只能選一項,我會說是「加固 SSH 存取」,特別是「禁用 root 登入」和「使用 SSH 金鑰取代密碼」。SSH 是進入你伺服器的大門,只要這扇門固若金湯,駭客就幾乎沒有機會從外部直接控制你的系統。相比之下,即使防火牆設定有疏漏或某個軟體有漏洞,只要駭客無法取得 Shell 存取權限,他們能造成的破壞就相對有限。
Q4: 我完成了所有的伺服器安全設定,我的 WordPress 網站是不是就 100% 安全了?
A4: 並不是。這篇文章專注於「伺服器層級」的安全,也就是我們說的「地基」。地基穩固了,不代表房子本身(也就是 WordPress 應用程式)就是安全的。你仍然需要注意 WordPress 本身的安全,例如:使用強度高的密碼、定期更新核心、主題與外掛、不安裝來路不明的外掛、設定 WAF(網站應用程式防火牆)等。真正的安全是「縱深防禦」,從伺服器、網路到應用程式,層層設防,才能最大限度地保障網站安全。






