一、Firewalld概述
Firewalld簡介
●支持網絡區域所定義的網絡鏈接以及接口安全等級的動態防火牆管理工具
●支持IPv4,IPv6防火牆設置以及以太網橋
●支持服務或應用程序直接添加防火牆規則接口
●擁有兩種配置模式
運行時配置(一般測試的時候使用)
永久配置
補充內容:
●firewalld是7.0才開始有,6.0一直都是iptables
●防火牆工作在第四層傳輸層,和端口有關TCP、UDP
●大型數據中心用的背靠背方式–兩個硬防火牆
●按區域進行定義:高安全區域和低安全區域(例如公司內部是一個高安全區域,外部是一個低安全區域),此外允許訪問的公司服務在dmz區域(非軍事化區域)
低安全級別到高安全級別會經過防火牆過濾;
高安全級別到低安全級別是允許的。
●運行時配置是臨時配置,不會保存
二、Firewalld和iptables的關系
●netfilter
位於Linux內核中的包過濾功能體系
稱為Linux防火牆的“內核態”(不能)
●Firewalld/iptables
Centos7默認的管理防火牆規則的工具(Firewalld)
稱為Linux防火牆的“用戶態”
Firewalld就是iptables的一層封裝,為了簡化操作
只有iptables才能和內核態進行交互
Firewalld定義好策略不需要重啟服務,而iptables需要重啟
三、Firewalld網絡區域
●區域介紹
區域如同進入主機的安全門,每個區域都具有不同限制程度的規則
可以使用一個或多個區域,但是任何一個活躍區域至少需要關聯源地址或接口
默認情況下,public區域是默認區域,包含所有接口(網卡)
iptables沒有區域的概念
外部流量通過規則進入相應的區域接口(網卡)
bloc:阻塞區域
dmz:非軍事化區域
drop:丟失區域
external:外部區域
home:家區域
internal:內部區域
public:公共區域
trusted:信任區域
work:工作區域
●firewalld數據處理流程
檢查數據來源的源地址
若源地址關聯到特定的區域,則執行該區域所指定的規則
若源地址未關聯到特定的區域,則使用傳入網絡接口的區域並執行該區域所指定的規則
若網絡接口未關聯到特定的區域,則使用默認區域並執行該區域所指定的規則
四、Firewalld防火牆的配置方法
●運行時配置(類似於mount)
實時生效,並持續至firewalld重新啟動或重新加載配置
不中斷現有連接
不能修改服務配置
●永久配置(類似於修改fstab文件)
不立即生效,除非firewalld重新啟動或重新加載配置
中斷現有連接
可以修改服務配置
●firewall-config圖形工具
●firewall-cmd命令行工具
●/etc/firewalld中的配置文件
firewalld會優先使用/etc/firewalld/中的配置,如果不存在配置文件,則使用/usr/lib/firewalld/中的配置
/etc/firewalld/:用戶自定義配置文件,需要時可通過從/usr/lib/firewalld/中拷貝
/usr/lib/firewalld/:默認配置文件,不建議修改,若恢復至默認配置,可以直接刪除/etc/firewalld/中的配置
firewall-config圖形工具介紹
firewall-config圖形工具介紹

包含運行時配置/永久配置

關聯網卡到指定區域

改變默認區域

