1. 程式人生 > 其它 >防火牆——iptables防火牆(四表五鏈、防火牆配置方法、匹配規則詳解)

防火牆——iptables防火牆(四表五鏈、防火牆配置方法、匹配規則詳解)

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


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


3、iptables
屬於“使用者態”(UserSpace,又稱為使用者空間)的防火牆管理體系。
是一種用來管理Linux防火牆的命令程式,它使插入、修改和刪除資料包過濾表中的規則變得容易,通常位於/sbin/iptables目錄下。


4、netfilter/iptables關係
netfilter/iptables後期簡稱為iptables。iptables是基於核心的防火牆,其中內建了raw、mangle、 nat和filter四個規則表。
表中所有規則配置後,立即生效,不需要重啟服務。(三思而後行)


二、四表五鏈
1、表/鏈作用
規則表的作用:容納各種規則鏈
規則鏈的作用:容納各種防火牆規則
總結:表裡有鏈,鏈裡有規則


2、四表:表裡有鏈

 

 

3、五鏈:鏈裡放的規則


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

 

5、規則鏈之間的匹配順序
主機型防火牆

  • 入站資料(來自外界的資料包,且目標地址是防火牆本機)
    •   PREROUTING --> INPUT --> 本機的應用程式
  • 出站資料(從防火牆本機向外部地址傳送的資料包)
    •   本機的應用程式 --> OUTPUT --> POSTROUTING

網路型防火牆

  • 轉發資料(需要經過防火牆轉發的資料包)
    •   PREROUTING --> FORWARD --> POSTROUTING

規則鏈內的匹配順序

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


三、iptables的安裝
CentOS 7預設使用firewalld防火牆,沒有安裝 iptables,若想使用iptables防火牆。必須先關閉firewalld防火牆,再安裝 iptables
#關閉防火牆
systemctl stop firewalld.service
systemctl disable firewalld.service #設定firewalld不再開機自啟動,enable開啟

#安裝並開啟iptables服務
yum -y install iptables iptables-services
systemctl start iptables.service

 

 


四、iptables防火牆的配置方法
1、使用iptables命令列
2、使用system-config-firewall


1、iptables命令列配置方法
命令格式

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

 

 

2、注意事項

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

 

3、常用的控制型別

 

 

4、常用的管理選項


5、新增新的規則
iptables -t filter -A INPUT -P icmp -j REJECT
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT

 

 

 

 

6、檢視規則列表
iptables [-t 表名] -n -L [鏈名] [--line-numbers]

iptables -[vn]L #注意:不可以合寫為-Ln
iptables -n -L --line-numbers

 

 


7、設定預設策略
iptables [-t表名] -P <鏈名> <控制型別>

iptables -P INPUT DROP
iptables -P FORWARD DROP
#一-般在生產環境中設定網路型防火牆、主機型防火牆時都要設定預設規則為DROP, 並設定白名單

8、刪除規則
iptables -D INPUT 2
iptables -t filter -D INPUT -P icmp -j REJECT

注意:
1.若規則列表中有多條相同的規則時,按內容匹配只刪除的序號最小的a條
2.按號碼匹配刪除時,確保規則號碼小於等於已有規則數,否則報錯
3.按內容匹配刪數時,確保規則存在,否則報錯

 

 

9、清空規則
iptables [-t 表名] -F [鏈名]
iptables -F INPUT
iptables -F

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

 

 


五、規則的匹配
1、通用匹配

例:
iptables -A FORWARD ! -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.80.11 -j DROP
iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP


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

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

(1) TCP標記匹配:–tcp-flags TCP標記
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
#丟棄SYN請求包,放行其他包

(2)ICMP型別匹配:–icmp-type ICMP型別
#可以是字串、數字程式碼、、目標不可達
“Echo-Request”(程式碼為 8)表示 請求
“Echo-Reply”(程式碼為 0)表示 回顯
“Destination-Unreachable”(程式碼為 3)表示 目標不可達
關於其它可用的 ICMP 協議型別,可以執行“iptables -p icmp -h”命令,檢視幫助資訊

iptables -A INPUT -p icmp --icmp-type 8 -j DROP #禁止其它主機ping 本機
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #允許本機ping 其它主機

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #當本機ping 不通其它主機時提示目標不可達
#此時其它主機需要配置關於icmp協議的控制型別為 REJECT
iptables -A INPUT -p icmp -j REJECT

(3)顯示匹配
要求以“-m 擴充套件模組”的形式明確指出型別,包括多埠、MAC地址、IP範圍、資料包狀態等條件。
多埠匹配
-m multiport --sports 源埠列表
-m multiport --dports 目的埠列表

例:
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT

MAC地址匹配
-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
#禁止來自某MAC地址的資料包通過本機轉發

IP範圍匹配
-m iprange --src-range IP範圍

iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP
#禁止轉發源地址位於192.168.80.100-192.168.80.200的udp資料包

狀態匹配
-m state --state 連線狀態

常見的連線狀態:

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
#禁止轉發與正常TCP連線無關的非--syn請求資料包( 如偽造的網路攻擊資料包)

iptables -I INPUT -P tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
#對進來的包的狀態進行檢測。已經建立tcp連線的包以及該連線相關的包允許通過。
#比如我和你做生意,我們談成了生意,到了支付的時候,就可以直接呼叫與這筆生意相關的支付功能
iptables -P INPUT DROP

總結
1、iptable防火牆預設包括哪幾個表?哪幾個鏈?

四表:raw表、mangle表、nat表、filter表
五鏈:INPUT、OUTPUT、FORWARD、PREROUTING鏈、POSTROUTING鏈
2、對於轉發的資料包,會經過哪幾種鏈的處理?

(需要經過防火牆轉發的資料包)PREROUTING --> FORWARD --> POSTROUTING
3、在同一個規則鏈內,規則匹配的特點是什麼?

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

請看原文:https://blog.csdn.net/qq_47855463/article/details/117214469