在雲端服務器上,不正確的防火牆配置是導致服務無法訪問或執行個體遠端連線失敗的常見原因。本文旨在提供一套安全、標準化的操作流程,指導如何管理 Linux 執行個體的作業系統防火牆,例如檢查狀態、安全地啟用防火牆、開放特定服務連接埠,以及在排查問題時臨時禁用防火牆。
工作原理
所有進出ECS執行個體的網路流量均先經安全性群組過濾,再由作業系統防火牆處理。在同時滿足安全性群組和系統防火牆的允許存取策略後,才能到達目標應用。
安全性群組(雲網路層)
作用: 安全性群組在ECS的使用中扮演了雲上虛擬防火牆的角色,用於控制執行個體的出入方向流量。它在作業系統之外,是訪問執行個體的第一道關卡。
邏輯: 無論執行個體內部防火牆如何配置,如果安全性群組未允許存取某個連接埠(如 SSH 的 22 連接埠),所有來自外部的訪問請求都會在該層被直接拒絕。
作業系統防火牆(執行個體層)
作用: 運行在 Linux 作業系統內部的防火牆軟體,預設關閉,如
firewalld或ufw。它負責對通過了安全性群組的流量進行進一步的精細化控制。邏輯: 流量必須先通過安全性群組,才能到達作業系統防火牆。兩者是“與”關係,必須同時允許,流量才能最終到達部署的應用程式。
操作指南
查看防火牆狀態
在進行任何修改前,首先確認防火牆的當前運行狀態。
Alibaba Cloud Linux / CentOS / Red Hat
執行以下命令查看 firewalld 服務的狀態。
sudo firewall-cmd --statenot running:表示防火牆已關閉。running:表示防火牆處於啟用狀態。若提示
command not found,說明firewalld未安裝。可執行sudo yum install firewalld -y或sudo dnf install firewalld -y進行安裝。
Ubuntu / Debian
執行以下命令查看 ufw 服務的狀態。
sudo ufw statusStatus: active:表示防火牆處於啟用狀態。Status: inactive:表示防火牆已關閉。在 Debian 系統上,若提示
command not found,說明ufw未安裝。推薦執行sudo apt update && sudo apt install ufw -y進行安裝,以獲得更安全、便捷的管理體驗。
啟用防火牆
切勿在未配置允許規則前直接啟用防火牆,會導致串連被切斷,造成執行個體“失聯”。請遵循“先允許存取,後啟用”的原則。
Alibaba Cloud Linux / CentOS / Red Hat
將 SSH 服務永久性地添加到允許清單中,確保遠端管理通道不會中斷。
sudo firewall-cmd --permanent --add-service=ssh重新載入防火牆規則,使上一步的配置生效。
sudo firewall-cmd --reload啟動防火牆服務。
sudo systemctl start firewalld(可選): 將防火牆設定為開機自啟動,確保重啟後防護依然有效。
sudo systemctl enable firewalld
Ubuntu / Debian
添加規則以允許所有 SSH 串連。
sudo ufw allow ssh啟用防火牆。
ufw在啟用時會自動載入已有的allow規則,並預設設定為開機自啟動。sudo ufw enable執行此命令時,系統會提示操作可能中斷現有串連,輸入
y確認即可。由於已提前允許存取 SSH,串連不會中斷。
開放指定連接埠或服務
Alibaba Cloud Linux / CentOS / Red Hat
開放指定連接埠或者服務:
按服務名開放(推薦):
# 永久開放 HTTP 和 HTTPS 服務 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https按連接埠號碼開放:
# 永久開放 8080/TCP 通訊埠 sudo firewall-cmd --permanent --add-port=8080/tcp
使新規則生效: 添加或刪除規則後,必須重新載入防火牆。
sudo firewall-cmd --reload驗證規則是否生效:
該命令可查看當前即時區域下的所有規則,包括服務、連接埠、協議等。
sudo firewall-cmd --list-all
Ubuntu / Debian
使用ufw添加防火牆規則後即時生效,並自動持久化。
開放指定連接埠或者服務:
按服務名開放(推薦):
# 開放 HTTP 和 HTTPS 服務 sudo ufw allow http sudo ufw allow https按連接埠號碼開放:
# 開放 3306/TCP 通訊埠 sudo ufw allow 3306/tcp
驗證規則是否已生效:
執行以下命令查看已啟用的規則,包括允許和拒絕的服務、連接埠及其狀態(active/inactive)。
sudo ufw status
關閉防火牆
在診斷網路連接問題時,可以臨時關閉防火牆以判斷是否為其執行個體內部的阻斷策略所致。
不建議在生產環境關閉防火牆,在測試完成或問題定位後應重新啟用防火牆。
CentOS / Red Hat / Alibaba Cloud Linux
sudo systemctl stop firewalldUbuntu / Debian
sudo ufw disable應用於生產環境
最佳實務
最小許可權原則: 僅開放業務所必需的連接埠。對於資料庫等核心服務,應僅對授信的內網 IP 開放,避免暴露於公網。
備用通道: 在進行重大的防火牆規則變更前,建議先遠端連線到執行個體,已建立串連的會話即使在防火牆規則變更之後依舊保持,可以通過此備用通道修複問題。
風險防範
日誌與監控: 定期審計防火牆日誌,以發現異常訪問。
firewalld: 日誌通常由journald管理,使用sudo journalctl -u firewalld查看。ufw: 日誌通常位於/var/log/ufw.log。
常見問題
關閉了執行個體內的防火牆,為什麼服務還是無法訪問?
原因通常在於忽略了雲環境下的第一層防護。請按以下順序排查:
檢查安全性群組: 這是首要排查點。登入ECS控制台-安全性群組,檢查執行個體所屬的安全性群組,確認入方向規則已允許存取公網 IP 位址和連接埠。
檢查服務監聽狀態: 在執行個體內部執行
ss -tunlp | grep <連接埠號碼>或netstat -tunlp | grep <連接埠號碼>,確認應用程式是否已成功啟動並在預期的 IP 位址(如0.0.0.0)和連接埠上監聽。檢查網路 ACL: 如果執行個體已關聯網路ACL,請檢查其規則是否允許相關流量通過。
執行
firewall-cmd或ufw命令時提示command not found怎麼辦?這表示對應的防火牆管理工具未安裝。
在 CentOS/Red Hat/Alibaba Cloud Linux 上,執行
sudo yum install firewalld -y或sudo dnf install firewalld -y。在 Ubuntu/Debian 上,執行
sudo apt update && sudo apt install ufw -y。