開始輸入,可搜尋發票、服務、域名、工單,以及 更多...
部署網站、資料庫或其他應用後,外部無法訪問往往是因為防火牆沒有放行對應埠。本文介紹 Linux 防火牆配置中最常用的兩種工具:CentOS、Rocky Linux、AlmaLinux 預設的 firewalld,以及 Ubuntu、Debian 常用的 ufw,講解如何檢視狀態、放行埠、限制來源 IP 和刪除規則。所有命令以 root 執行。
同一台伺服器上只應使用一種防火牆管理工具,同時啟用 firewalld 和 ufw 會造成規則混亂。先檢查哪一個正在執行:RHEL 系通常是 firewalld,Ubuntu 通常是 ufw(預設可能未啟用),部分 Debian 精簡映象兩者都沒有安裝。
systemctl is-active firewalld # CentOS / Rocky / AlmaLinux
ufw status # Debian / Ubuntu
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
可以按服務名(如 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
資料庫、管理後臺等敏感埠不建議對全網開放,可以用 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
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
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
先用 ss -tlnp 確認程式在監聽該埠,並且監聽地址是 0.0.0.0 而不是 127.0.0.1;再檢查程式自身配置和雲平台層面的安全策略。仍無法解決可提交工單。
技術上可以(systemctl stop firewalld 或 ufw disable),但不建議在公網伺服器上這樣做。更好的做法是隻放行需要的埠,其他一律拒絕。
通過 VNC 控制臺登入,執行 firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload 或 ufw allow 22/tcp 放行 SSH 埠即可恢復。
如按以上步驟操作後仍無法解決,歡迎提交工單聯絡 IMIDC 7×24 技術支援。提交時請註明伺服器 IP、作業系統、已執行的命令和報錯截圖,工程師可以更快定位問題。