初探Firewalld

本文主要從概念及架構、核心組成、經常使用命令等幾個方面詳細介紹了Firewalld,並附加介紹了iptables四表五鏈和netfilter的知識。
上篇文章回顧: Linux日誌服務初識


1、簡介

一、Firewalld提供更加智能化的防火牆管理規則,優化策略配置方案,支持網絡「zones(域)」,併爲網絡及其關聯的連接、接口或源分配信任級別,不一樣信任級別默認開放服務不一樣。html

二、支持IPV4,IPV6,以太網橋以及IPSET防火牆設置。小程序

三、運行時態與永久配置分離,運行時態可手動更改,重置後回到永久配置(文件配置)後端

四、優化iptables添加規則,還支持圖形界面(本文不介紹),除了iptables,還有ip6tables和ebtables規則。安全

2、概念及架構

空間架構分爲上下兩層。bash

一、上層:firewalld D-Bus:命令主接口,修改防火牆配置主要方式。網絡

firewall-cmd:主要命令行操做方式。架構

firewall-config:離線命令行操做模式,由於直接做用於firewalld永久配置中,因此在firewall運行時不建議直接操做。app

firewall-config:圖形配置模式。運維

firewall-applet:防火牆小程序。ssh

二、下層(核心層):負責處理配置和後端,並含有iptables,ip6tables,ebtables,ipset模塊加載器。

空間結構圖示

建議使用NetworkManager,雖然firewalld不依賴它,可是NetworkManager會解決一些網絡設備重命名的通知等問題。

三、Firewalld支持zones,services,IPsets和ICMP類型。

3、核心組成

一、ZONE(防火牆區域定義連接、接口或源地址綁定的信任級別),共10(還有一種爲default)種,直接爲網域種的其餘計算機創建信任關係度,不用進行麻煩的配置操做,只須要選擇一個zone便可,如若不知足須要,還可手動添加信任服務。

Drop : 任何傳入的網絡的數據包都被丟棄

Block : 任何傳入網絡的數據包都被拒絕(包括ICMP),只能啓動網絡連接

Public : 在公共區域內使用,近接受選定的傳入連接(默認:僅ssh或dhcpv6-client服務連接)

External : 用於假裝,出去的ipv4網絡連接經過此區域假裝和轉發(默認:僅接受ssh服務連接)

Dmz : 對內部網絡訪問權限限制(默認:僅接受ssh服務連接)

Work : 用於工做區(默認:僅接受ssh,ipp-client或dhcpv6-client服務連接 )

Home : 用於家庭區(默認:僅接受ssh,mdns,ipp-client,samba-client或dhcpv6-client服務連接)

Internal : 內部,對網絡上的其餘計算機信任的較高,默認大部分服務

Trusted : 最高信任級別,接受全部網絡連接

public 配置(/etc/firewalld/zones)

二、NetworkManager存在的意義

1)NetworkManager(接口管理者)不能處理網絡連接,它的做用是告訴firewalld將用於此連接的網絡接口分配給該連接的配置中定義的區域,固然存在網絡配置的系統都支持ifcfg文件的系統

2)網絡連接由網絡腳本處理

三、配置規則(固然,規則這種東西都是看起來繁雜冗長,經常使用的就幾個)

規則介紹:

  • version=」string」 版本提供

  • target=」ACCEPT|%%REJECT%%|DROP」 接受,拒絕或丟棄與任何規則(端口,服務等)不匹配的每一個數據包

  • short 可選開始和結束的標記,用於名稱備註

  • description 可選的開始和結束的標記,用於描述備註

  • interface 可選的空元素標記 ,只有一個name屬性,通常使name=」string」方式綁定服務到zone的接口上

  • source 可選的空元素標記,可屢次使用。它可用於將源地址、地址反饋、MAC地址或ipset綁定到區域。屬性以下:

    address=」address[/mask]」 源是IP地址或具備IPv四、IPv6掩碼的網絡IP地址;

    mac=」MAC」 源是MAC地址。它必須是xx:xx:xx:xx:xx:xx形式;

    ipset=」ipset」 源是一個ipset;

  • port 可選的空元素標記,能夠屢次使用具備多個端口條目。屬性以下:

    port=」portid[-portid]」 端口能夠是單個端口號portid,也能夠是端口範圍portid-portid

    protocol=」tcp|udp」 協議可分爲TCP/UDP

  • protocol 可選的空元素標記,能夠屢次使用具備多個協議條目。屬性以下:

    value=」string」

  • icmp-block 可選的空元素標記,能夠屢次使用具備多個條目,每一個icmp-block標記只有一個強制屬性:

    name=」string」

  • icmp-block-inversion 可選的空元素標記,只能在區域配置中使用一次。該標誌反轉icmp塊處理。僅接受啓用的ICMP類型,並在區域中拒絕全部其餘類型

  • masquerade 假裝,可選的空元素標記。它只能在區域配置中使用一次,不能用於IPV6。

  • forward-port 可選的空元素標記,能夠屢次使用具備多個端口或數據包轉發條目。forward-port有強制和可選屬性:

    強制屬性: port=」portid[-portid]」,protocol=」tcp|udp」

    可選屬性: 用於本地轉發,僅添加到端口。

to-port=」portid[-portid]」 要轉發到的目標端口或端口範圍。

to-addr=」address」 目標IPv4地址

  • source-port 可選的空元素標記,可屢次使用具備多個源端口條目。源端口全部屬性都是必需的:

    port=」portid[-portid]」

    protocol=」tcp|udp」

