ESC

開始輸入,可搜尋發票、服務、域名、工單,以及 更多...

搜尋... Ctrl+K
Linux 伺服器

Linux 防火牆配置教程:firewalld 與 ufw 放行埠

6 個步驟 7 分鐘閱讀 26 次閱讀 0
本文目錄

部署網站、資料庫或其他應用後,外部無法訪問往往是因為防火牆沒有放行對應埠。本文介紹 Linux 防火牆配置中最常用的兩種工具:CentOS、Rocky Linux、AlmaLinux 預設的 firewalld,以及 Ubuntu、Debian 常用的 ufw,講解如何檢視狀態、放行埠、限制來源 IP 和刪除規則。所有命令以 root 執行。

啟用或修改防火牆前,務必先放行 SSH 埠(預設 22,修改過請用新埠),否則會立即失去遠端連線。萬一失聯,可以通過客戶中心的 VNC 控制臺登入修復。

步驟 1:確認系統使用的防火牆

同一台伺服器上只應使用一種防火牆管理工具,同時啟用 firewalld 和 ufw 會造成規則混亂。先檢查哪一個正在執行:RHEL 系通常是 firewalld,Ubuntu 通常是 ufw(預設可能未啟用),部分 Debian 精簡映象兩者都沒有安裝。

systemctl is-active firewalld    # CentOS / Rocky / AlmaLinux
ufw status                       # Debian / Ubuntu

步驟 2:firewalld 安裝與狀態檢視(CentOS / Rocky / AlmaLinux)

firewalld 以“區域(zone)”管理規則,伺服器預設網絡卡一般屬於 public 區域。安裝並啟動後,用 --list-all 可以看到當前放行的服務和埠,預設通常只放行了 ssh。

# Install and start firewalld (CentOS / Rocky / AlmaLinux)
dnf install -y firewalld
systemctl enable --now firewalld

firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --list-all

步驟 3:firewalld 放行埠與服務

可以按服務名(如 http、https)放行,也可以直接按埠號或埠範圍放行。--permanent 表示寫入永久配置,必須執行 --reload 才會生效;不加 --permanent 的規則立即生效但重啟後丟失。

# Open by service name
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# Open by port / range
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=10000-10100/udp

# Apply and verify
firewall-cmd --reload
firewall-cmd --list-ports
firewall-cmd --list-services

步驟 4:firewalld 限制來源 IP 與刪除規則

資料庫、管理後臺等敏感埠不建議對全網開放,可以用 rich rule 只允許指定 IP 或網段訪問。不再需要的埠用 --remove-port 刪除。

# Allow MySQL 3306 only from one subnet
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" port port="3306" protocol="tcp" accept'

# Remove a port
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload

步驟 5:ufw 安裝與啟用(Ubuntu / Debian)

ufw 是 Ubuntu 提供的簡化防火牆工具,語法直觀。啟用前一定要先放行 SSH,然後設定預設策略:拒絕所有入站、允許所有出站。執行 ufw enable 時會提示可能中斷現有 SSH 連線,確認已放行 SSH 後輸入 y。

# Debian / Ubuntu
apt update && apt install -y ufw

# Allow SSH FIRST (use your custom port if you changed it)
ufw allow 22/tcp
ufw default deny incoming
ufw default allow outgoing
ufw enable
ufw status verbose

步驟 6:ufw 放行埠、限制 IP 與刪除規則

ufw 用 allow 放行埠,埠範圍需要指定協議;from 引數可以限制來源 IP。刪除規則時,先用 numbered 檢視編號再按編號刪除最方便。

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 10000:10100/udp
ufw allow from 198.51.100.0/24 to any port 3306 proto tcp

# Delete a rule by number
ufw status numbered
ufw delete 3
Docker 釋出的容器埠會直接寫入 iptables,可能繞過 ufw 規則。如果需要限制容器埠,請在 docker run 中繫結 127.0.0.1,或參考 Docker 官方關於防火牆的說明。

常見問題

防火牆已放行埠,外部仍然無法訪問?

先用 ss -tlnp 確認程式在監聽該埠,並且監聽地址是 0.0.0.0 而不是 127.0.0.1;再檢查程式自身配置和雲平台層面的安全策略。仍無法解決可提交工單。

可以直接關閉防火牆嗎?

技術上可以(systemctl stop firewalld 或 ufw disable),但不建議在公網伺服器上這樣做。更好的做法是隻放行需要的埠,其他一律拒絕。

啟用防火牆後 SSH 斷開了怎麼辦?

通過 VNC 控制臺登入,執行 firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload 或 ufw allow 22/tcp 放行 SSH 埠即可恢復。

如按以上步驟操作後仍無法解決,歡迎提交工單聯絡 IMIDC 7×24 技術支援。提交時請註明伺服器 IP、作業系統、已執行的命令和報錯截圖,工程師可以更快定位問題。

這篇文章有幫助嗎?

相關教程