如何在 Linux 上開始使用 firewalld
已發表: 2022-07-08 如果您正在尋找一種現代的、功能強大的 Linux 防火牆,它易於在命令行上或使用其 GUI 界面進行配置,那麼firewalld
可能就是您正在尋找的。
對防火牆的需求
網絡連接有起點和終點。 源端的軟件請求連接,而目標端的軟件接受或拒絕它。 如果它被接受,數據包(通常稱為網絡流量)可以通過連接在兩個方向上傳遞。 無論您是在自己家中的房間內共享,從家庭辦公室遠程連接到工作,還是使用遠程的基於雲的資源,這都是正確的。
良好的安全實踐表明您應該限制和控制與計算機的連接。 這就是防火牆的作用。 它們按 IP 地址、端口或協議過濾網絡流量,並拒絕不符合您已配置的一組預定義標準(防火牆規則)的連接。 他們就像一個專屬活動中的安保人員。 如果你的名字不在名單上,你就不能進去。
當然,您不希望您的防火牆規則過於嚴格以至於您的正常活動受到限制。 配置防火牆越簡單,您無意中設置衝突或嚴苛規則的可能性就越小。 我們經常聽到用戶說他們不使用防火牆,因為它太複雜而難以理解,或者命令語法太不透明。
firewalld
防火牆功能強大且易於設置,無論是在命令行上還是通過其專用的 GUI 應用程序。 在底層,Linux 防火牆依賴於內核端網絡過濾框架netfilter
。 在用戶領域,我們可以選擇與netfilter
交互的工具,例如iptables
、 ufw
簡單的防火牆和firewalld
。
在我們看來, firewalld
提供了功能、粒度和簡單性的最佳平衡。
安裝防火牆
firewalld
有兩個部分。 有firewalld
,提供防火牆功能的守護進程,還有firewall-config
。 這是firewalld
的可選 GUI。 請注意, firewall-config
中沒有“d”。
在 Ubuntu、Fedora 和 Manjaro 上安裝firewalld
在所有情況下都很簡單,儘管它們各自對預安裝和捆綁的內容有自己的看法。
要在 Ubuntu 上安裝,我們需要安裝firewalld
和firewall-config
。
sudo apt install firewalld
sudo apt install firewall-config
在 Fedora 上,已經安裝了firewalld
。 我們只需要添加firewall-config
。
sudo dnf install firewall-config
在 Manjaro 上,這兩個組件都沒有預先安裝,但它們被捆綁到一個包中,因此我們可以使用一個命令安裝它們。
sudo pacman -Sy firewalld
我們需要啟用firewalld
守護程序以允許它在每次計算機啟動時運行。
sudo systemctl 啟用防火牆
我們需要啟動守護程序,以便它現在運行。
sudo systemctl 啟動防火牆
我們可以使用systemctl
來檢查firewalld
是否已經啟動並且運行沒有問題:
sudo systemctl status firewalld
我們也可以使用firewalld
來檢查它是否在運行。 這使用帶有--state
選項的firewall-cmd
命令。 請注意, firewall-cmd
中沒有“d”:
須藤防火牆-cmd --state
現在我們已經安裝並運行了防火牆,我們可以繼續配置它。
區域的概念
firewalld
防火牆基於區域。 區域是防火牆規則和相關網絡連接的集合。 這使您可以定制不同的區域和一組不同的安全限制,您可以在這些區域下進行操作。 例如,您可能定義了一個用於常規日常運行的區域,另一個用於更安全運行的區域,以及一個“無進無出”的完全鎖定區域。
要從一個區域移動到另一個區域,並有效地從一個安全級別移動到另一個安全級別,您需要將您的網絡連接從它所在的區域移動到您希望在其下運行的區域。
這使得從一組定義的防火牆規則移動到另一組的速度非常快。 使用區域的另一種方法是讓您的筆記本電腦在您在家時使用一個區域,而在您外出並使用公共 Wi-Fi 時使用另一個區域。
firewalld
帶有九個預配置的區域。 可以編輯這些區域並添加或刪除更多區域。
- drop :所有傳入的數據包都被丟棄。 允許傳出流量。 這是最偏執的設置。
- block :所有傳入的數據包都被丟棄,並且
icmp-host-prohibited
消息被發送給發起者。 允許傳出流量。 - 受信任:所有網絡連接都被接受,其他系統受信任。 這是最值得信賴的設置,應該限制在非常安全的環境中,例如強制測試網絡或您的家中。
- public :此區域用於公共網絡或其他任何其他計算機都不可信的網絡。 接受一小部分常見且通常安全的連接請求。
- external :此區域用於啟用了 NAT 偽裝(端口轉發)的外部網絡。 您的防火牆充當路由器,將流量轉發到您的私有網絡,該網絡仍然可以訪問,但仍然是私有的。
- internal :當您的系統充當網關或路由器時,此區域旨在用於內部網絡。 該網絡上的其他系統通常是受信任的。
- dmz :此區域適用於位於外圍防御之外的“非軍事區”的計算機,並且對您網絡的訪問受限。
- 工作:該區域用於工作機器。 此網絡上的其他計算機通常是受信任的。
- home :此區域用於家用機器。 此網絡上的其他計算機通常是受信任的。
家庭、工作和內部區域在功能上非常相似,但是將它們分成不同的區域允許您根據自己的喜好微調區域,為特定場景封裝一組規則。
一個好的起點是找出默認區域是什麼。 這是安裝firewalld
時添加網絡接口的區域。
sudo firewall-cmd --get-default-zone
我們的默認區域是公共區域。 要查看區域的配置詳細信息,請使用--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 | 較少的
這很有用,因為您可以滾動瀏覽列表,或使用搜索工具來查找端口號、協議和服務。
在我們的筆記本電腦上,我們要將以太網連接從公共區域移動到家庭區域。 我們可以使用--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
版本列出了 192 個服務。 要在區域中啟用服務,請使用--add-service
選項。
我們可以使用--add-service
選項將服務添加到區域。
sudo firewall-cmd --zone=public --add-service=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
就像從區域列表中選擇一個區域並從服務列表中選擇服務一樣簡單。
您可以通過從“配置”下拉菜單中選擇“運行時”或“永久”來選擇修改正在運行的會話或永久配置。
要對正在運行的會話進行更改並僅在測試它們工作後才提交更改,請將“配置”菜單設置為“運行時”。 進行更改。 一旦您對他們正在做您想做的事情感到滿意,請使用“選項”>“運行時到永久”菜單選項。
要將端口和協議條目添加到區域,請從區域列表中選擇區域,然後單擊“端口”。 單擊添加按鈕可讓您提供端口號並從菜單中選擇協議。
要添加協議,請單擊“協議”,單擊“添加”按鈕,然後從彈出菜單中選擇協議。
要將接口從一個區域移動到另一個區域,請雙擊“連接”列表中的接口,然後從彈出菜單中選擇區域。
冰山一角
您可以使用firewalld
做更多事情,但這足以讓您啟動並運行。 利用我們為您提供的信息,您將能夠在您的區域中創建有意義的規則。