Firewalld防火牆基礎詳解

Firewalld簡介

支持網絡區域所定義的網絡連接以及接口安全等級的動態防火牆管理工具,支持IPv四、IPv6防火 牆設置以及以太網橋,支持服務或應用程序直接添加防火牆規則接口。python

擁有兩種配置模式

1.運行時配置mysql

2.永久配置web

Firewalld和iptables的關係

netfilter:

位於Linux內核中的包過濾功能體系稱爲Linux防火牆的「內核態」sql

Firewalld/iptables:

CentOS7默認的管理防火牆規則的工具(Firewalld)稱爲Linux防火牆的「用戶態」docker

Firewalld防火牆基礎詳解

Firewalld和iptables的區別:

Firewalld iptables
配置文件 /us/ib/firewalld/、 /etc/sysconfig/iptables /etc/firewalld/
對規則的修改 不須要所有刷新策略,不丟失現行鏈接 須要所有刷新策略,丟失鏈接
防火牆類型 動態防火牆 靜態防火牆

Firewalld網絡區域

區域介紹:

  • 區域如同進入主機的安全門,每一個區域都具備不一樣限制程度的規則;
  • 可使用一個或多個區域,可是任何一個活躍區域至少須要關聯源地址或接口;
  • 默認狀況下,public區域是默認區域,包含全部接口(網卡)。
區域 描述
drop (丟棄) 任何接收的網絡數據包都被丟棄,沒有任何回覆。僅能有發送出去的網絡鏈接
block (限制) 任何接收的網絡鏈接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒絕
public (公共) 在公共區域內使用,不能相信網絡內的其餘計算機不會對您的計算機形成危害,只能接收通過選取的鏈接
external (外部) 特別是爲路由器啓用了假裝功能的外部網。您不能信任來自網絡的其餘計算,不能相信它們不會對您的計算機形成危害,只能接收通過選擇的鏈接
dmz (非軍事區) 用於您的非軍事區內的電腦,此區域內可公開訪問,能夠有限地進入您的內部網絡,僅僅接收通過選擇的鏈接
work (工做) 用於工做區。您能夠基本相信網絡內的其餘電腦不會危害您的電腦。僅僅接收通過選擇的鏈接
home (家庭) 用於家庭網絡。您能夠基本信任網絡內的其餘計算機不會危害您的計算機。僅僅接收通過選擇的鏈接
internal (內部) 用於內部網絡。您能夠基本上信任網絡內的其餘計算機不會威脅您的計算機。僅僅接受通過選擇的鏈接
trusted (信任) 可接受全部的網絡鏈接

Firewalld數據處理流程:

檢查數據來源的源地址shell

  • 若源地址關聯到特定的區域,則執行該區域所指定的規則;
  • 若源地址未關聯到特定的區域,則使用傳入網絡接口的區域並執行該區域所指定的規則;
  • 若網絡接口未關聯到特定的區域,則使用默認區域並執行該區域所指定的規則。

Firewalld防火牆的配置方法

運行時配置

  • 實時生效,並持續至Firewalld從新啓動或從新加載配置
  • 不中斷現有鏈接
  • 不能修改服務配置

永久配置

  • 不當即生效,除非Firewalld從新啓動或從新加載配置
  • 中斷現有鏈接
  • 能夠修改服務配置

/etc/firewalld/中的配置文件

Firewalld會優先使用/etc/firewalld/中的配置,若是不存在配置文件,則使用/usr/lib/firewalld/中的配置api

  • /etc/firewalld/:用戶自定義配置文件,須要時可經過從/usr/ib/firewalld/中拷貝
  • /usr/lib/firewalld/:默認配置文件,不建議修改,若恢復至默認配置,可直接刪除/etc/firewalld/中的配置

Firewall-config圖形工具

輸入"firewall-config"命令,進入圖形工具。安全

Firewalld防火牆基礎詳解

當咱們配置完畢後,須要重載防火牆才能才能生效,在重載防火牆前必定要將Runtime設定爲永久配置,否則以前配置的運行時配置會直接刪除,若是你配的就是永久,直接重載便可。網絡

Firewalld防火牆基礎詳解

咱們能夠選擇配置防火牆規則的網卡、接口等,同時也能根據服務、端口、協議等進行訪問限制。圖形工具簡潔方便,就很少作介紹了。
Firewalld防火牆基礎詳解dom

Firewall-cmd命令行工具

(1)啓動、中止、查看 firewalld 服務

在安裝 CentOS7 系統時,會自動安裝 firewalld 和圖形化工具 firewall-config。執行 如下命令能夠啓動 firewalld 並設置爲開機自啓動狀態。

[root@localhost ~]# systemctl start firewalld          //啓動 firewalld 
[root@localhost ~]# systemctl enable firewalld    //設置 firewalld 爲開機自啓動

若是 firewalld 正在運行,經過 systemctl status firewalld 或 firewall-cmd 命令能夠查看其運行狀態。

[root@localhost ~]# systemctl status firewalld                //查看狀態
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2019-10-14 10:04:49 CST; 5h 59min ago
     Docs: man:firewalld(1)
 Main PID: 633 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─633 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

10月 14 10:04:45 localhost.localdomain systemd[1]: Starting firewalld - dynamic fi....
10月 14 10:04:49 localhost.localdomain systemd[1]: Started firewalld - dynamic fir....
10月 14 10:04:49 localhost.localdomain firewalld[633]: WARNING: ICMP type 'beyond-....
10月 14 10:04:49 localhost.localdomain firewalld[633]: WARNING: beyond-scope: INVA....
10月 14 10:04:49 localhost.localdomain firewalld[633]: WARNING: ICMP type 'failed-....
10月 14 10:04:49 localhost.localdomain firewalld[633]: WARNING: failed-policy: INV....
10月 14 10:04:49 localhost.localdomain firewalld[633]: WARNING: ICMP type 'reject-....
10月 14 10:04:49 localhost.localdomain firewalld[633]: WARNING: reject-route: INVA....
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# firewall-cmd --state                         //查看狀態
running
[root@localhost ~]#

若是想要禁用 firewalld,執行如下命令便可實現。

[root@localhost ~]# systemctl stop firewalld          //中止 firewalld 
[root@localhost ~]#systemctl disable firewalld    //設置 firewalld 開機不自啓動

(2)獲取預約義信息

firewall-cmd 預約義信息主要包括三種:可用的區域、可用的服務以及可用的 ICMP 阻塞類型,具體的查看命令以下所示。

[root@localhost ~]# firewall-cmd --get-zones                   //顯示預約義的區域
block dmz drop external home internal public trusted work
[root@localhost ~]# firewall-cmd --get-services              //顯示預約義的服務
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp open*** ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
[root@localhost ~]# firewall-cmd --get-icmptypes         //顯示預約義的 ICMP 類型
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
[root@localhost ~]#

firewall-cmd --get-icmptypes 命令的執行結果中各類阻塞類型的含義分別以下所示:

destination-unreachable:目的地址不可達 
echo-reply:應答迴應(pong)
parameter-problem:參數問題
redirect:從新定向 
router-advertisement:路由器通告
router-solicitation:路由器徵尋
source-quench:源端抑制
time-exceeded:超時
timestamp-reply:時間戳應答迴應
timestamp-request:時間戳請求

(3)區域管理

使用 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>時表示僅對默認區域操做

具體操做以下所示

  • 顯示當前系統中的默認區域。
[root@localhost ~]# firewall-cmd --get-default-zone 
public
[root@localhost ~]#
  • 顯示默認區域的全部規則。
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

[root@localhost ~]#
  • 顯示網絡接口 ens33 對應區域。
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
[root@localhost ~]#
  • 將網絡接口 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 --get-zone-of-interface=ens33
internal
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces 
ens33
[root@localhost ~]#
  • 顯示全部激活區域。
[root@localhost ~]# firewall-cmd --get-active-zones 
internal
  interfaces: ens33
[root@localhost ~]#

(4)服務管理

