切換菜單
切換偏好設定選單
切換個人選單
尚未登入
若您做出任何編輯,會公開您的 IP 位址。

搬瓦工VPS基本防火牆規則及入站/出站策略

出自md5.pw
這是此頁面最近一次修訂;沒有已批准修訂。

當你的 VPS 剛剛安裝好作業系統並連上網絡時,它就像是一個四面漏風的房間。互聯網上的任何一台機器,都可以嘗試連接你伺服器上的所有端口。每天都有無數的自動化掃描腳本在網絡上遊蕩,尋找那些沒有關好門的伺服器進行暴力破解或惡意入侵。

在下面的文章中,我們將拋開複雜的網絡理論,手把手教你建立一套基於「默認拒絕(Default Deny)」原則的基礎防火牆策略。我們將使用 Ubuntu 和 Debian 系統中最簡單好用的 UFW(Uncomplicated Firewall)工具來進行實戰。


一、 什麼是「默認拒絕」與出入站策略?

在動手敲命令之前,我們需要先理清防火牆的兩個基本方向:入站(Inbound/Incming)和出站(Outbound/Outgoing)。

  • 入站(Incoming): 外界的電腦主動發起請求,想要進入你的伺服器。比如,你在瀏覽器里輸入伺服器的 IP 來訪問你的面板,這就是入站流量。
  • 出站(Outgoing): 你的伺服器主動發起請求,想要訪問外界的網絡。比如,你在伺服器里使用 wget 下載一個安裝包,或者 Docker 自動去拉取一個鏡像,這就是出站流量。

防火牆的最高黃金準則就是:默認拒絕所有入站,允許所有出站。

意思是:

  1. 除了我明確批准放行的端口(比如 SSH 登錄端口、特定的業務端口),其他任何外部機器想連進來,防火牆一律直接丟棄請求,連報錯都不回。
  2. 伺服器內部的軟件想要訪問外網下載東西,完全自由,防火牆不加阻攔。

這種策略能把伺服器的暴露面降到最低,把複雜性降到最低。


二、 安裝 UFW

在 Ubuntu 和 Debian 系統中,底層真正的防火牆叫 iptablesnftables,但它們的語法極其複雜,反人類。因此,我們使用 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。

注意:搬瓦工給予用戶極高的自由度,故沒有設置安全組。所以不會出現這一問題。但這裏還是提出來,畢竟技多不壓身。下次如果你遇到這類問題你就知道要去哪裏查看並解決。

排查邏輯:

  1. 確認系統內部的 UFW 已經放行了該端口。
  2. 登錄你購買 VPS 的服務商網頁後台,找到「網絡安全」、「防火牆」或「安全組」設置卡片。
  3. 在網頁後台同樣添加一條入站規則,放行對應的 TCP 端口。

只有當「外部安全組」和「內部 UFW」都對該端口亮了綠燈,你的流量才能真正通行無阻。


掌握了以上基於 UFW 的默認拒絕與純 IP+端口放行策略,你的伺服器在互聯網中就已經具備了極強的自保能力。你不需要去配置複雜的攔截策略,只要守住「不認識的端口堅決不開」這條底線,就能屏蔽掉 99% 的無差別攻擊。