1. 程式人生 > 其它 >Blog.043 Linux 防火牆① iptables

Blog.043 Linux 防火牆① iptables

本章目錄

1. iptables 概述
  1.1 netfilter/iptables 關係
2. iptables 的 四表五鏈
  2.1 四表 概述
  2.2 五鏈 概述
  2.3 四表五鏈的關係圖
  2.4 規則鏈的匹配順序
3. 編寫 iptables 防火牆規則
  3.1 iptables 的安裝
  3.2 基本語法、控制型別
  3.3 新增、檢視、刪除規則
  3.4 規則的匹配條件

1. iptables 概述

  • Linux 系統的防火牆:IP 資訊包過濾系統,它實際上由兩個元件 netfilter 和 iptables 組成;
  • 主要工作在網路層,針對 IP 資料包。體現在對包內的IP地址、埠等資訊的處理上。


  1.1 netfilter/iptables 關係

    (1)netfilter:

  • 屬於 “核心態” (KernelSpace,又稱為核心空間)的防火牆功能體系;
  • 是核心的一部分,由–些資料包過濾表組成,這些表包含核心用來控制資料包過濾處理的規則集。

    (2)iptables:

  • 屬於“使用者態”(User Space, 又稱為使用者空間)的防火牆管理體系;
  • 是一種用來管理 Linux 防火牆的命令程式,它使插入、修改和刪除資料包過濾表中的規則變得容易,通常位於 /sbin/iptables 目錄下;
  • netfilter/iptables 後期簡稱為 iptables,iptables 是基於核心的防火牆,其中內建了 raw、mangle、nat 和 filter 四個規則表;
  • 表中所有規則配置後,立即生效,不需要重啟服務。


2. iptables 的 四表五鏈

    規則表的作用:容納各種規則鏈
    規則鏈的作用:容納各種防火牆規則
    總結:表裡有鏈,鏈裡有規則


  2.1 四表 概述

    (1)raw表:

  • 確定是否對該資料包進行狀態跟蹤。
  • 包含兩個規則鏈,OUTPUT、 PREROUTING;

    (2)mangle 表:

  • 修改資料包內容,用來做流量整形的,給資料包設定標記。
  • 包含五個規則鏈,INPUT、 OUTPUT、FORWARD、 PREROUTING、 POSTROUTING;

    (3)nat 表:

  • 負責網路地址轉換,用來修改資料包中的源、目標IP地址或埠。
  • 包含三個規則鏈,OUTPUT、PREROUTING、 POSTROUTING;

    (4)filter 表:

  • 負責過濾資料包,確定是否放行該資料包(過濾)。包含三個規則鏈,INPUT、 FORWARD、0UTPUT;
  • 在 iptables 的四個規則表中,mangle 表和 raw 表的應用相對較少。

    資料包到達防火牆時,規則表之間的優先順序:
    raw > mangle > nat > filter


  2.2 五鏈 概述

    (1)INPUT:

  • 處理入站資料包,匹配目標IP為本機的資料包;

    (2)OUTPUT:

  • 處理出站資料包,–般不在此鏈上做配置;

    (3)FORWARD:

  • 處理轉發資料包,匹配流經本機的資料包;

    (4)PREROUTING:

  • 在進行路由選擇前處理資料包,用來修改目的地址,用來做DNAT。
  • 相當於把內網伺服器的IP和埠對映到路由器的外網IP和埠上;

    (5)POSTROUTING:

  • 在進行路由選擇後處理資料包,用來修改源地址,用來做SNAT。
  • 相當於內網通過路由器NAT轉換功能實現內網主機通過一個公網IP地址上網。

  2.3 四表五鏈的關係圖


  2.4 規則鏈的匹配順序

    (1)規則鏈之間的匹配順序

  • 主機型防火牆:
  • 入站資料(來自外界的資料包,且目標地址是防火牆本機) : PREROUTING --> INPUT -->本機的應用程式
  • 出站資料(從防火牆本機向外部地址傳送的資料包) : 本機的應用程式–> OUTPUT --> POSTROUTING
  • 網路型防火牆:
  • 轉發資料( 需要經過防火牆轉發的資料包) : PREROUTING --> FORWARD --> POSTROUTING

    (2)規則鏈內的匹配順序

  • 自上向下按順序依次進行檢查,找到相匹配的規則即停止 (LOG策略例外,表示記錄相關日誌)
  • 若在該鏈內找不到相匹配的規則,則按該鏈的預設策略處理 (未修改的狀況下,預設策略為允許)

