如何使用 firewall-cmd 設定 SLES 15 防火牆

即使服務運行在 SLES 15 伺服器上,遠端用戶端仍然可能因防火牆阻止新的傳入流量而逾時。解決方法通常是識別活動的 firewalld 區域,並僅允許應用程式所需的服務或連接埠。用於執行此操作的 SLES 命令列工具是firewall-cmd。

本指南遵循 SUSE SLES 15 SP7 安全加固指南和 firewalld 命令參考,並於 2026 年 10 月 7 日進行了驗證。早期服務包和升級到 SLES 12 的系統可能具有不同的狀態或舊版防火牆配置。終端影像僅顯示範例,並非實際伺服器的擷取結果;請將介面名稱、區域和服務替換為您主機上的對應值。

1. 檢查 firewalld 是否正在運行

SUSE 文件顯示,firewalld 在 SLES 15 上預設安裝並啟用。 YaST 通常會在安裝後啟動它,並將介面置於預設public區域。不過,為了確保預設設定不變,最好還是檢查一下機器。請使用具有相應權限的帳戶執行以下命令sudo:

sudo systemctl status firewalld
sudo firewall-cmd --state

服務管理器應報告該服務firewalld處於活動狀態,並firewall-cmd --state應報告其他資訊running。如果該服務已安裝但已停止,請啟動它並使其在啟動時生效:

sudo systemctl enable --now firewalld

如果firewall-cmd缺少該firewalld軟體包,請檢查它是否已安裝並位於已啟用的 SUSE 軟體倉庫中。切勿在受管伺服器上盲目安裝或替換防火牆組件。

SLES 終端範例,用於檢查 firewalld 服務狀態並列出 eth0 上的活動公共區域。
範例終端檢查 firewalld 狀態,並顯示一個具有 eth0 介面的活動公共區域範例。

2. 找到保護伺服器介面的區域

Firewalld 將規則分組到不同的區域中,每個區域代表不同的信任等級。public非信任區域通常用於不受信任的網路。在一個區域中開啟的服務不會自動在所有區域中打開,因此,如果正確的規則位於錯誤的區域中,則可能會導致應用程式無法存取。

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --zone=public --list-all

使用 active-zone 輸出查找附加到承載客戶端流量的介面的區域。介面名稱可能是 `<interface_name>` eth0、ens160`<interface_name>` 或其他名稱。如果需要檢查單一接口,請執行:

sudo firewall-cmd --get-zone-of-interface=eth0

替換eth0為實際接口。未明確分配給區域的介面將由預設區域處理。請勿隨意更改預設區域:這樣做可能會影響依賴該區域的介面。在遠端伺服器上,請識別 SSH 或其他管理區域,並在重新載入防火牆設定之前確認其存取規則。如果存在控制台或帶外恢復路徑,請保持其可用。

SLES 終端範例,展示了公共預設區域、介面 eth0、SSH 服務和目前區域規則
區域清單顯示了在進行任何變更之前,哪些介面和服務與範例公共區域相關聯。

3. 選擇命名服務或特定連接埠

firewalld服務是一個命名定義,可以包含一個或多個連接埠和協定。通常,透過名稱允許已知服務比記住其連接埠號碼更容易。在使用服務定義前,請檢查已安裝的服務清單並仔細查看其定義:

sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=http

對於 Web 伺服器,預先定義的http服務通常會覆寫 TCP 連接埠 80;httpsTLS Web 流量則使用單獨的服務。 SLES 文件也展示了基於服務的方法,並提供了 DHCP 等範例。請使用應用程式實際需要的服務,如果不確定,請在本機上驗證服務定義。

如果沒有預先定義的服務符合要求,則只需開放所需的連接埠和協定。例如,可以允許監聽 TCP 連接埠 8443 的應用程式通過--add-port=8443/tcp防火牆。在防火牆中開啟連接埠並不會啟動應用程式、將其綁定到網路或使其安全;請確認服務本身已配置為監聽目標位址。

先測試臨時規則

