搬瓦工VPS基本防火牆規則及入站/出站策略
更多語言
更多操作
當你的 VPS 剛剛安裝好作業系統並連上網絡時,它就像是一個四面漏風的房間。網際網路上的任何一台機器,都可以嘗試連接你伺服器上的所有埠。每天都有無數的自動化掃描腳本在網絡上遊蕩,尋找那些沒有關好門的伺服器進行暴力破解或惡意入侵。
在下面的文章中,我們將拋開複雜的網絡理論,手把手教你建立一套基於「默認拒絕(Default Deny)」原則的基礎防火牆策略。我們將使用 Ubuntu 和 Debian 系統中最簡單好用的 UFW(Uncomplicated Firewall)工具來進行實戰。
一、 什麼是「默認拒絕」與出入站策略?
在動手敲命令之前,我們需要先理清防火牆的兩個基本方向:入站(Inbound/Incming)和出站(Outbound/Outgoing)。
- 入站(Incoming): 外界的電腦主動發起請求,想要進入你的伺服器。比如,你在瀏覽器里輸入伺服器的 IP 來訪問你的面板,這就是入站流量。
- 出站(Outgoing): 你的伺服器主動發起請求,想要訪問外界的網絡。比如,你在伺服器里使用
wget下載一個安裝包,或者 Docker 自動去拉取一個鏡像,這就是出站流量。
防火牆的最高黃金準則就是:默認拒絕所有入站,允許所有出站。
意思是:
- 除了我明確批准放行的埠(比如 SSH 登錄埠、特定的業務埠),其他任何外部機器想連進來,防火牆一律直接丟棄請求,連報錯都不回。
- 伺服器內部的軟體想要訪問外網下載東西,完全自由,防火牆不加阻攔。
這種策略能把伺服器的暴露面降到最低,把複雜性降到最低。
二、 安裝 UFW
在 Ubuntu 和 Debian 系統中,底層真正的防火牆叫 iptables 或 nftables,但它們的語法極其複雜,反人類。因此,我們使用 UFW(Uncomplicated Firewall,簡單防火牆)。它是一個前端工具,能把複雜的規則轉化為人類能看懂的簡單英語命令。
1. 安裝 UFW
通過 SSH 連上你的伺服器,執行以下命令安裝 UFW:
apt update apt install ufw -y

2. 查看當前狀態
安裝完成後,UFW 默認是關閉的。你可以查一下它的狀態:
ufw status
終端會輸出:Status: inactive(狀態:不活躍)。先不要急著開啟它,我們必須先設定好規則。

三、 配置默認策略與SSH埠
接下來我們就正式開始設置。這一步非常關鍵,順序絕對不能錯。錯了的話,可能會導致你與伺服器之間的連接直接被切斷。
1. 設置全局默認策略
告訴防火牆,以後遇到沒有明確規定的流量,默認按照下面的規則辦:
# 默认拒绝所有入站连接 ufw default deny incoming # 默认允许所有出站连接 ufw default allow outgoing

2. 極度重要:放行你的 SSH 埠
既然你設置了「默認拒絕所有入站」,如果你現在立刻把防火牆開啟,防火牆會連你當前的 SSH 連接一起切斷。你就會把自己徹底鎖在伺服器外面。
因此,在開啟防火牆之前,必須先放行 SSH 埠。
如果你使用的是默認的 22 埠,執行:
ufw allow 22/tcp

如果你已經將 SSH 埠改成了其他數字(比如 38422),那就放行你的自定義埠:
ufw allow 38422/tcp
3. 正式啟動防火牆
確認 SSH 埠已經放行後,輸入以下命令激活防火牆:
ufw enable
系統會彈出一句警告:Command may disrupt existing ssh connections. Proceed with operation (y|n)?(此命令可能會中斷現有的 SSH 連接,是否繼續?)。 因為我們上一步已經放行了埠,所以大膽輸入 y 並回車。

提示 Firewall is active and enabled on system startup,說明防火牆已成功啟動,並且每次伺服器重啟都會自動運行。
四、純 IP + 埠的精準放行策略
在我們的日常部署中,為了追求極致的簡單、高效和穩定,我們往往不需要去搞複雜的反向代理(不再需要把所有流量都擠到 80 和 443 埠)。
最原生的方式就是:跑一個服務,分配一個埠,防火牆放行一個埠,直接用 IP+埠 訪問。 這種架構故障點最少。
1. 常見業務的放行規則
假設你在伺服器上用 Docker 部署了一個 博客,你把它映射到了宿主機的 8090 埠。你只需要告訴防火牆,允許外界訪問這個埠即可。
ufw allow 8090/tcp
執行完畢後,你就可以直接在瀏覽器里通過 http://你的服务器IP:8090 來訪問面板了。
再比如,你部署了nginx proxy manager,映射在 81 埠:
ufw allow 81/tcp