3. 編寫 iptables 防火牆規則
  3.1 iptables 的安裝

  • Centos 7 預設使用 firewalld 防火牆,沒有安裝 iptables,若想使用iptables 防火牆。
  • 必須先關閉 firewalld 防火牆,再安裝 iptables。
1 systemctl stop firewalld.service        #關閉防火牆
2 systemctl disable firewalld.service             #設為開機不自啟
3  
4 yum -y install iptables iptables-services       #安裝iptables
5 systemctl start iptables. Service           #開啟服務

  3.2 基本語法、控制型別

    (1)iptables 防火牆的配置方法

  • 使用 iptables 命令列
  • 使用 system-config-firewall(圖形介面)


    (2)iptables 命令列配置方法

    命令列格式:

  • iptables [-t 表名 ] 管理選項 [ 鏈名 ] [ 匹配條件 ] [-j 控制型別 ]

    注意事項:

  • 不指定表名時,預設指filter表
  • 不指定鏈名時,預設指表內的所有鏈
  • 除非設定鏈的預設策略,否則必須指定匹配條件
  • 控制型別使用大寫字母,其餘均為小寫


    (3)常用的控制型別

  • ACCEPT:

    允許資料包通過。

  • DROP:

    直接丟棄資料包,不給出任何迴應資訊。

  • REJECT:

    拒絕資料包通過,會給資料傳送端一個響應資訊。 SNAT∶修改資料包的源地址。

  • DNAT:

    修改資料包的目的地址。

  • MASQUERADE:

    偽裝成一個非固定公網IP地址。

  • LOG:

    在 /var/log/messages 檔案中記錄日誌資訊,然後將資料包傳遞給下一條規則。
    LOG 只是一種輔助動作,並沒有真正處理資料包。


    (4)常用的管理選項

-A 在指定鏈的末尾追加 (–append)一條新的規則
-I 在指定鏈的開頭插入(–insert)一條新的規則, 未指定序號時預設作為第一條規則
-R 修改、替換(–replace)指定鏈中的某一條規則,可指定規則序號或具體內容
-P

設定指定鏈的預設策略(–policy)

-D 刪除 (–delete)指定鏈中的某一條規則, 可指定規則序號或具體內容
-F 清空(–flush)指定鏈中的所有規則,若未指定鏈名,則清空表中的所有鏈
-L 列出 (–list)指定鏈中所有的規則,若未指定鏈名,則列出表中的所有鏈
-n

使用數字形式(–numeric)顯示輸出結果,如顯示 IP 地址而不是主機名

-v 顯示詳細資訊,包括每條規則的匹配包數量和匹配位元組數
–line-numbers 檢視規則時,顯示規則的序號


  3.3 新增、檢視、刪除規則

  • 新增新的規則
1 iptables -t filter -A INPUT -p icmp -j REJECT   禁止ping通本主機(有響應)
2 iptables -t filter -A INPUT -p icmp -j DROP    禁止ping通本主機(無響應)
3 iptables -I INPUT 2 -p tcp--dport 22 -jACCEPT
  • 檢視規則列表
1 iptables [-t 表名 ]-n -L[ 鏈名][--line-numbers]
2 3 iptables -[vn]L      #注意∶不可以合寫為 -Ln
4 iptables -n -L --line-numbers
  • 設定預設策略
1 iptlables [-t 表名 ] -P <鏈名><控制型別>
2 iptables -P INPUT DROp iptables -P FORWARD DROp
  • 刪除規則
1 iptables -D INPUT 2
2 iptables -t filter -D INPUT -p icmp -jREJECT

    一般在生產環境中設定網路型防火牆、主機型防火牆時都要設定預設規則為DROP,並設定白名單
    注意:

  • 若規則列表中有多條相同的規則時, 按內容匹配只刪除的序號最小的一條
  • 按號碼匹配刪除時, 確保規則號碼小於等於已有規則數,否則報錯
  • 按內容匹配刪數時, 確保規則存在, 否則報錯
  • 清空規則