對於短期測試,請將規則套用至執行時間配置。運行時變更會立即生效,但除非您同時永久儲存,否則防火牆重新載入或服務重新啟動後變更將會遺失。 Firewalld 支援有時限規則,當您希望測試自動過期時,此功能非常有用:

sudo firewall-cmd --zone=public --add-service=http --timeout=5m

對於一次性連接埠測試,請使用 ` --add-port=8443/tcp --timeout=5m<zone>` 取代 `<zone>` --add-service=http。選擇實際包含伺服器介面的區域;public如果您的主機使用其他區域,請勿複製。

SLES 終端範例:將 HTTP 服務永久新增至公共區域並重新載入 firewalld。
範例命令將 HTTP 服務新增至公共區域的永久配置中,然後重新載入 firewalld 以套用它。

4. 儲存規則並重新載入 firewalld

當您準備保留某條規則時,請將其新增至永久配置。以下範例允許在公共區域中使用 HTTP 協定:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload

對於 HTTPS,請重複執行永久命令--add-service=https。對於自訂應用程式端口,請使用以下命令:

sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
sudo firewall-cmd --reload

這些範例首先修改永久配置,然後重新載入系統以使新規則生效。重新載入也會將運行時設定替換為永久配置。因此,其他地方的任何運行時更改都可能被丟棄。在重新載入生產系統之前,請務必檢查重要的執行時間規則和永久規則,尤其是遠端管理存取權限。

還有一個先運行時後服務的流程:在執行時測試規則,確認服務正常運作,然後新增相同的規則--permanent並重新載入。除非您打算儲存所有目前執行時間規則(包括其他管理員或軟體所做的臨時變更),否則請避免將其用作--runtime-to-permanent捷徑。

如何驗證變更是否生效?

檢查目前運行時規則和已儲存規則。對於公共區域中的 HTTP 服務,請執行:

sudo firewall-cmd --zone=public --query-service=http
sudo firewall-cmd --permanent --zone=public --list-services
sudo firewall-cmd --check-config

查詢應傳回結果yes,永久服務清單應包含http,且配置檢查應成功完成。對於連接埠規則,請在等效命令中使用 `--port`--query-port=8443/tcp和--list-ports`--port`。此外,也應從可存取伺服器的獨立用戶端進行測試;本機防火牆查詢僅確認規則存在,並不能確認 DNS、路由、上游防火牆或應用程式監聽器是否正確。

SLES 終端範例,確認執行時間配置和永久配置中均允許 HTTP,並檢查 firewalld 配置
驗證命令檢查活動服務規則、已儲存的服務清單和永久設定語法。

常見問題及安全解決方法

  • 規則已存在,但連線仍然逾時:請確保已將其新增至與用戶端介面關聯的區域。然後驗證應用程式是否正在監聽預期的位址和端口,並檢查上游網路防火牆。
  • 該規則在重新加載之前一直有效:它可能只在運行時添加了該規則。新增該規則--permanent並重新加載,然後查詢兩個配置。
  • SSH 存取權有風險:請在重新載入之前檢查活動區域和永久區域的服務。如果需要 SSH 服務但該ssh服務不存在,請在重新載入之前將其永久新增至正確的區域。在測試第二個連線之前,請勿關閉目前的遠端會話。
  • 您正在從較舊的 SUSE 版本遷移: SLES 15 用 firewalld 取代了 SuSEfirewall2。 SUSE 警告說,舊版防火牆設定檔的向後相容性有限;請查閱遷移指南,不要想當然地認為所有舊規則都已轉換。
  • 規則似乎有衝突: firewalld 旨在管理主機的防火牆規則。 SUSE 警告不要使用諸如 之類的工具分別修改相同的規則iptables,這可能會混淆當前配置。

若要移除不必要的永久服務或端口,請使用匹配的--remove-service`or`--remove-port選項--permanent,然後重新載入並再次驗證。例如,使用 `removeHTTP` 從公共區域移除 HTTP,然後sudo firewall-cmd --permanent --zone=public --remove-service=http使用 `removeHTTP` sudo firewall-cmd --reload。

