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

Bandwagon伺服器如何放行與屏蔽特定埠

出自md5.pw
於 2026年2月1日 (日) 22:49 由 Lan留言 | 貢獻 所做的修訂 (Bandwagon服务器如何放行和屏蔽特定端口)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

由於搬瓦工的伺服器架構設計旨在提供最大的靈活性,所以默認情況下未配置外部安全組(Security Group)。這意味著你的伺服器直接暴露在公網環境中。

為了保障你的數據安全,防止惡意掃描和攻擊,建議在系統內部配置防火牆。本教程將教你如何使用Linux 系統中強大且高效的防火牆工具 —— Nftables,來實現埠放行與屏蔽。

注意: 在進行任何防火牆操作前,請務必確保您當前的 SSH 連接埠(默認為 22)已被放行,否則您可能會將自己鎖定在伺服器之外!


什麼是 Nftables?

Nftables 是 Linux 內核的新一代包過濾框架,旨在替代老舊的 iptables。它擁有更高的性能、更清晰的語法以及原子操作支持,是維護伺服器安全的首選工具。(想要深入了解也可以查閱下面提供的維基百科資料)

Nftables 維基百科


第一部分:Debian / Ubuntu 系列安裝指南

本節適用於 Debian 10/11/12 及 Ubuntu 20.04/22.04/24.04 等系統。

1. 更新系統組件

在安裝任何軟體之前,記得使用下面命令保持系統源的最新狀態。

sudo apt update && sudo apt upgrade -y

2. 安裝 Nftables

Debian 和 Ubuntu 的倉庫中默認包含 nftables。

sudo apt install nftables -y

3. 啟用並開機自啟

安裝完成後,我們需要啟用服務,使其在伺服器重啟後依然生效。

sudo systemctl enable nftables
sudo systemctl start nftables

第二部分:CentOS Stream 系列安裝指南

本節適用於 CentOS Stream 8/9 等系統。 注意: CentOS 默認通常使用 firewalld 作為防火牆前端。為了使用純粹的 nftables,我們需要先禁用 firewalld 以避免衝突。

1. 更新系統組件

sudo dnf update -y

2. 移除 Firewalld (關鍵步驟)

為了防止規則衝突,我們先停止並禁用 firewalld。

sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 可选:如果你确定不再需要它,可以卸载
sudo dnf remove firewalld -y

3. 安裝 Nftables

sudo dnf install nftables -y

4. 啟用並開機自啟

sudo systemctl enable nftables
sudo systemctl start nftables

第三部分:Rocky Linux / AlmaLinux 系列安裝指南

Rocky Linux 和 AlmaLinux 作為 RHEL 的下游發行版,操作邏輯與 CentOS 類似,同樣需要注意清理預裝的防火牆管理工具。

1. 更新系統組件

sudo dnf update -y

2. 清理預裝的 Firewalld

sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 建议卸载以保持环境纯净
sudo dnf remove firewalld -y

3. 安裝 Nftables

sudo dnf install nftables -y

4. 啟用並開機自啟

sudo systemctl enable nftables
sudo systemctl start nftables

第四部分:Nftables 通用教程

無論使用上述哪種系統,Nftables 的配置文件路徑通常統一為 /etc/nftables.conf。我們將通過修改這個文件來實現「默認拒絕所有,僅放行特定埠」的安全策略。

1. 備份默認配置

在修改前,先備份原始文件。

sudo cp /etc/nftables.conf /etc/nftables.conf.bak

2. 編寫安全規則(核心步驟)

使用文本編輯器(如 nanovim)打開配置文件:

sudo nano /etc/nftables.conf

清空文件內容,並複製以下推薦配置模板。這個模板會自動放行 SSH 埠,並拒絕其他非必要的入站流量。

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        # 1. 允许本地回环接口 (Localhost)
        iifname "lo" accept

        # 2. 允许已建立的连接和相关流量 (比如你主动访问外网的返回数据)
        ct state established,related accept

        # 3. ICMP (Ping) 设置:允许被 Ping (可选,如果不想被 Ping 可改为 drop)
        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        # 4. === 关键端口放行区 ===
      
        # [必须] 放行 SSH 端口 (默认22,如果你改了端口请修改这里)
        tcp dport 22 accept

        # [示例] 放行 Web 服务端口 (HTTP/HTTPS)
        # tcp dport { 80, 443 } accept
      
        # [示例] 这是一个被屏蔽的端口演示 (由于默认策略是 drop,不写就是屏蔽,但也可以显式拒绝)
        # tcp dport 8080 reject
    }
  
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
  
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

配置詳解:

  • policy drop;:這是最關鍵的一行。它意味著除了你在下面明確允許的,其他所有流量都會被丟棄。這是最安全的「白名單」模式。
  • tcp dport 22 accept:務必保留此行,否則會斷開 SSH 連接。

3. 應用配置

保存文件後(在 nano 中按 Ctrl+O 回車保存,Ctrl+X 退出),運行以下命令重載配置,使其立即生效:


sudo systemctl reload nftables

如果命令沒有報錯,說明防火牆已成功運行。


第五部分:日常管理與操作

如何放行新的埠?

比如你安裝了一個面板,需要放行 8888 埠。

  1. 編輯 /etc/nftables.conf
  2. chain input 中添加一行:tcp dport 8888 accept
  3. 運行 sudo systemctl reload nftables

如何屏蔽特定 IP?

如果您發現某個 IP (例如 192.168.1.100) 在惡意掃描你的伺服器,可以在配置文件中 SSH 規則之前添加:

代碼段

ip saddr 192.168.1.100 drop

如何屏蔽特定埠?

如果你使用的是上述「白名單模式」(Policy Drop),只需要刪除對應的 accept 規則即可自動屏蔽。 如果你使用的是「黑名單模式」(Policy Accept),則需要顯式添加:

tcp dport 3306 drop

最後

通過以上步驟,你已經在沒有安全組的情況下,為你的 VPS 建立了一道堅固的防線。Nftables 的強大之處在於其靈活性,你可以根據業務需求編寫更加複雜的流量轉發和限流規則。