如何在 Linux 上開始使用 firewalld

已發表: 2022-07-08
顯示 Linux 命令行的筆記本電腦屏幕。
fatmawati achmad zaenuri/Shutterstock.com

如果您正在尋找一種現代的、功能強大的 Linux 防火牆,它易於在命令行上或使用其 GUI 界面進行配置,那麼firewalld可能就是您正在尋找的。

對防火牆的需求

網絡連接有起點和終點。 源端的軟件請求連接,而目標端的軟件接受或拒絕它。 如果它被接受,數據包(通常稱為網絡流量)可以通過連接在兩個方向上傳遞。 無論您是在自己家中的房間內共享,從家庭辦公室遠程連接到工作,還是使用遠程的基於雲的資源,這都是正確的。

防火牆實際上是做什麼的?
相關防火牆實際上做什麼?

良好的安全實踐表明您應該限制和控制與計算機的連接。 這就是防火牆的作用。 它們按 IP 地址、端口或協議過濾網絡流量,並拒絕不符合您已配置的一組預定義標準(防火牆規則)的連接。 他們就像一個專屬活動中的安保人員。 如果你的名字不在名單上,你就不能進去。

當然,您不希望您的防火牆規則過於嚴格以至於您的正常活動受到限制。 配置防火牆越簡單,您無意中設置衝突或嚴苛規則的可能性就越小。 我們經常聽到用戶說他們不使用防火牆,因為它太複雜而難以理解,或者命令語法太不透明。

firewalld防火牆功能強大且易於設置,無論是在命令行上還是通過其專用的 GUI 應用程序。 在底層,Linux 防火牆依賴於內核端網絡過濾框架netfilter 。 在用戶領域,我們可以選擇與netfilter交互的工具,例如iptablesufw簡單的防火牆和firewalld

在我們看來, firewalld提供了功能、粒度和簡單性的最佳平衡。

安裝防火牆

firewalld有兩個部分。 有firewalld ,提供防火牆功能的守護進程,還有firewall-config 。 這是firewalld的可選 GUI。 請注意, firewall-config中沒有“d”。

在 Ubuntu、Fedora 和 Manjaro 上安裝firewalld在所有情況下都很簡單,儘管它們各自對預安裝和捆綁的內容有自己的看法。

要在 Ubuntu 上安裝,我們需要安裝firewalldfirewall-config

 sudo apt install firewalld 

在 Ubuntu 上安裝 firewalld

 sudo apt install firewall-config 

在 Ubuntu 上安裝防火牆配置

在 Fedora 上,已經安裝了firewalld 。 我們只需要添加firewall-config

sudo dnf install firewall-config

在 Fedora 上安裝防火牆配置

在 Manjaro 上,這兩個組件都沒有預先安裝,但它們被捆綁到一個包中,因此我們可以使用一個命令安裝它們。

 sudo pacman -Sy firewalld 

在 Manjaro 上使用一個命令安裝 firewalld 和 firewall-config

我們需要啟用firewalld守護程序以允許它在每次計算機啟動時運行。

 sudo systemctl 啟用防火牆

使firewalld在啟動時自動啟動

我們需要啟動守護程序,以便它現在運行。

 sudo systemctl 啟動防火牆

啟動 firewalld 守護進程

我們可以使用systemctl來檢查firewalld是否已經啟動並且運行沒有問題:

 sudo systemctl status firewalld 

使用 systemctl 檢查 firewalld 的狀態

我們也可以使用firewalld來檢查它是否在運行。 這使用帶有--state選項的firewall-cmd命令。 請注意, firewall-cmd中沒有“d”:

 須藤防火牆-cmd --state 

使用 firewall-cmd 命令檢查 firewalld 的狀態

現在我們已經安裝並運行了防火牆,我們可以繼續配置它。

區域的概念