經常使用規則示例:

  • 規則示例

<?xml version="1.0" encoding="utf-8"?>
<zone>
      <short>Home</short>
      <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="ssh"/>
      <service name="mdns"/>
      <service name="samba-client"/>
      <service name="dhcpv6-client"/>
</zone>複製代碼
  • 服務示例

<?xml version="1.0" encoding="utf-8"?>
<service>
         <short>FTP</short>
         <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
         <port protocol="tcp" port="21"/>
         <module name="nf_conntrack_ftp"/>
</service>複製代碼
  • IPSet示例

<?xml version="1.0" encoding="utf-8"?>
<ipset type="hash:mac">
           <short>mac-list</short>
           <entry>00:11:22:33:44:55</entry>
</ipset>複製代碼
  • Helper(助手示例)用於安全地使用連接跟蹤幫助程序

<?xml version="1.0" encoding="utf-8"?>
<helper module="nf_conntrack_ftp">
              <port protocol="tcp" port="21"/>
</helper>複製代碼
  • ICMP類型,限制ICMP在Internet協議(IP)中的信息交換,迴應或者不迴應等等

<?xml version="1.0" encoding="utf-8"?>
<icmptype>
          <short>Echo Request (ping)</short>
          <description>This message is used to test if a host is reachable mostly with the ping utility.</description>
</icmptype>複製代碼
  • 通常來講,不用進行配置中的規則修改。如若須要修改,可以使用經常使用命令進行規則指定。

更多規則:

詳見https://firewalld.org/documentation/man-pages/firewalld.richlanguage

4、經常使用命令

一、基礎命令

firewall-cmd --state           #查看firewalld的狀態
firewall-cmd --get-active-zones       #查看當前活動的區域,並附帶一個目前分配給他們的接口列表 
firewall-cmd --get-defailt-zone       #查看默認區域
firewall-cmd --set-default-zone=dmz    #設置默認區域
firewall-cmd --get-zones           #查看全部可用域區
firewall-cmd --permanent --zone=internal --add-source=172.25.254.60/24          #設置源地址的所屬zone (--permanent參數表示永久生效設置,若是沒有指定--zone參數,則表示加入到默認區域)
firewall-cmd --permanent --zone=internal --remove-source=172.25.254.60/24       #刪除網絡地址
firewall-cmd --reload          #重載配置,並不會中斷服務
firewall-cmd --complete-reload      #徹底重載,會中斷服務複製代碼

二、添加服務

firewall-cmd --zone=public --add-service=http                  #在運行時環境的公共區域打開http服務
firewall-cmd --permanent --zone=public --add-service=http      #永久設定,在公共區域打開http服務複製代碼

三、使用 –direct選項,在運行時裏添加或移除鏈(iptables四表五鏈)

firewall-cmd --direct --add-rule ipv4filter IN_public_allow 0 -p tcp --dport 80 -j ACCEP      #添加規則,指定運行全部連接進入80端口
firewall-cmd --direct --remove-ruleipv4 filter IN_public_allow 0 -p tcp --dport 80 -j ACCEPT   #刪除規則
firewall-cmd --direct--get-all-rules              #列出規則複製代碼

四、使用現有文件建立新服務(在不熟悉配置命令及其規則的狀況下,不建議使用這種方式)

firewall-cmd --permanent --new-service-from-file=myservice.xml --name=mynewservice複製代碼

5、附加知識點(iptables四表五鏈,netfilter)

一、防火牆於iptables的內在關聯

簡而言之,iptables算是防火牆的基石,火牆在作數據包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專門的數據包過濾表中,這些表集成在Linux內核中。在數據包過濾表中,規則被分組放在咱們所謂的鏈(chain)中。

而netfilter/iptables進行IP過濾規則的添加,編輯和移除規則。

netfilter組件也稱爲內核空間,是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

Iptables組件是一種工具,也成爲用戶空間,它使插入、修改和除去信息包過濾表中的規則變得容易。

Linux內核過濾結構

二、iptables四表五鏈

  • Filter表 —— 三個鏈:INPUT、FORWARD、OUTPUT

    做用:過濾數據包 內核模塊:iptables_filter.

  • Nat表 —— 三個鏈:PREROUTING、POSTROUTING、OUTPUT

    做用:用於網絡地址轉換(IP、端口) 內核模塊:iptable_nat

  • Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

    做用:修改數據包的服務類型、TTL、而且能夠配置路由實現QOS內核模塊:iptable_mangle(別看這個表這麼麻煩,我們設置策略時幾乎都不會用到它)

  • Raw表 —— 兩個鏈:OUTPUT、PREROUTING

    做用:決定數據包是否被狀態跟蹤機制處理 內核模塊:iptable_raw

四表五鏈對應關係

三、鏈表處理邏輯

  • INPUT —— 進來的數據包應用此規則鏈中的策略

  • OUTPUT —— 外出的數據包應用此規則鏈中的策略

  • FORWARD —— 轉發數據包時應用此規則鏈中的策略

  • PREROUTING —— 對數據包做路由選擇前應用此鏈中的規則

    (記住!全部的數據包進來的時侯都先由這個鏈處理)

  • POSTROUTING —— 對數據包做路由選擇後應用此鏈中的規則

    (全部的數據包出來的時侯都先由這個鏈處理)

鏈表處理邏輯


參考資料:

https://firewalld.org/documentation/

https://www.cnblogs.com/clouders/p/6544584.html


本文首發於公衆號「小米運維」,點擊查看原文

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息