2. TCP 與 UDP 的區別
在放行埠時,你可能會注意到後面帶著 /tcp。 網絡傳輸主要有兩種協議:TCP(穩定、面向連接,網頁瀏覽多用此協議)和 UDP(速度快、不保證送達,視頻流、遊戲多用此協議)。
- 絕大多數的 Web 面板、資料庫,都只需要放行 TCP。
- 如果你不寫協議,直接輸入
ufw allow 3001,UFW 會默認同時放行 TCP 和 UDP。為了安全起見,我們建議只放行需要的協議(加上/tcp)。
3. 如何知道自己需要放行哪些埠?
很多新手跟著教程複製了 Docker 部署命令,啟動成功了,但網頁打不開,也不知道該去防火牆放行哪個埠。
你可以使用 ss 命令來查看伺服器當前到底有哪些埠正在監聽(等待外部連接):
ss -tulnp
這個命令會列出所有正在運行的程序以及它們占用的埠。找到你的程序名稱(比如 docker-proxy),看看它對應的 Local Address:Port 是多少,然後在 UFW 里把那個埠放行即可。(因為是新機器,沒有運行其他服務,所以只有SSH的22埠正在監聽)

五、 查看、刪除與進階規則
防火牆規則不是一成不變的。當你卸載了某個面板,對應的埠也應該及時關閉,做到「用完即焚」。
1. 查看帶編號的規則列表
想要管理規則,最好的方法是給每條規則打上編號,這樣看得很清楚:
ufw status numbered
終端會輸出類似這樣的列表:
To Action From
-- ------ ----
[ 1] 38422/tcp ALLOW IN Anywhere
[ 2] 3001/tcp ALLOW IN Anywhere
[ 3] 38422/tcp (v6) ALLOW IN Anywhere (v6)
[ 4] 3001/tcp (v6) ALLOW IN Anywhere (v6)
你會發現,你輸入一條規則,UFW 會自動幫你生成 IPv4 和 IPv6(帶有 v6 字樣)兩條規則,非常省心。
2. 精準刪除規則
如果你不再使用 Uptime Kuma 了,想要關閉 3001 埠。只需要根據上面列表的編號進行刪除。
我們要刪除第 2 條規則:
ufw delete 2
輸入 y 確認。
注意: 刪除了第 2 條之後,原本的第 3 條、第 4 條規則的編號會自動向前遞補。所以如果你要繼續刪除,請一定要重新運行 ufw status numbered 查看最新的編號,不要盲目刪除,以免誤刪了 SSH 埠規則。
3. 進階技能:防暴力破解的 Limit 規則
你的 SSH 埠雖然改了,但如果真的被黑客掃到了,對方一直用密碼字典瘋狂嘗試登錄,會消耗伺服器大量的 CPU 資源。
UFW 提供了一個非常簡單的限流功能。你可以把之前放行 SSH 的 allow 規則,改為 limit 規則。
假設你的 SSH 埠是 38422:
ufw limit 38422/tcp
limit 規則的意思是:允許正常連接,但如果同一個 IP 地址在 30 秒內嘗試連接超過 6 次,防火牆就會直接把這個 IP 拉黑一段時間。這對於防範自動化的暴力破解腳本極其有效。
六、 常見問題:為什麼 UFW 放行了埠,我還是連不上?
這是新手最容易碰到的難題。你在系統裡執行了 ufw allow 3001/tcp,顯示操作成功,但網頁就是死活打不開。
如果你遇到了這種情況,原因幾乎只有一個:你的伺服器外面,還有一層防火牆。
現在很多雲服務商為了安全,會在網頁控制台里提供一個 「安全組(Security Group)」 或 「外部防火牆」 功能。 這層外部防火牆位於你的 VPS 作業系統之外。外部的請求想要到達你的伺服器,必須先經過服務商的安全組,然後才能到達你系統內部的 UFW。
注意:搬瓦工給予用戶極高的自由度,故沒有設置安全組。所以不會出現這一問題。但這裡還是提出來,畢竟技多不壓身。下次如果你遇到這類問題你就知道要去哪裡查看並解決。
排查邏輯:
- 確認系統內部的 UFW 已經放行了該埠。
- 登錄你購買 VPS 的服務商網頁後台,找到「網絡安全」、「防火牆」或「安全組」設置卡片。
- 在網頁後台同樣添加一條入站規則,放行對應的 TCP 埠。
只有當「外部安全組」和「內部 UFW」都對該埠亮了綠燈,你的流量才能真正通行無阻。
掌握了以上基於 UFW 的默認拒絕與純 IP+埠放行策略,你的伺服器在網際網路中就已經具備了極強的自保能力。你不需要去配置複雜的攔截策略,只要守住「不認識的埠堅決不開」這條底線,就能屏蔽掉 99% 的無差別攻擊。