firewalld防火牆基於區域。 區域是防火牆規則和相關網絡連接的集合。 這使您可以定制不同的區域和一組不同的安全限制,您可以在這些區域下進行操作。 例如,您可能定義了一個用於常規日常運行的區域,另一個用於更安全運行的區域,以及一個“無進無出”的完全鎖定區域。

要從一個區域移動到另一個區域,並有效地從一個安全級別移動到另一個安全級別,您需要將您的網絡連接從它所在的區域移動到您希望在其下運行的區域。

這使得從一組定義的防火牆規則移動到另一組的速度非常快。 使用區域的另一種方法是讓您的筆記本電腦在您在家時使用一個區域,而在您外出並使用公共 Wi-Fi 時使用另一個區域。

firewalld帶有九個預配置的區域。 可以編輯這些區域並添加或刪除更多區域。

  • drop :所有傳入的數據包都被丟棄。 允許傳出流量。 這是最偏執的設置。
  • block :所有傳入的數據包都被丟棄,並且icmp-host-prohibited消息被發送給發起者。 允許傳出流量。
  • 受信任:所有網絡連接都被接受,其他系統受信任。 這是最值得信賴的設置,應該限制在非常安全的環境中,例如強制測試網絡或您的家中。
  • public :此區域用於公共網絡或其他任何其他計算機都不可信的網絡。 接受一小部分常見且通常安全的連接請求。
  • external :此區域用於啟用了 NAT 偽裝(端口轉發)的外部網絡。 您的防火牆充當路由器,將流量轉發到您的私有網絡,該網絡仍然可以訪問,但仍然是私有的。
  • internal :當您的系統充當網關或路由器時,此區域旨在用於內部網絡。 該網絡上的其他系統通常是受信任的。
  • dmz :此區域適用於位於外圍防御之外的“非軍事區”的計算機,並且對您網絡的訪問受限。
  • 工作:該區域用於工作機器。 此網絡上的其他計算機通常是受信任的。
  • home :此區域用於家用機器。 此網絡上的其他計算機通常是受信任的。

家庭、工作和內部區域在功能上非常相似,但是將它們分成不同的區域允許您根據自己的喜好微調區域,為特定場景封裝一組規則。

一個好的起點是找出默認區域是什麼。 這是安裝firewalld時添加網絡接口的區域。

 sudo firewall-cmd --get-default-zone 

查找默認的 firewalld 區域

我們的默認區域是公共區域。 要查看區域的配置詳細信息,請使用--list-all選項。 這列出了為區域添加或啟用的任何內容。

 sudo firewall-cmd --zone=public --list-all 

列出公共區域的詳細信息

我們可以看到該區域與網絡連接 enp0s3 相關聯,並且允許與 DHCP、mDNS 和 SSH 相關的流量。 由於至少有一個接口已添加到該區域,因此該區域處於活動狀態。

firewalld允許您添加您希望接受來自區域的流量的服務。 然後該區域允許該類型的流量通過。 例如,這比記住 mDNS 使用端口 5353 和 UDP 協議並手動將這些詳細信息添加到區域更容易。 雖然你也可以這樣做。

如果我們在帶有以太網連接和 Wi-Fi 卡的筆記本電腦上運行前面的命令,我們會看到類似的東西,但有兩個接口。

 sudo firewall-cmd --zone=public --list-all 

具有兩個接口的區域

我們的兩個網絡接口都已添加到默認區域。 該區域具有與第一個示例相同的三個服務的規則,但 DHCP 和 SSH 已添加為命名服務,而 mDNS 已添加為端口和協議配對。

要列出所有區域,請使用--get-zones選項。

 sudo firewall-cmd --get-zones 

列出所有防火牆區域

要一次查看所有區域的配置,請使用--list-all-zones選項。 您需要將其通過管道傳輸到less中。

 sudo firewall-cmd --list-all-zones | 較少的

列出所有區域的詳細信息

這很有用,因為您可以滾動瀏覽列表,或使用搜索工具來查找端口號、協議和服務。

在less中顯示所有區域的詳細信息

