https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html
動态防火牆背景程式 <code>firewalld</code> 提供了一個 動态管理的防火牆,用以支援網絡 “zones” ,以配置設定對一個網絡及其相關連結和界面一定程度的信任。它具備對 <code>IPv4</code> 和 <code>IPv6</code> 防火牆設定的支援。它支援以太網橋,并有分離運作時間和永久性配置選擇。它還具備一個通向服務或者應用程式以直接增加防火牆規則的接口。
一個圖像化的配置工具,firewall-config,用于配置 <code>firewalld</code>:它依次用 iptables工具 與執行資料包篩選的核心中的 Netfilter 通信,
使用圖像化的 firewall-config 工具,按下 Super 鍵進入活動總覽,點選 <code>firewall</code>,然後按下 Enter。firewall-config 工具就出現了。您将被提示輸入管理者密碼。
firewall-config 工具裡有一個标記為 Configuration 的下拉菜單,可以在 運作時間 和 永久 兩種模式之間進行選擇。要注意,如果您選擇了 Permanent ,在左上角會出現一排附加的圖示。因為不能在運作模式下改變一個服務參數,是以這些圖示僅在永久配置模式中出現。
由 <code>firewalld</code> 提供的是動态的防火牆服務,而非靜态的。因為配置的改變可以随時随地立刻執行,不再需要儲存或者執行這些改變。現行網絡連接配接的意外中斷不會發生,正如防火牆的所有部分都不需要重新下載下傳。
提供指令行用戶端,firewall-cmd,用于進行永久性或非永久性運作時間的改變,正如在 <code>man firewall-cmd(1)</code>所解釋的一樣。永久性改變需要按照 <code>firewalld(1)</code> 手冊頁的解釋來進行。注意, <code>firewall-cmd</code> 指令可以由 <code>root</code> 使用者運作,也可以由管理者使用者——換言之, <code>wheel</code> 群體的成員運作。在後一種情況裡,指令将通過 polkit 程序來授權。
<code>firewalld</code> 的配置儲存在 <code>/usr/lib/firewalld/</code> 和 <code>/etc/firewalld/</code> 裡的各種 XML 檔案裡,這樣保持了這些檔案被編輯、寫入、備份的極大的靈活性,使之可作為其他安裝的備份等等。
其他應用程式可以使用 D-bus 和 <code>firewalld</code> 通信。
<code>firewalld</code> 和 iptables service 之間最本質的不同是:
iptables service 在 <code>/etc/sysconfig/iptables</code> 中儲存配置,而 <code>firewalld</code> 将配置儲存在 <code>/usr/lib/firewalld/</code> 和 <code>/etc/firewalld/</code> 中的各種 XML 檔案裡,。要注意,當 <code>firewalld</code> 在Red Hat Enterprise Linux上安裝失敗時, <code>/etc/sysconfig/iptables</code> 檔案就不存在。
使用 iptables service,每一個單獨更改意味着清除所有舊有的規則和從 <code>/etc/sysconfig/iptables</code>裡讀取所有新的規則,然而使用 <code>firewalld</code> 卻不會再建立任何新的規則;僅僅運作規則中的不同之處。是以,<code>firewalld</code> 可以在運作時間内,改變設定而不丢失現行連接配接。
使用 iptables tool 與核心包過濾對話也是如此。
圖 4.1. 防火牆堆棧
基于使用者對網絡中裝置和交通所給與的信任程度,防火牆可以用來将網絡分割成不同的區域。 NetworkManager 通知 <code>firewalld</code> 一個接口歸屬某個區域。接口所配置設定的區域可以由 NetworkManager 改變,也可以通過能為您打開相關 NetworkManager 視窗的 firewall-config 工具進行。
在<code>/etc/firewalld/</code>的區域設定是一系列可以被快速執行到網絡接口的預設定。清單并簡要說明如下:
<code>drop</code>(丢棄)
任何接收的網絡資料包都被丢棄,沒有任何回複。僅能有發送出去的網絡連接配接。
<code>block</code>(限制)
任何接收的網絡連接配接都被 <code>IPv4</code> 的 icmp-host-prohibited 資訊和 <code>IPv6</code> 的 icmp6-adm-prohibited資訊所拒絕。
<code>public</code>(公共)
在公共區域内使用,不能相信網絡内的其他計算機不會對您的計算機造成危害,隻能接收經過選取的連接配接。
<code>external</code>(外部)
特别是為路由器啟用了僞裝功能的外部網。您不能信任來自網絡的其他計算,不能相信它們不會對您的計算機造成危害,隻能接收經過選擇的連接配接。
<code>dmz</code>(非軍事區)
用于您的非軍事區内的電腦,此區域内可公開通路,可以有限地進入您的内部網絡,僅僅接收經過選擇的連接配接。
<code>work</code>(工作)
用于工作區。您可以基本相信網絡内的其他電腦不會危害您的電腦。僅僅接收經過選擇的連接配接。
<code>home</code>(家庭)
用于家庭網絡。您可以基本信任網絡内的其他計算機不會危害您的計算機。僅僅接收經過選擇的連接配接。
<code>internal</code>(内部)
用于内部網絡。您可以基本上信任網絡内的其他計算機不會威脅您的計算機。僅僅接受經過選擇的連接配接。
<code>trusted</code>(信任)
可接受所有的網絡連接配接。
指定其中一個區域為預設區域是可行的。當接口連接配接加入了 NetworkManager,它們就被配置設定為預設區域。安裝時,<code>firewalld</code> 裡的預設區域被設定為公共區域。
網絡區域名已經標明為不加說明,即可明了,并允許使用者快速地做出合理決定。但是,應對預設配置的設定進行檢查,而且根據您的需要和風險評估,不必要的服務将不能使用。
一項服務可以是本地和目的地端口的清單,如果服務被允許的話,也可以是一系列自動加載的防火牆輔助子產品。預先定義的服務的使用,讓客戶更容易被允許或者被禁止進入服務。與對開放端口或者值域,或者端口截然不同,使用預先定義服務,或者客戶限定服務,或許能夠讓管理更容易。 <code>firewalld.service(5)</code>中的手冊頁描述了服務配置的選擇和通用檔案資訊。服務通過單個的 XML 配置檔案來指定,這些配置檔案則按以下格式命名:<code>service-name.xml</code>。
用圖形化 firewall-config 工具檢視服務清單,按下 Super 鍵進入開始菜單,輸入 <code>firewall</code> 然後按下 Enter,firewall-config 工具就出現了。您将被提示輸入管理者密碼。現在,在 Services 标簽下,您可以檢視服務清單了。
要使用指令行列出預設的預先定義服務,以 <code>root</code> 身份執行以下指令:
請勿編輯<code>/usr/lib/firewalld/services/</code> ,隻有 <code>/etc/firewalld/services/</code> 的檔案可以被編輯。
要列出系統或者使用者建立的系統,以 <code>root</code> 身份執行以下指令:
使用圖形化 firewall-config 工具和通過編輯 <code>/etc/firewalld/services/</code> 中的 XML 檔案,服務可以被增加和删除。如果服務沒有被使用者增加或者改變,那麼 <code>/etc/firewalld/services/</code> 中不會發現相應的 XML 檔案。如果您希望增加或者改變服務, <code>/usr/lib/firewalld/services/</code> 檔案可以作為模闆使用。以 <code>root</code> 身份執行以下指令:
然後您可以編輯最近建立的檔案。<code>firewalld</code> 優先使用 <code>/etc/firewalld/services/</code> 裡的檔案,如果一份檔案被删除且服務被重新加載後,會切換到 <code>/usr/lib/firewalld/services/</code>。
<code>firewalld</code> 有一個被稱為 “direct interface”(直接接口),它可以直接通過 iptables、ip6tables 和 ebtables 的規則。它适用于應用程式,而不是使用者。如果您不太熟悉 iptables,那麼使用直接接口是很危險的,因為您可能無意中導緻防火牆被入侵。<code>firewalld</code> 保持對所增加項目的追蹤,是以它還能質詢 <code>firewalld</code> 和發現由使用直接端口模式的程式造成的更改。直接端口由增加 <code>--direct</code> 選項到 <code>firewall-cmd</code> 指令來使用。
直接端口模式适用于服務或者程式,以便在運作時間内增加特定的防火牆規則。這些規則不是永久性的,它們需要在每次通過 D-BU S從 <code>firewalld</code> 接到啟動、重新啟動和重新加載資訊後運用。
在 Red Hat Enterprise Linux 7 中,預設安裝 <code>firewalld</code> 和圖形化使用者接口配置工具 firewall-config。作為 <code>root</code> 使用者運作下列指令可以檢查:
要禁用 <code>firewalld</code>,則作為 <code>root</code> 使用者運作下列指令:
要用 <code>iptables</code> 和 <code>ip6tables</code> 服務代替 <code>firewalld</code>,則以 <code>root</code> 身份運作以下指令,先禁用 <code>firewalld</code>:
然後安裝 iptables-services 程式包,以 <code>root</code> 身份輸入以下指令:
iptables-services 程式包包含了 <code>iptables</code> 服務和 <code>ip6tables</code> 服務。
然後,以 <code>root</code> 身份運作 <code>iptables</code> 和 <code>ip6tables</code> 指令:
要啟動 <code>firewalld</code>,則以 <code>root</code> 使用者身份輸入以下指令:
如果 <code>firewalld</code> 在運作,輸入以下指令檢查:
另外,檢查 firewall-cmd 是否可以通過輸入以下指令來連接配接背景程式: