1. 程式人生 > 其它 >Blog.044 Linux 防火牆② firewalld

Blog.044 Linux 防火牆② firewalld

本章目錄

1. firewalld 概述
  1.1 firewalld 和 iptables 的分析
  1.2 firewalld 和 iptables 區別
2. firewalld 網路區域
  2.1 firewalld 區域的概念
  2.2 firewalld 防火牆預定義的區域
  2.3 firewalld 資料處理流程
3. firewalld 防火牆的配置方法
  3.1 firewalld 配置方案
  3.2 firewalld 配置方法
4. 使用 firewall-cmd 命令列工具
  4.1 常用的 firewall-cmd 命令選項
  4.2 區域管理
  4.3 服務管理


  4.4 埠管理

1. firewalld 概述

  firewalld 防火牆是 Centos7 系統預設的防火牆管理工具,取代了之前的 iptables 防火牆,也是工作在網路層,屬於包過濾防火牆。


  1.1 firewalld 和 iptables 的分析

    firewalld 和 iptables 都是用來管理防火牆的工具(屬於使用者態)來定義防火牆的各種規則功能,內部結構都指向 netfilter 網路過濾子系統(屬於核心態)來實現包過濾防火牆功能。
    firewalld 提供了支援網路區域所定義的網路連線以及介面 安全等級的動態防火牆管理工具。
    它支援 IPv4、IPv6 防火牆設定,以及乙太網橋 (在某些高階服務可能會用到, 比如雲計算),並且擁有兩種配置模式:執行時配置與永久配置。


  1.2 firewalld 和 iptables 區別

    iptables 主要是基於介面,來設定規則, 從而判斷網路的安全性。
    firewalld 是基於區域,根據不同的區域來設定不同的規則,從而保證網路的安全。與硬體防火牆的設定相類似。
    iptables 在 /etc/sysconfig/iptables 中儲存配置,
    firewalld 將配置儲存在 /etc/firewalld/(優先載入)和 /usr/lib/firewalld/(預設的配置檔案)中的各種 XML 檔案裡。
    使用 iptables 每一個單獨更改意味著清除所有舊有的規則和從/etc/sysconfig/iptables 裡讀取所有新的規則。


    使用 firewalld 卻不會再建立任何新的規則,僅僅執行規則中的不同之處。
    因此 firewalld 可以在執行時間內,改變設定而不丟失現行連線。


2. firewalld 網路區域
  2.1 firewalld 區域的概念

    firewalld 防火牆為了簡化管理,將所有網路流量分為多個區域(zone)。
    然後根據資料包的源 IP 地址或傳入的網路介面等條件將流量傳入相應區域。
    每個區域都定義了自己開啟或者關閉的埠和服務列表。


  2.2 firewalld 防火牆預定義的區域

trusted(信任區域)

允許所有的傳入流量。

public(公共區域)

允許與ssh或dhcpv6-client預定義服務匹配的傳入流量,其餘均拒絕。

是新新增網路介面的預設區域。

external (外部區域)

允許與 ssh 預定義服務匹配的傳入流量,其餘均拒絕。

預設將通過此區域轉發的IPy4傳出流量將進行地址偽裝, 可用於為路由器啟用了偽裝功能的外部網路。

home (家庭區域) 允許與ssh、ipp-client、mdns、samba-client或dhcpv6-client預定義服務匹配的傳入流量,其餘均拒絕。
internal (內部區域) 預設值時與home區域相同。
work (工作區域) 允許與 ssh、ipp-client、dhcpv6-client 預定義服務匹配的傳入流量,其餘均拒絕。
dmz (隔離區域也稱為非軍事區域) 允許與 ssh 預定義服務匹配的傳入流量,其餘均拒絕
block(限制區域) 拒絕所有傳入流量。
drop(丟棄區域) 丟棄所有傳入流量,並且不產生包含 ICMP的錯誤響應。
  • 最終一個區域的安全程度是取決於管理員在此區域中設定的規則;
  • 區域如同進入主機的安全門, 每個區域都具有不同限制程度的規則,只會允許符合規則的流量傳入;
  • 可以根據網路規模,使用—個或多個區域,但是任何一個 活躍區域 至少需要關聯源地卻或介面。
  • 預設情況下,public 區域是預設區域,包含所有介面 (網絡卡)。


  2.3 firewalld 資料處理流程

    firewalld 對於進入系統的資料包, 會根據資料包的源 IP 地址或傳入的網路介面等條件,將資料流量轉入相應區域的防火牆規則。
    對於進入系統的資料包,首先檢查的就是其源地址:

  • 若源地址關聯到特定的區域(即源地址或接 口繫結的區域有衝突), 則執行該區域高制定的規則。
  • 若源地址未關聯到特定的區域(即源地址或介面繫結的區域沒有衝突),則使用傳入網路介面的區域並執行該區域所制定的規則。
  • 若網路介面也未關聯到特定的區域 (即源地址或介面都沒有繫結特定的某個區域), 則使用預設區域並執行該區域所制定的規則。

    總結:

  • 繫結源地址的區域規則>網絡卡介面繫結的區域規則>預設區域的規則
  • Firewalld:只關心區域
  • Iptables:四表五鏈及流量的進出


3. firewalld 防火牆的配置方法
  3.1 firewalld 配置方案

    (1)執行時配置

  • 不中斷現有連線
  • 不能修改服務配置

    (2)永久配置

  • 不立即生效,除非 firewalld 重新啟動或重新載入配置
  • 中斷現有連線
  • 可以修改服務配置


  3.2 firewalld 配置方法

  • 使用 firewall-cmd 命令列工具。
  • 使用 firewall-config 圖形工具。
  • 編寫 /etc/firewalld/ 中的配置檔案。


4. 使用 firewall-cmd 命令列工具

  • 使用命令之前先要開啟Firewalld服務


  4.1 常用的 firewall-cmd 命令選項

 1 --get-default-zone :顯示當前預設區域
 2 --set-default-zone=<zone> :設定預設區域
 3  
 4 --get-active-zones: 顯示當前正在使用的區域及其對應的網絡卡介面
 5 --get-zones :顯示所有可用的區域
 6  
 7 --get-zone-of-interface=<interface> :顯示指定介面繫結的區域
 8 --zone=<zone> --add-interface=<interface> :為指定介面繫結區域
 9 --zone=<zone> --change-interface=<interface> :為指定的區域更改繫結的網路介面
10 --zone=<zone> --remove-interface=<interface> :為指定的區域刪除繫結的網路介面
11  
12 --zone=<zone> --add-source=<source> [/<mask>] :為指定源地址繫結區域
13 --zone=<zone> --change-source=<source> [/<mask>] :為指定的區域更改繫結的源地址
14 --zone=<zone> --remove-source=<source>[/ <mask>] :為指定的區域刪除繫結的源地址
15  
16 --list-all-zones :顯示所有區域及其規則
17 [--zone=<zone>] --list-all :顯示所有 指定區域的所有規則,省略--zone=<zone>時 表示僅對預設區域操作
18  
19 [--zone=<zone>] --list-services :顯示指定 區域內允許訪問的所有服務
20 [--zone=<zone>] --add-service=<service> :為指定區域設定允許訪問的某項服務
21 [--zone=<zone>] --remcve-service=<service> :刪除指定區域已設定的允許訪問的某項服務
22  
23 [--zone=<zone>] --list-ports :顯示指定區域內允許訪問的所有埠號
24 [--zone=<zone>] --add-port=<portid> [-<portid>]/<protocol> :為指定區域設定允許訪問的某個/某段埠號(包括協議名)
25 [--zone=<zone>] --remove-port=<portid> [-<portid>]/<protocol> :刪除指定區域已設定的允許訪問的埠號( 包括協議名)
26  
27 [--zone=<zone>] --list-icmp-blocks :顯示指定區域內拒絕訪問的所有ICMP 型別
28 [--zone=<zone>] --add- icmp-block=<icmptype> :為指定區域設定拒絕訪問的某項ICMP 型別
29 [--zone=<zone>] --remove-icmp-block=<icmptype> :刪除 指定區域已設定的拒絕訪問的某項ICMP型別
30  
31 firewall-cmd --get-icmptypes :顯示所有ICMP 型別

  4.2 區域管理

 1 (1)  顯示當前系統中的預設區域
 2 firewall-cmd --get-default-zone
 3  
 4 (2)  顯示預設區域的所有規則
 5 firewall-cmd --list-all
 6  
 7 (3)  顯示當前正在使用的區域及其對應的網絡卡介面
 8 firewall-cmd --get-active -zones
 9  
10 (4)  設定預設區域
11 firewall-cmd --set-default-zone=home
12 firewall-cmd --get-default-zone

  4.3 服務管理

 1 (1)    檢視預設區域內允許訪問的所有服務
 2 firewall-cmd --list-service
 3  
 4 (2)    新增httpd服務到public區域
 5 firewall-cmd --add-service=http --zone=public
 6  
 7 (3)    檢視public區域已配置規則
 8 firewall-cmd --list-all --zone=public
 9  
10 (4)    刪除public區域的httpd服務
11 firewall-cmd --remove-service=http --zone=public
12  
13 (5)    同時新增httpd、https 服務到預設區域,設定成永久生效
14 firewall-cmd --add-service=http --add-service=https --permanent
15 firewall-cmd --add-service={http, https, ftp} --zone=internal
16 firewall-cmd --reload
17 firewall-cmd --list-all
  • 新增使用 --permanent 選項表示設定成永久生效,需要重新啟動firewalld 服務或執行 firewall-cmd --reload 命令,重新載入防火牆規則時才會生效。
  • 若不帶有此選項,表示用於設定執行時規則,但是這些規則在系統或firewalld 服務重啟、停止時配置將失效。
1 firewall-cmd --runtime-to-permanent∶將當前的執行時配置寫入規則配置檔案中,使之成為永久性配置

  4.4 埠管理

 1 (1)    允許TCP的443埠到internal 區域
 2 firewall-cmd --zone=internal --add-port=443/tcp
 3 firewall-cmd --list-all --zone=internal
 4  
 5 (2)    從internal區域將TCP的443埠移除
 6 firewall-cmd --zone=internal --remove-port=443/tcp
 7  
 8 (3)    允許UDP的2048~2050埠到預設區域
 9 firewall-cmd -- add-port=2048-2050/udp
10 firewall-cmd --list-all  

-