在我們的筆記本電腦上,我們要將以太網連接從公共區域移動到家庭區域。 我們可以使用--zone--change-interface選項來做到這一點。

 sudo firewall-cmd --zone=home --change-interface=enp3s0 

將網絡接口添加到主區域

讓我們看一下 home zone,看看我們是否進行了更改。

 sudo firewall-cmd --zone=home --list-all 

添加了網絡接口的主區域

它有。 我們的以太網連接被添加到主區域。

然而,這不是永久性的改變。 我們更改了防火牆的運行配置,而不是其存儲的配置。 如果我們重新啟動或使用--reload選項,我們將恢復到以前的設置。

要使更改永久化,我們需要使用恰當命名的--permanent選項。

這意味著我們可以根據一次性需求更改防火牆,而無需更改防火牆的存儲配置。 我們還可以在將更改發送到配置之前對其進行測試。 為了使我們的更改永久化,我們應該使用的格式是:

 sudo firewall-cmd --zone=home --change-interface=enp3s0 --permanent

如果您進行了一些更改但忘記在其中一些上使用--permanent ,您可以使用--runtime-to-permanent選項將防火牆當前運行會話的設置寫入配置。

 sudo firewall-cmd --runtime-to-permanent 

重新加載防火牆配置

相關:什麼是 DHCP(動態主機配置協議)?

添加和刪除服務

firewalld知道很多服務。 您可以使用--get-services選項列出它們。

 sudo firewall-cmd --get-services 

列出 firewalld 可以按名稱引用的服務

我們的firewalld版本列出了 192 個服務。 要在區域中啟用服務,請使用--add-service選項。

認可服務清單

我們可以使用--add-service選項將服務添加到區域。

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

將 HTTP 服務添加到區域

服務的名稱必須與其在firewalld的服務列表中的條目相匹配。

要刪除服務,請使用--remove-service替換--add-service service

添加和刪除端口和協議

如果您更願意選擇添加哪些端口和協議,您也可以這樣做。 您需要知道要添加的流量類型的端口號和協議。

讓我們將 HTTPS 流量添加到公共區域。 它使用端口 443,是 TCP 流量的一種形式。

 sudo firewall-cmd --zone=public --add-port=443/tcp 

將端口和協議配對添加到區域

您可以通過在第一個和最後一個端口之間使用連字符“ - ”來提供一系列端口,例如“400-450”。

要刪除端口,請將--add-port替換為--remove-port

相關: TCP 和 UDP 有什麼區別?

使用圖形用戶界面

按“超級”鍵並開始輸入“防火牆”。 您將看到firewall-config應用程序的磚牆圖標。

單擊該圖標以啟動應用程序。

使用 GUI 將服務添加到firewalld就像從區域列表中選擇一個區域並從服務列表中選擇服務一樣簡單。

您可以通過從“配置”下拉菜單中選擇“運行時”或“永久”來選擇修改正在運行的會話或永久配置。

配置下拉菜單

要對正在運行的會話進行更改並僅在測試它們工作後才提交更改,請將“配置”菜單設置為“運行時”。 進行更改。 一旦您對他們正在做您想做的事情感到滿意,請使用“選項”>“運行時到永久”菜單選項。

要將端口和協議條目添加到區域,請從區域列表中選擇區域,然後單擊“端口”。 單擊添加按鈕可讓您提供端口號並從菜單中選擇協議。

使用 firewall-config GUI 添加端口和協議配對

要添加協議,請單擊“協議”,單擊“添加”按鈕,然後從彈出菜單中選擇協議。

公共區域中的協議,在防火牆配置 GUI 中

要將接口從一個區域移動到另一個區域,請雙擊“連接”列表中的接口,然後從彈出菜單中選擇區域。

在防火牆配置 GUI 中將網絡接口從一個區域移動到另一個區域

冰山一角

您可以使用firewalld做更多事情,但這足以讓您啟動並運行。 利用我們為您提供的信息,您將能夠在您的區域中創建有意義的規則。