返回部落格

在 CentOS 7 上使用 FirewallD 設定防火牆

在 CentOS 7 上使用 FirewallD 設定防火牆

簡介

Firewalld 是一款適用於許多 Linux 發行版的防火牆管理解決方案。它作為 Linux 核心提供的 iptables 封包過濾系統的介面。在本指南中,您將學習如何為您的伺服器設定防火牆。我們還將向您展示使用 firewall-cmd 管理工具管理防火牆的基本方法。

Firewalld 基礎知識

FirewallD 使用區域(zones)和服務(services)的概念,而不是 iptables 的鏈(chain)和規則(rules)。根據您設定的區域和服務,您可以控制允許或不允許進出系統的流量。可以使用命令列公用程式 firewall-cmd 來設定和管理 FirewallD。

安裝並啟用防火牆以在開機時啟動

在大多數 Linux 發行版中,firewallD 已經安裝。但是,如果您需要自行安裝,請輸入以下語法:

安裝 firewalld 後,您可以啟用該服務並重新啟動伺服器:

接下來,重新啟動您的伺服器。成功重新啟動伺服器後,您的防火牆將被啟用。之後,使用以下命令驗證服務是否已啟用:

check firewall state FirewallD

輸出顯示預設的防火牆設定正在運作。

檢查預設值

您可以使用此命令檢查伺服器選取的區域:

check firewall default zone

輸入以下內容以驗證作用中的區域:

firewall active zones

使用此語法列印預設區域的設定,以了解附加到公共區域的規則:

list all rules FirewallD

輸出表示此區域既是預設區域也是作用中區域。它還顯示 eth0 和 eth1 介面已分配給此區域。

檢查其他區域

除了預設和作用中區域外,還有其他區域供您探索。輸入此命令以查看所有可用的區域:

firewall check other zones

在 –list-all 命令中加入 –zone= 參數,以檢查分配給特定區域的設定:

check zone configuration FirewallD

 變更介面區域

您可以使用 –change-interface 選項輕鬆變更介面區域。以下命令將把介面 eth1 分配給工作區:

您可以輸入以下內容來驗證變更:

changing firewall interface zones FirewallD

變更預設區域

要變更預設區域,請使用 –set-default-zone,後跟您要設為預設的區域名稱。例如,要變更預設區域,您應該執行以下命令:

接下來,您可以使用以下命令驗證變更:

firewall change default zone

為您的應用程式設定規則

讓我們來了解為服務定義防火牆例外所需的基本步驟:

將服務新增至您的區域

最直接的方法是將您需要的連接埠或服務新增至您正在使用的區域。同理,您可以使用 –get-services 選項來查看所有可用的服務:

firewall get services FirewallD

您可以使用 –add-service = 參數來啟用特定區域的服務。此操作針對預設區域或由 –zone = 參數定義的任何區域。預設情況下,僅設定目前的防火牆工作階段。您可以透過啟用 –permanent 旗標來設定永久的防火牆組態。例如,如果您正在執行提供一般 HTTP 流量的網頁伺服器,您可以透過輸入以下內容,在本次工作階段中允許我們 “public” 區域中介面的此流量:

如果您想變更預設區域,可以省略 –zone =。您可以使用 –list-all 或 –list-services 操作來檢查操作是否成功:

add service to zone

一旦您確認一切運作正常,您很可能希望變更永久防火牆規則,以便在重新啟動後仍可使用您的服務。我們可以透過輸入以下語法,永久變更我們的 “public” 區域:

您可以透過在 –list-services 操作中加入 –permanent 旗標來檢查是否成功。您必須在所有永久操作中使用 sudo:

您的 “public” 區域現在允許連接埠 80 上的 HTTP 流量。您可以使用以下命令將此設定新增至目前的工作階段和持久規則集中:

如果沒有符合您需求的服務,您有兩個極佳的選擇來處理這種情況:

  1. 為您的區域開啟連接埠

為特定應用程式新增支援最直接的方法是開啟每個區域中使用的連接埠。這非常簡單,只需為您需要開啟的連接埠指定連接埠或連接埠範圍以及對應的協定即可。例如,如果您的應用程式在連接埠 5000 上執行並使用 TCP,您可以使用 –add-port = 參數將其新增至此工作階段的 “public” 區域。協定可以是 TCP 或 UDP:

為了檢查操作是否成功,請使用 –list-ports 操作:

您也可以透過用連字號分隔範圍中的起始和結束連接埠,來指定連續連接埠的範圍。例如,如果您的應用程式使用 UDP 連接埠 4990 到 4999,您可以透過輸入以下內容在 “public” 中開啟它們:

測試後,我們可能想將它們新增至永久防火牆。您可以透過輸入以下內容來執行此操作:

adding ports to permanent firewall

  1. 定義服務

服務是具有關聯名稱和描述的連接埠集合。服務比連接埠更容易管理,但需要一些初始工作。最直接的入門方法是將現有的指令碼(位於 / usr / lib / firewalld / services 中)複製到 /etc/firewalld/services 目錄。例如,您可以複製 SSH 服務定義以在 “example” 服務定義中使用,如下所示。檔名減去 XML 後綴決定了防火牆服務清單中的服務名稱:

此時,您可以調整複製檔案中的定義:

首先,該檔案包含您複製的 SSH 定義:

此定義的大部分由中介資料組成。您必須變更 <short> 標籤中的服務簡短名稱。這是一個易於辨識的服務名稱。假設對於我們的 “example” 服務,我們必須為 TCP 開放連接埠 7777,為 UDP 開放連接埠 8888。您可以透過按 i 進入 INSERT 模式來變更現有定義:

接下來,按 ESC 並輸入 :x 以儲存並關閉檔案。然後,輸入以下命令重新啟動防火牆,以便存取您的新服務;

之後,使用以下命令獲取可用服務的清單:

get services

此服務現在已在您的區域中可用。

建立您的區域

雖然預定義的區域對大多數使用者來說可能已經足夠,但定義您自己的區域以更完整地描述其功能可能會很有用。

新增區域時,請將其新增至您的永久防火牆設定中。然後您可以重新載入以將設定套用至您的工作階段。例如,您可以透過輸入以下內容來建立前面討論的兩個區域:

您可以使用此命令確認它們存在於您的永久設定中:

firewall zones

重新載入防火牆以將這些新區域納入作用中設定:

現在,您可以將適當的服務和連接埠分配給您的區域。例如,對於 “publicweb” 區域,您可能想要新增 SSH、HTTP 和 HTTPS 服務:

list public web zone

 

此外,您可以使用此命令將 DNS 服務新增至您的「privateDNS」區域:

list privateDNS zone FirewallD

接下來,您可以將您的介面變更為這些新區域以進行測試:

測試設定以查看其是否正常運作。如果這些值對您有用,您必須將相同的規則新增至永久設定中。您可以透過使用 —permanent 指示器重新套用規則來執行此操作:

 

永久套用這些規則後,您可以重新啟動網路並重新載入防火牆服務:

檢查區域是否已正確分配:

check active zones FirewallD

此外,請確保兩個區域都具有正確的服務:

如果您想將其中一個區域設定為其他介面的預設區域,您必須使用此命令並搭配參數 –set-default-zone= 來設定此行為:

結論

至此,您已成功建立了自己的區域。您應該對在 CentOS 系統上管理 firewalld 服務以進行日常使用有了基本的瞭解。深入掌握 firewalld 服務能讓您充分發揮其強大功能與靈活性。

祝您使用愉快!

 

author

Akshay Nagpal

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。