動態防火牆後臺程序 firewalld
提供了一個 動態管理的防火牆,用以支持網絡 「zones」 ,以分配對一個網絡及其相關連接和界面必定程度的信任。它具有對 IPv4
和 IPv6
防火牆設置的支持。它支持以太網橋,並有分離運行時間和永久性配置選擇。它還具有一個通向服務或者應用程序以直接增長防火牆規則的接口。網絡
一個圖像化的配置工具,firewall-config,用於配置 firewalld
:它依次用 iptables工具 與執行數據包篩選的內核中的 Netfilter 通訊,app
使用圖像化的 firewall-config 工具,按下 Super 鍵進入活動總覽,點擊 firewall
,而後按下 Enter。firewall-config 工具就出現了。您將被提示輸入管理員密碼。ide
firewall-config 工具裏有一個標記爲 Configuration 的下拉菜單,能夠在 和 兩種模式之間進行選擇。要注意,若是您選擇了 ,在左上角會出現一排附加的圖標。由於不能在運行模式下改變一個服務參數,因此這些圖標僅在永久配置模式中出現。工具
由 firewalld
提供的是動態的防火牆服務,而非靜態的。由於配置的改變能夠隨時隨地馬上執行,再也不須要保存或者執行這些改變。現行網絡鏈接的意外中斷不會發生,正如防火牆的全部部分都不須要從新下載。ui
提供命令行客戶端,firewall-cmd,用於進行永久性或非永久性運行時間的改變,正如在 man firewall-cmd(1)
所解釋的同樣。永久性改變須要按照 firewalld(1)
手冊頁的解釋來進行。注意, firewall-cmd
命令能夠由 root
用戶運行,也能夠由管理員用戶——換言之, wheel
羣體的成員運行。在後一種狀況裏,命令將經過 polkit 進程來受權。spa
firewalld
的配置儲存在 /usr/lib/firewalld/
和 /etc/firewalld/
裏的各類 XML 文件裏,這樣保持了這些文件被編輯、寫入、備份的極大的靈活性,使之可做爲其餘安裝的備份等等。命令行
其餘應用程序可使用 D-bus 和 firewalld
通訊。code
firewalld
和 iptables service 之間最本質的不一樣是: xml
iptables service 在 /etc/sysconfig/iptables
中儲存配置,而 firewalld
將配置儲存在 /usr/lib/firewalld/
和 /etc/firewalld/
中的各類 XML 文件裏,。要注意,當 firewalld
在Red Hat Enterprise Linux上安裝失敗時, /etc/sysconfig/iptables
文件就不存在。
使用 iptables service,每個單獨更改意味着清除全部舊有的規則和從 /etc/sysconfig/iptables
裏讀取全部新的規則,然而使用 firewalld
卻不會再建立任何新的規則;僅僅運行規則中的不一樣之處。所以,firewalld
能夠在運行時間內,改變設置而不丟失現行鏈接。
使用 iptables tool 與內核包過濾對話也是如此。
圖 4.1. 防火牆堆棧
基於用戶對網絡中設備和交通所給與的信任程度,防火牆能夠用來將網絡分割成不一樣的區域。 NetworkManager 通知 firewalld
一個接口歸屬某個區域。接口所分配的區域能夠由 NetworkManager 改變,也能夠經過能爲您打開相關 NetworkManager 窗口的 firewall-config 工具進行。
在/etc/firewalld/
的區域設定是一系列能夠被快速執行到網絡接口的預設定。列表並簡要說明以下:
drop
(丟棄)
任何接收的網絡數據包都被丟棄,沒有任何回覆。僅能有發送出去的網絡鏈接。
block
(限制)
任何接收的網絡鏈接都被 IPv4
的 icmp-host-prohibited 信息和 IPv6
的 icmp6-adm-prohibited信息所拒絕。
public
(公共)
在公共區域內使用,不能相信網絡內的其餘計算機不會對您的計算機形成危害,只能接收通過選取的鏈接。
external
(外部)
特別是爲路由器啓用了假裝功能的外部網。您不能信任來自網絡的其餘計算,不能相信它們不會對您的計算機形成危害,只能接收通過選擇的鏈接。
dmz
(非軍事區)
用於您的非軍事區內的電腦,此區域內可公開訪問,能夠有限地進入您的內部網絡,僅僅接收通過選擇的鏈接。
work
(工做)
用於工做區。您能夠基本相信網絡內的其餘電腦不會危害您的電腦。僅僅接收通過選擇的鏈接。
home
(家庭)
用於家庭網絡。您能夠基本信任網絡內的其餘計算機不會危害您的計算機。僅僅接收通過選擇的鏈接。
internal
(內部)
用於內部網絡。您能夠基本上信任網絡內的其餘計算機不會威脅您的計算機。僅僅接受通過選擇的鏈接。
trusted
(信任)
可接受全部的網絡鏈接。
指定其中一個區域爲默認區域是可行的。當接口鏈接加入了 NetworkManager,它們就被分配爲默認區域。安裝時,firewalld
裏的默認區域被設定爲公共區域。
網絡區域名已經選定爲不加說明,便可明瞭,並容許用戶快速地作出合理決定。可是,應對默認配置的設定進行檢查,並且根據您的須要和風險評估,沒必要要的服務將不能使用。
一項服務能夠是本地和目的地端口的列表,若是服務被容許的話,也能夠是一系列自動加載的防火牆輔助模塊。預先定義的服務的使用,讓客戶更容易被容許或者被禁止進入服務。與對開放端口或者值域,或者端口大相徑庭,使用預先定義服務,或者客戶限定服務,或許可以讓管理更容易。 firewalld.service(5)
中的手冊頁描述了服務配置的選擇和通用文件信息。服務經過單個的 XML 配置文件來指定,這些配置文件則按如下格式命名:service-name.xml
。
用圖形化 firewall-config 工具查看服務列表,按下 Super 鍵進入開始菜單,輸入 firewall
而後按下 Enter,firewall-config 工具就出現了。您將被提示輸入管理員密碼。如今,在 Services 標籤下,您能夠查看服務列表了。
要使用命令行列出默認的預先定義服務,以 root
身份執行如下命令:
~]# ls /usr/lib/firewalld/services/
請勿編輯/usr/lib/firewalld/services/
,只有 /etc/firewalld/services/
的文件能夠被編輯。
要列出系統或者用戶建立的系統,以 root
身份執行如下命令:
~]# ls /etc/firewalld/services/
使用圖形化 firewall-config 工具和經過編輯 /etc/firewalld/services/
中的 XML 文件,服務能夠被增長和刪除。若是服務沒有被用戶增長或者改變,那麼 /etc/firewalld/services/
中不會發現相應的 XML 文件。若是您但願增長或者改變服務, /usr/lib/firewalld/services/
文件能夠做爲模板使用。以 root
身份執行如下命令:
~]# cp /usr/lib/firewalld/services/[service].xml /etc/firewalld/services/[service].xml
而後您能夠編輯最近建立的文件。firewalld
優先使用 /etc/firewalld/services/
裏的文件,若是一份文件被刪除且服務被從新加載後,會切換到 /usr/lib/firewalld/services/
。
firewalld
有一個被稱爲 「direct interface」(直接接口),它能夠直接經過 iptables、ip6tables 和 ebtables 的規則。它適用於應用程序,而不是用戶。若是您不太熟悉 iptables,那麼使用直接接口是很危險的,由於您可能無心中致使防火牆被***。firewalld
保持對所增長項目的追蹤,因此它還能質詢 firewalld
和發現由使用直接端口模式的程序形成的更改。直接端口由增長 --direct
選項到 firewall-cmd
命令來使用。
直接端口模式適用於服務或者程序,以便在運行時間內增長特定的防火牆規則。這些規則不是永久性的,它們須要在每次經過 D-BU S從 firewalld
接到啓動、從新啓動和從新加載信息後運用。
在 Red Hat Enterprise Linux 7 中,默認安裝 firewalld
和圖形化用戶接口配置工具 firewall-config。做爲 root
用戶運行下列命令能夠檢查:
~]# yum install firewalld firewall-config
要禁用 firewalld
,則做爲 root
用戶運行下列命令:
~]# systemctl disable firewalld# systemctl stop firewalld
要用 iptables
和 ip6tables
服務代替 firewalld
,則以 root
身份運行如下命令,先禁用 firewalld
:
~]# systemctl disable firewalld# systemctl stop firewalld
而後安裝 iptables-services 程序包,以 root
身份輸入如下命令:
~]# yum install iptables-services
iptables-services 程序包包含了 iptables
服務和 ip6tables
服務。
而後,以 root
身份運行 iptables
和 ip6tables
命令:
# systemctl start iptables # systemctl start ip6tables # systemctl enable iptables # systemctl enable ip6tables
要啓動 firewalld
,則以 root
用戶身份輸入如下命令:
~]# systemctl start firewalld
若是 firewalld
在運行,輸入如下命令檢查:
~]$ systemctl status firewalldfirewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) since Sat 2013-04-06 22:56:59 CEST; 2 days ago Main PID: 688 (firewalld) CGroup: name=systemd:/system/firewalld.service
另外,檢查 firewall-cmd 是否能夠經過輸入如下命令來鏈接後臺程序:
~]$ firewall-cmd --state running