Iptables防火牆應用

God_ZY發表於2020-11-06

一、Linux包過濾防火牆概述

1.1、netfilter

位於Linux核心中的包過濾功能體系

稱為Linux防火牆的“核心態”

1.2、iptables

位於/sbin/iptables,用來管理防火牆規則的工具

稱為Linux防火牆的使用者態

–上述兩種稱呼都可以表示Linux防火牆

1.3、包過濾的工作層次

主要是網路層,針對IP資料包

體現在對包內的IP地址、埠等資訊的處理上

在這裡插入圖片描述

二、iptables的表、鏈結構

2.1、五鏈

2.1.1、規則鏈

規則的作用:對資料包進行過濾或處理

鏈的作用:容納各種防火牆規則

鏈的分類依據:處理資料包的不同時機

2.1.2、預設包括5種規則鏈(類似於ACL中的訪問控制列表)

INPUT:處理入站資料包(進入防火牆時)

OUTPUT:處理出戰資料包(出防火牆時)

FORWARD:處理轉發資料包NAT時使用

PREROUTING鏈:在進行路由選擇前處理資料包(先把目標IP轉換為私有IP再查詢路由表進行資料轉發)

POSTROUTING鏈:在進行路由選擇後處理資料包(從內向外會查路由表;將源地址轉換為外網地址出去)

伺服器上在input鏈上寫規則;客戶端在input鏈或forward鏈

2.2、四表

2.2.1規則表

表的作用:容納各種規則鏈

表的劃分依據:防火牆規則的作用相似

2.2.2預設包括4個規則表

(1)、filter表:filter表用來對資料包進行過濾,根據具體的規則要求決定如何處理一個資料包。filter表對應的核心模組為iptables_filter,表內包含三個鏈,即INPUT,FORWARD,OUTPUT。

(2)、nat表:nat(NetworkAddress Translation,網路地址轉換)表主要用來修改資料包的IP地址,埠號等資訊。nat表對應的核心模組為iptables_nat,包含三個鏈,即PREROUTING,POSTROUTING,OUTPUT。

(3)、mangle表:mangle表用來修改資料包的TOS(Type Of Service,服務型別)、TTL(Time To Live,生存週期),或者為資料包設定Mark標記,以實現流量整形、策略路由等高階應用。mangle表對應的核心模組為iptables_mangle,表內包含五個鏈,即PREROUTING,POSTROUTING,INOPUT,OUTPUT,FORWARD。

(4)、raw表:raw表是自1.2.9版本以後的iptables新增的表,主要用來決定是否對資料包進行狀態跟蹤。raw表對應的核心模組為iptables_raw,表內包含兩個鏈,即OUTPUT,PREROUTING。

補充:

狀態化防火牆:高安全到低安全可以訪問是因為防火牆會做標記。

2.3、預設的表、鏈結構示意圖

表包含鏈

鏈包含規則

2.4、資料包過濾的匹配流程

2.4.1、規則表之間的順序

raw–mangle–nat–filter

2.4.2、規則鏈之間的順序

PREROUTING–INPUT–FORWARD–OUTPUT–POSTROUTING

入站:PREROUTING–INPUT

出戰:OUTPUT–POSTROUTING

轉發:PREROUTING–FORWARD–POSTROUTING

2.4.3、規則鏈內的匹配順序

按順序依次檢查,匹配即停止(LOG策略例外)

若找不到相匹配的規則,則按該鏈的預設策略處理

三、使用iptables工具

3.1、安裝使用iptables防火牆

Centos7預設使用firewalld防火牆,若想使用iptables防火牆,必須先關閉firewalld防火牆!!!

systemctl stop firewalld

安裝iptables防火牆

yum -y install iptables iptables-services

設定iptables開機啟動

systemctl start iptables

systemctl enable iptables

3.2、iptables的基本語法

3.2.1、語法構成

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

iptables -t filter -I INPUT -p icmp -j REJECT
-t預設表filter可以不寫
-I在鏈首部插入
-p指定協議
-j控制型別

注意事項

不指定表名時,預設指filter表

不指定鏈名時,預設指表內的所有鏈

除非設定鏈的預設策略,否則必須指定匹配條件

選項、鏈名、控制型別使用大寫字母,其餘均為小寫

3.2.2、資料包的常見控制型別

ACCEPT:允許通過

DROP:直接丟棄,不給出任何回應

REJECT:拒絕通過,必要時會給出提示

LOG:記錄日誌資訊,然後傳給下一條規則繼續匹配

3.2.3、新增新的規則

-A:在鏈的末尾追加一條規則

-I:在鏈的開頭(或指定序號)插入一條規則

iptables -t filter -A INPUT -p tcp -j ACCEPT 

##在INPUT鏈的末尾追加tcp協議允許通過的規則

iptables -I INPUT -p udp -j ACCEPT 

##在INPUT鏈的開頭插入允許udp協議通過的規則

iptables -I INPUT 2 -p icmp -j ACCEPT 

##在INPUT鏈的第二個規則中插入允許icmp協議通過的規則