1 iptables 【-t 表名】 -F 【鏈名】
2 iptables -F INPUT
3 iptables -F

    注意:

  • -F 僅僅是清空鏈中的規則,並不影響 -P 設定的預設規則,預設規則需要手動進行修改
  • -P 設定了DROP後,使用-F 一定要小心
  • 防止把允許遠端連線的相關規則清除後導致無法遠端連線主機,此情況如果沒有儲存規則可重啟主機解決
  • 如果不寫表名和鏈名,預設清空filter表中所有鏈裡的所有規則

  3.4 規則的匹配條件

    (1)通用匹配

    可直接使用,不依賴於其他條件或擴充套件,包括網路協議、IP地址、網路介面等條件。

  • 協議匹配∶ -p 協議名
  • 地址匹配∶ -s 源地址、-d 目的地址 #可以是IP、網段、域名、空(任何地址)
  • 介面匹配∶ -i 入站網絡卡、-o 出站網絡卡
1 iptables -A FORWARD !-p icmp -j ACCEPT
2 iptables -A INPUT -s 192.168.80.11 -j DROP
3 iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP

    (2)隱含匹配

    要求以特定的協議匹配作為前提,包括埠、TCP標記、ICMP型別等條件

1 埠匹配∶ --sport 源埠、--dport 目的埠

    可以是個別埠、埠範圍

  • –sport 1000 匹配源端 口是1000的資料包
  • –sport 1000:3000 匹配源端 口是1000-3000的資料包
  • –sport : 3000 匹配源端 口是3000及以下的資料包
  • –sport 1000: 匹配源端 口是1000及以上的資料包

    注意:--sport 和 --dport 必須配合 -p <協議型別> 使用

1 iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
2 iptables-I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP

    TCP標記匹配:- - tcp-flags TCP標記

1 iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -jACCEPT
2 #丟棄SYN請求包,放行其他包

    CMP型別匹配:– icmp-type ICMP型別
    可以是字串、數字程式碼

  • "Echo-Request"(程式碼為 8)表示 請求
  • "Echo-Reply"(程式碼為 0)表示 回顯
  • "Destination-Unreachable"(程式碼為 3)表示 目標不可達

    關於其它可用的 ICMP 協議型別,可以執行 "iptables -p icmp -h" 命令,檢視幫助資訊

1 iptables -A INPUT -p icmp --icmp-type 8 -j DROP #禁止其它主機ping 本機
2 iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #允許本機ping 其它主機
3  
4 iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT    #當本機ping 不通其它主機時提示目標不可達

    此時其它主機需要配置關於icmp協議的控制型別為 REJECT

1 iptables -A INPUT-p icmp -j REJECT

    (3)顯式匹配

    要求以"-m 擴充套件模組"的形式明確指出型別,包括多埠、MAC地址、IP範圍、資料包狀態等條件。

  • 多埠匹配

    -m multiport --sport 源埠列表
    -m multiport --dport 目的埠列表

1 iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -i ACCEPT
2 iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
  • IP範圍匹配:-m iprange --src-range IP 範圍
1 iptables -A FORWARD -p udp -m iprange--src-range 192.168.80.100-192.168.80.200-j DROP
  • MAC地址匹配:-m mac --mac-source MAC 地址
1 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xX:xx-j DROP
2     # 禁止來自某MAC 地址的資料包通過本機轉發
  • 狀態匹配:-m state_–state 連線狀態

    常見的連線狀態∶

  • NEW ∶與任何連線無關的,還沒開始連線
  • ESTABLISHED ∶響應請求或者已建立連線的,連線態
  • RELATED ∶ 與已有連線有相關性的(如 FTP 主被動模式的資料連線),衍生態,一般與ESTABLISHED 配合使用
  • INVALID ∶ 不能被識別屬於哪個連線或沒有任何狀態
1 iptables -A FORWARD -m state --state NEW -p tcp !--syn -j DROP

    禁止轉發與正常 TCP 連線無關的非–syn 請求資料包(如偽造的網路攻擊資料包)

1 iptables -I INPUT -p tcp -m multiport --dport 80, 22,21,20,53 -j ACCEPT
2 iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
3 iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT

-