連接狀態
“區域”選項卡
“服務”選項卡
firewall-cmd命令行工具
1.獲取預定義信息
firewall-cmd 預定義信息主要包括三種:可用的區域、可用的服務以及可用的 ICMP 阻
塞類型,具體的查看命令如下所示。
[root@localhost ~]# firewall-cmd --get-zones //顯示預定義的區域 work drop internal external trusted home dmz public block [root@localhost ~]# firewall-cmd --get-service //顯示預定義的服務 RH-Satellite-6 amanda-client amanda-k5-client baculabacula-client cephceph mondhcp dhcpv6 dhcpv6-client dnsdocker-registry dropbox-lansyncfreeipa-ldap freeipa-ldapsfreeipa-replication ftp high-availability http https imapimaps ippipp-clientipseciscsi-target kadminkerberoskpasswdldapldapslibvirt libvirt-tlsmdns mosh mountdms-wbtmysqlnfsntpopenvpnpmcdpmproxypmwebapi pmwebapis pop3 pop3s postgresqlprivoxy proxy-dhcpptppulseaudiopuppetmaster radiusrpc-bindrsyncd samba samba-client sane smtpsmtpssnmpsnmptrap squid ssh synergy syslog syslog-tls telnet tftptftp-client tinc tor-socks transmission clientvdsmvnc-serverwbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server [root@localhost ~]# firewall-cmd --get-icmptypes //顯示預定義的 ICMP 類型 destination-unreachable echo-reply echo-request parameter-problem redirect router -advertisement router-solicitation source-quench time-exceeded timestamp-reply timestamp-request firewall-cmd --get-icmptypes 命令的執行結果中各種阻塞類型的含義分別如下所示。 ●destination-unreachable:目的地址不可達。 ●echo-reply:應答回應(pong)。 ●parameter-problem:參數問題。 ●redirect:重新定向。 ●router-advertisement:路由器通告。 ●router-solicitation:路由器征尋。 ●source-quench:源端抑制。 ●time-exceeded:超時。 ●timestamp-reply:時間戳應答回應。 ●timestamp-request:時間戳請求。
2.區域管理
使用 firewall-cmd 命令可以實現獲取和管理區域,為指定區域綁定網絡接口等功能。
常用選項
--get-default-zone 顯示網絡連接或接口的默認區域 --set-default-zone=<zone> 設置網絡連接或接口的默認區域 --get-active-zones 顯示已激活的所有區域 --get-zone-of-interface=<interface> 顯示指定接口綁定的區域 --zone=<zone> --add-interface=<interface> 為指定接口綁定區域 --zone=<zone> --change-interface=<interface> 為指定的區域更改綁定的網絡接口 --zone=<zone> --remove-interface=<interface> 為指定的區域刪除綁定的網絡接口 --list-all-zones 顯示所有區域及其規則 [--zone=<zone>] --list-all 顯示所有指定區域的所有規則,省略--zone=<zone>時表示僅 對默認區域操作
具體操作如下所示。
(1)顯示當前系統中的默認區域。 [root@localhost ~]# firewall-cmd --get-default-zone public (2)顯示默認區域的所有規則。 [root@localhost ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: (3)顯示網絡接口 ens33 對應區域。 [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33 public (4)將網絡接口 ens33 對應區域更改為 internal 區域。 [root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33 The interface is under control of NetworkManager, setting zone to 'internal'. success [root@localhost ~]# firewall-cmd --zone=internal --list-interfaces ens33 [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33 internal (5)顯示所有激活區域。 [root@localhost ~]# firewall-cmd --get-active-zones internal interfaces: ens33
3.服務管理
為 了 方 便 管 理 , firewalld 預 先 定 義 了 很 多 服 務 , 存 放 在
/usr/lib/firewalld/services/ 目錄中,服務通過單個的 XML 配置文件來指定。service 配置具有以下優點。
(1).通過服務名字來管理規則更加人性化。
(2).通過服務來組織端口分組的模式更加高效,如果一個服務使用了若干個網絡端口,則服
務的配置文件就相當於提供了到這些端口的規則管理的批量操作快捷方式。
選項 說明
[--zone=<zone>] --list-services 顯示指定區域內允許訪問的所有服務 [--zone=<zone>] --add-service=<service> 為指定區域設置允許訪問的某項服務 [--zone=<zone>] --remove-service=<service> 刪除指定區域已設置的允許訪問的某項服務 [--zone=<zone>] --list-ports 顯示指定區域內允許訪問的所有端口號 [--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol> 為指定區域設置允許訪問的某個/某段端口號 (包括協議名) [--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol> 刪除指定區域已設置的允許訪問的端口號(包括 協議名) [--zone=<zone>] --list-icmp-blocks 顯示指定區域內拒絕訪問的所有 ICMP 類型 [--zone=<zone>] --add-icmp-block=<icmptype> 為指定區域設置拒絕訪問的某項 ICMP 類型 [--zone=<zone>] --remove-icmp-block=<icmptype> 刪除指定區域已設置的拒絕訪問的某項 ICMP 類 型,省略--zone=<zone>時表示對默認區域操作
具體操作如下所示。
(1)為默認區域設置允許訪問的服務。 [root@localhost ~]# firewall-cmd --list-services //顯示默認區域內允許訪問的所有服務 dhcpv6-clientssh [root@localhost ~]# firewall-cmd --add-service=http //設置默認區域允許訪問 http 服務success [root@localhost ~]#firewall-cmd --add-service=https //設置默認區域允許訪問 https 服務 success [root@localhost ~]# firewall-cmd --list-services dhcpv6-clientssh https http (2)為 internal 區域設置允許訪問的服務。 [root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql //設置 internal 區域允許訪問 mysql 服務 success [root@localhost~]#firewall-cmd --zone=internal --remove-service=samba-client //設置 internal 區域不允許訪問 samba-client 服務 success [root@localhost ~]# firewall-cmd --zone=internal --list-services //顯示 internal 區域內允許訪問的所有服務 sshmdns dhcpv6-client mysql
4.端口管理
在進行服務配置時,預定義的網絡服務可以使用服務名配置,服務所涉及的端口就會自 動打開。但是,對於非預定義的服務只能手動為指定的區域添加端口。例如,執行以下操作 即可實現在 internal 區域打開 443/TCP 端口。 [root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp success 若想實現在 internal 區域禁止 443/TCP 端口訪問,可執行以下命令。 [root@localhost ~]#firewall-cmd --zone=internal --remove-port=443/tcp success
5.兩種配置模式
前面提到 firewall-cmd 命令工具有兩種配置模式:
運行時模式(Runtime mode)表示當前內存中運行的防火牆配置,在系統或 firewalld 服務重啟、停止時配置將失效;
永久模 式(Permanent mode)表示重啟防火牆或重新加載防火牆時的規則配置,是永久存儲在配置
文件中的。
firewall-cmd 命令工具與配置模式相關的選項有三個。
--reload:重新加載防火牆規則並保持狀態信息,即將永久配置應用為運行時配置。
--permanent:帶有此選項的命令用於設置永久性規則,這些規則只有在重新啟動
firewalld 或重新加載防火牆規則時才會生效;若不帶有此選項,表示用於設置運行時
規則。
--runtime-to-permanent:將當前的運行時配置寫入規則配置文件中,使之成為永久性