3.2.4、檢視規則列表

-L列出所有的規則條目
-n以數字形式顯示地址、埠等資訊
-v以更詳細的方式顯示規則資訊

–line-numbers:檢視規則時,顯示規則的序號

iptables -L INPUT --line-numbers

##檢視INPUT鏈所有的規則條目,並顯示規則的序號

[root@service ~]# iptables -nL INPUT ##以數字形式顯示INPUT鏈所有的規則條目(n和L的順序不能倒)

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0

ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0

3.2.5、刪除、清空規則

-D:刪除鏈內指定序號(或內容)的一條規則

-F:清空所有的規則

[root@service ~]# iptables -D INPUT 2  ##刪除INPUT鏈中的第二條規則

[root@service ~]# iptables -F  ##清空filter表中的規則(加-F是隻清空filter表中的規則)

[root@service ~]# iptables -t nat -F  ##清空nat表中的規則 

[root@service ~]# iptables -t mangle -F  ##清空mangle表中的規則 

[root@service ~]# iptables -t raw -F   ##清空raw表中的規則 

3.2.6、設定預設策略

-p:為指定的鏈設定預設規則

[root@chen etc]# iptables -t filter -P FORWARD DROP   ##為FORWARD鏈設定預設規則為直接丟棄

[root@chen etc]# iptables -P OUTPUT ACCEPT   ##為OUTPUT鏈設定預設規則為允許通過

3.2.7、常用管理選項彙總

類別選項用途
新增新的規則-A在鏈的末尾追加一條規則
-l在鏈的開頭(或指定序號)插入一條規則
檢視規則列表-L列出所有的規則條目
-n以數字形式顯示地址,埠等資訊
-v以更詳細的方式顯示規則資訊
–line-numbers檢視規則時,顯示規則的序號
刪除、清空規則-D刪除鏈內指定序號(或內容)的一條規則
-F清空所有規則
設定預設策略-P為指定的鏈設定預設規則

四、規則的匹配條件

4.1、匹配型別

4.1.1、通用匹配

可直接使用,不依賴於其他條件或擴充套件

包括網路協議、IP地址、網路介面等條件

4.1.2、隱含匹配

要求以特定的協議匹配作為前提

包括埠、TCP標記、ICMP型別等條件

4.1.3、顯式匹配

要求以“-m 擴充套件模組” 的形式明確指出型別

包括多埠、MAC地址、IP範圍、資料包狀態等條件

4.2常見的通用匹配條件

協議匹配:-p 協議名

  地址匹配:-s 源地址、-d 目的地址

  介面匹配:-i 入站網路卡、-o出站網路卡

感嘆號!表示條件取反

[root@service ~]# iptables -A FORWARD ! -p icmp -j ACCEPT  ##FORWARD鏈中追加一條規則:除了icmp協議,其他協議都accept

[root@service ~]# iptables -A INPUT -s 14.0.0.50 -j REJECT  ##在INPUT鏈中新增一條規則:來自14.0.0.50的資料包都拒絕通過

[root@service ~]# iptables -A INPUT -s 14.0.0.0/24 -j DROP  ##在INPUT鏈中新增一條規則:來自14.0.0.0/24網段的資料包全都丟棄(加完ssh不能用了)

[root@service ~]# iptables -A INPUT -i ens33 -s 14.0.0.50 -j DROP

##在INPUT鏈中追加一條規則:從14.0.0.50來的,從外網介面ens33進入的資料包都丟棄

[root@service ~]# iptables -A INPUT -i ens33 -s 192.168.0.0/16 -j DROP

##在INPUT鏈中追加一條規則:從192.168.0.0/16網段來的,從外網介面ens33進入的資料包都丟棄

4.3常見的隱含匹配條件

埠匹配:--sport 源埠、--dport 目的埠

ICMP型別匹配:--icmp-type ICMP型別

[root@service ~]# iptables -A FORWARD -s 14.0.0.0/24 -p udp --dport 53 -j ACCEPT

[root@service ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

[root@service ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP

[root@service ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT  

[root@service ~]# iptables -A INPUT -p icmp --icmp-type 3 -j DROP

echo-request 8請求,echo-rely 0回顯,destination-unreachable 3不可達

4.4常用的顯式匹配條件

多埠匹配:-m multiport --sports 源埠列表

                      -m multiport --dports 目的埠列表

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

MAC地址匹配:-m mac --mac-source MAC地址

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

[root@service ~]# iptables -A INPUT -p tcp -m multiport --dports 25,80,110 -j ACCEPT

##在INPUT鏈中追加一條規則:目的埠列表中tcp25,80,110埠允許通過

[root@service ~]# iptables -A FORWARD -p tcp -m iprange --src-range 14.0.0.40-14.0.0.100 -j ACCEPT

##在FORWARD鏈中追加一條規則:IP地址範圍為14.0.0.40-14.0.0.100的資料包允許通過

[root@service ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:53:23 -j DROP

##在INPUT鏈中追加一條規則:MAC地址為00:0c:29:c0:53:23的資料包丟棄

相關文章