完成前請先自我檢查

  • firewalld正在運行,並在伺服器啟動時啟動。
  • 您已確定接收流量的介面的活動區域。
  • 該區域只允許應用程式所需的服務或連接埠。
  • 重新載入前後,遠端管理仍然可用。
  • 該規則出現在執行時間查詢和永久查詢中,並且配置檢查通過。
  • 從另一台主機進行的連接測試證實應用程式可存取。

有關特定版本的詳細信息,請參閱SUSE SLES 15 SP7 防火牆指南、firewall-cmd 手冊以及 firewalld 關於運行時和永久配置以及打開端口或服務的說明。

留下評論

Fix Screen Tearing on Intel Graphics in Pardus Linux: A Result-Focused Guide

Fix Screen Tearing on Intel Graphics in Pardus Linux: A Result-Focused Guide

Fix Intel graphics screen tearing in Pardus Linux by checking X11 vs. Wayland, compositor settings, refresh rate, active Xorg driver, and TearFree only when appropriate.

如何使用 firewall-cmd 設定 SLES 15 防火牆

如何使用 firewall-cmd 設定 SLES 15 防火牆

在 SLES 15 上設定 firewalld:檢查區域、允許服務或連接埠、儲存永久規則、安全重新載入並驗證存取。

SLES 線上修補程式配置指南:無需重新啟動即可套用核心更新

SLES 線上修補程式配置指南:無需重新啟動即可套用核心更新

在 SLES 15 SP7 上啟用核心即時修補,無需重新啟動即可應用支援的修復程序,驗證活動補丁,並了解何時仍需要重新啟動核心。

如何在 SUSE Linux Enterprise Server 15 上啟用 FIPS 模式

如何在 SUSE Linux Enterprise Server 15 上啟用 FIPS 模式

使用 SUSE 支援的設定公用程式在 SLES 15 上啟用 FIPS 模式,安全重啟,驗證核心和加密策略狀態,並檢查認證限制。

如何在不違反安全策略的情況下在 Gooroom OS 上安裝 Google Chrome

如何在不違反安全策略的情況下在 Gooroom OS 上安裝 Google Chrome

使用官方 .deb 軟體包、APT、策略檢查、更新指南和受管設備修復程序,安全地在 Gooroom OS 上安裝 Google Chrome。

如何安全地將SLES系統日誌匯出到遠端Syslog伺服器

如何安全地將SLES系統日誌匯出到遠端Syslog伺服器

使用 rsyslog、TLS 憑證、對等名稱驗證、佇列、驗證和測試,安全地將 SLES 系統日誌轉送到遠端 syslog 伺服器。

SLES 15 Active Directory 與 SSSD 整合:逐步指南

SLES 15 Active Directory 與 SSSD 整合:逐步指南

使用 YaST 將 SLES 15 加入到具有 SSSD 的 Active Directory。準備 DNS 和時間,配置網域登錄,驗證 Kerberos,並比較 SSSD、Winbind 和 realmd。

修正 Pardus Linux 系統上的 Realtek RTL8821CE Wi-Fi 驅動程式問題

修正 Pardus Linux 系統上的 Realtek RTL8821CE Wi-Fi 驅動程式問題

透過檢查內建的 rtw88 驅動程式、Realtek 韌體、rfkill、NetworkManager 和安全性回退選項來修復 Pardus Linux 上的 RTL8821CE Wi-Fi。

修正 Debian 12 中 systemd-resolved 導致的「DNS 解析暫時失敗」問題

修正 Debian 12 中 systemd-resolved 導致的「DNS 解析暫時失敗」問題

使用 systemd-resolved 診斷和修復 Debian 12 DNS 解析失敗,包括 resolv.conf、NetworkManager、networkd、快取和驗證。

如何安全地在 Windows 11 系統上安裝 Pardus Linux 雙系統

如何安全地在 Windows 11 系統上安裝 Pardus Linux 雙系統

在 Windows 11 旁邊安裝 Pardus 25.2,方法是備份、縮小 Windows 磁碟區、啟動 UEFI USB 並保護現有的 EFI 和復原分割區。