爲 了 方 便 管 理 , firewalld 預 先 定 義 了 很 多 服 務 , 存 放 在 /usr/lib/firewalld/services/ 目錄中,服務經過單個的 XML 配置文件來指定。這些配置文件則按如下格式命名:service-name.xml,每一個文件對應一項具體的網絡服務,如 ssh 服 務等。

選項說明

[--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>時表示對默認區域操做

具體操做以下所示

  • 爲默認區域設置容許訪問的服務。
[root@localhost ~]# firewall-cmd --list-services    //顯示默認區域內容許訪問的全部服務 
ssh dhcpv6-client
[root@localhost ~]# firewall-cmd --add-service=http   //設置默認區域容許訪問 http 服務
success
[root@localhost ~]# firewall-cmd --add-service=https   //設置默認區域容許訪問 https 服務
success
[root@localhost ~]# firewall-cmd --list-services   //顯示默認區域內容許訪問的全部服務
ssh dhcpv6-client http https
[root@localhost ~]#
  • 爲 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 區域內容許訪問的全部服務 
ssh mdns dhcpv6-client mysql
[root@localhost ~]#

(5)端口管理

在進行服務配置時,預約義的網絡服務可使用服務名配置,服務所涉及的端口就會自 動打開。可是,對於非預約義的服務只能手動爲指定的區域添加端口。例如,執行如下操做 便可實如今 internal 區域打開 443/TCP 端口。

[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
success
[root@localhost ~]#

若想實如今 internal 區域禁止 443/TCP 端口訪問,可執行如下命令。

[root@localhost ~]# firewall-cmd --zone=internal --remove-port=443/tcp
success
[root@localhost ~]#

(6)兩種配置模式

前面提到 firewall-cmd 命令工具備兩種配置模式:運行時模式(Runtime mode)表示 當前內存中運行的防火牆配置,在系統或 firewalld 服務重啓、中止時配置將失效;永久模 式(Permanent mode)表示重啓防火牆或從新加載防火牆時的規則配置,是永久存儲在配置 文件中的。

firewall-cmd 命令工具與配置模式相關的選項有三個:

--reload:從新加載防火牆規則並保持狀態信息,即將永久配置應用爲運行時配置 
--permanent:帶有此選項的命令用於設置永久性規則,這些規則只有在從新啓動firewalld 或從新加載防火牆規則時纔會生效;若不帶有此選項,表示用於設置運行時 規則。 
--runtime-to-permanent:將當前的運行時配置寫入規則配置文件中,使之成爲永久性

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> 爲指定的區域刪除綁定的網絡接口
--query-interface= <interface> 查詢區域中是否包含某接口
--list-all-zones 顯示全部區域及其規則
[--zone= <zone>] --list-all 顯示全部指定區域的全部規則
[--zone= <zone>] --list-services 顯示指定區域內容許訪問的全部服務
[--zone= <zone>] --add-service= <service> 爲指定區域設置容許訪問的某項服務
[--zone= <zone>] --remove-service= <service> 刪除指定區域已設置的容許訪問的某項服務
[--zone= <zone>] --query-service= <service> 查詢指定區域中是否啓用了某項服務
[--zone= <zone>] --list-ports 顯示指定區域內容許訪問的全部端口號
[--zone= <zone>] --add-port= <port>[-<port> ]/ <protocol> [--timeout= <seconds>] 啓用區域端口和協議組合,可選配置超時時間
[--zone= <zone>] --remove-port= <port>[-<port>]/<protocol> 禁用區域端口和協議組合
[--zone= <zone>] --query-port=<port>[-<port> ]/<protocol> 查詢區域中是否啓用了端口和協議組合
[--zone= <zone>] --list-icmp-blocks 顯示指定區域內阻塞的全部ICMP類型
[--zone= <zone>] --add-icmp-block= <icmptype> 爲指定區域設置阻塞的某項ICMP類型
[--zone= <zone>] --remove-icmp-block= <icmptype> 刪除指定區域已阻塞的某項ICMP類型
[--zone= <zone>] --query-icmp-block= <icmptype> 查詢指定區域的ICMP阻塞功能
相關文章
相關標籤/搜索