在前面的篇章中,我們成功讓 Python 爬蟲與資料監控腳本以 Systemd 服務的方式在背景穩定運作。隨著虛擬機或雲端主機開始提供各類網路服務(例如之後若架設 Web 伺服器、API 接口或遠端 SSH 連線),主機就等於直接暴露在網路環境中。
如果沒有設定訪問控制,任何外部設備都能嘗試探測主機上開放的通訊埠(Port),這會帶來潛在的資安風險。在 Ubuntu 系統中,管理網路邊界最簡單、直覺的工具就是UFW(Uncomplicated Firewall)。今天我們就來把主機的大門關好,只允許我們信任的連線通過。
1.什麼是通訊埠與防火牆?
可以把你的 Linux 主機想像成一棟辦公大樓:
什麼是 UFW?
Linux 核心底層原本使用的是強大但語法極為複雜的 iptables。Ubuntu 為了解決新手設定容易出錯的痛點,開發了UFW(Uncomplicated Firewall,直譯為「不複雜的防火牆」)。它用非常口語、簡短的指令,幫我們輕鬆搞定進出連線規則。
2.注意事項
重要提醒:切勿直接啟動防火牆!
UFW 預設的安全原則是:「阻擋所有外部連進來的請求,允許所有本機連出去的請求」。
如果你目前是透過 SSH 遠端連線進虛擬機或雲端主機操作,在「還沒放行 SSH(Port 22)」之前就直接啟用防火牆,你的連線會瞬間被切斷,且再也連不進去(就像把自己鎖在門外)!
因此標準的操作 SOP 應該是:先放行管理連線(SSH)➔ 檢查規則 ➔ 最後才啟用防火牆。
3.UFW 設定
(1)檢查目前防火牆狀態
在終端機中輸入以下指令
sudo ufw status

(Ubuntu 剛裝好時的預設狀態是把防火牆關閉)
(2)建立預設防護原則
確保阻擋所有外部主動連線,並允許本機正常的對外上網需求(例如我們的 Python 腳本對外抓取 CoinGecko API):
sudo ufw default deny incoming
sudo ufw default allow outgoing
(3)放行必要的服務連線(以 SSH 為例)
先把我們自己要通行的 22 號 Port 放進白名單,你可以使用服務名稱或埠號:
sudo ufw allow 22/tcp
# 或者輸入:sudo ufw allow ssh
終端機會回傳已更新防火牆規則,代表放行規則已成功登錄。
若未來有架設網頁伺服器需求,也可預先放行 80 與 443 Port
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
(4)正式啟用 UFW 防火牆
確認規則都新增好之後,執行啟用指令:
sudo ufw enable
系統會跳出警告訊息:
「指令可能會中斷現有的 ssh 連接。繼續執行(y|n)?」
因為我們剛才已經確認放行了 22 號 Port,直接輸入 y 並按下 Enter 即可。
終端機顯示在系統啟動時啟用防火牆,表示防火牆已正式啟動,且開機時會自動載入生效。
4.驗證與常用規則管理
(1)檢視詳細規則清單
使用 verbose 參數查看目前啟用的細節與預設政策:
sudo ufw status verbose
正常輸出範例:
可以看到除了 22 號 Port 允許從任何地方連入(ALLOW IN)外,其餘所有連入請求一律遵循 Default: deny 被擋下。
(2)常用維運指令速查
| 維運需求 | 指令寫法 |
|---|---|
| 依編號列出規則 | sudo ufw status numbered |
| 刪除指定規則(透過編號) | sudo ufw delete <編號>(例如:sudo ufw delete 2) |
| 刪除指定規則(透過語法) | sudo ufw delete allow 80/tcp |
| 只允許特定 IP 連線(提高安全性) | sudo ufw allow from 192.168.1.50 to any port 22 |
| 臨時停用防火牆 | sudo ufw disable |
| 重設所有規則回到初始狀態 | sudo ufw reset |
|明日目標:主機的網路門禁就定位後,明天將進入「遠端安全存取篇」,學習如何停用危險的密碼登入,改用 SSH 金鑰配對登入主機,打造無密碼且更安全的連線機制!|