iptables防火牆

无敌小鲁班發表於2024-05-22

目錄
  • 1.Linux防火牆基礎
    • (1)iptables的表、鏈結構
    • (2)資料包控制的匹配流程
  • 2.編寫防火牆規則
    • (1)基本語法、控制型別
    • (2)新增、檢視、刪除規則
    • (3)規則的匹配條件
      • (1)通用匹配
      • (2)隱含匹配
      • (3)顯式匹配

iptables防火牆是Linux系統防火牆的一種,CentOS7以前的預設防火牆,CentOS 7預設使用firewalld防火牆。

1.Linux防火牆基礎

netfilter:屬於核心態的功能體系,是一個核心模組,由多個資料包過濾表組成,其中包含資料包的過濾處理規則集,並根據規則過濾處理IP資料包。

iptables:是屬於使用者態的管理工具,如同firewalld、ufw,是一個防火牆應用管理程式,用來實現防火牆規則集的增刪改查。主要工作在網路層,位於/sbin/iptables。

(1)iptables的表、鏈結構

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

四表 規則鏈 功能
raw表 OUTPUT、PREROUTING 確定是否對該資料包進行狀態跟蹤
mangle表 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING 修改資料包內容,用來做流量整形的,給資料包設定標記
nat表 OUTPUT、PREROUTING、POSTROUTING 負責網路地址轉換,用來修改資料包中的源、目標IP地址或埠
filter表 INPUT、FORWARD、OUTPUT 負責過濾資料包,確定是否放行該資料包(過濾)

注:*在 iptables 的四個規則表中,mangle 表和 raw 表的應用相對較少。表中所有規則配置後,立即生效,不需要重啟服務。

五鏈 功能
INPUT 處理入站資料包,匹配目標IP為本機的資料包
OUTPUT 處理出站資料包,一般不在此鏈上做配置
FORWARD 處理轉發資料包,匹配流經本機的資料包
PREROUTING鏈 在進行路由選擇前處理資料包,用來修改目的地址,用來做DNAT。相當於把內網伺服器的IP和埠對映到路由器的外網IP和埠上
POSTROUTING鏈 在進行路由選擇後處理資料包,用來修改源地址,用來做SNAT。相當於內網透過路由器NAT轉換功能實現內網主機透過一個公網IP地址上網

(2)資料包控制的匹配流程

表的匹配順序:
raw → mangle → nat → filter

鏈的匹配順序:
入站資料: PREROUTING → INPUT → 本機的應用程式
出站資料: 本機的應用程式 → OUTPUT → POSTROUTING
轉發資料: PREROUTING → FORWARD → POSTROUTING

規則鏈內的匹配順序:從上往下依次匹配鏈中的規則,匹配到即停止(LOG策略例外);若找不到相匹配的規則,則按照鏈的預設規則處理。

過濾入站資料包:filter(INPUT)
過濾出站資料包:filter(OUTPUT)
過濾轉發資料包:filter(FORWARD)
修改內網轉發到外網資料包的源IP地址:nat(POSTROUTING)
修改外網轉發到內網資料包的目的IP地址:nat(PREROUTING)

2.編寫防火牆規則


(1)基本語法、控制型別

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

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

常用的控制型別
ACCEPT 允許資料包透過
DROP 直接丟棄資料包,不給出任何回應資訊
REJECT 拒絕資料包透過,會給資料傳送端一個響應資訊
SNAT 修改資料包的源地址
DNAT 修改資料包的目的地址
REDIRECT 重定向改變目的埠,將接受的包轉發至本機的不同埠
MASQUERADE 偽裝成一個非固定公網IP地址
LOG 在/var/log/messages檔案中記錄日誌資訊,然後將資料包傳遞給下一條規則。LOG只是一種輔助動作,並沒有真正處理資料包
常用的管理選項
-A 在指定鏈的末尾追加(--append)一條新的規則
-I 在指定鏈的開頭插入(--insert)一條新的規則,未指定序號時預設作為第一條規則
-R 修改、替換(--replace)指定鏈中的某一條規則,可指定規則序號或具體內容
-P 設定指定鏈的預設策略(--policy)
-D 刪除(--delete)指定鏈中的某一條規則,可指定規則序號或具體內容
-F 清空(--flush)指定鏈中的所有規則,若未指定鏈名,則清空表中的所有鏈
-L 列出(--list)指定鏈中所有的規則,若未指定鏈名,則列出表中的所有鏈
-n 使用數字形式(--numeric)顯示輸出結果,如顯示 IP 地址而不是主機名
-v 顯示詳細資訊,包括每條規則的匹配包數量和匹配位元組數
--line-numbers 檢視規則時,顯示規則的序號


(2)新增、檢視、刪除規則

增 iptables -t 表名 -A 鏈名 匹配條件 -j 控制型別
   iptables -t 表名 -I 鏈名 序號 匹配條件 -j 控制型別



刪 iptables -t 表名 -D 鏈名 序號/內容
   iptables -t 表名 -F [鏈名]              #如果不指定鏈名則刪除清空所有鏈的規則


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

改 iptables -t 表名 -R 鏈名 序號 新規則內容
   iptables -t 表名 -P 鏈名 ACCEPT/DROP/REJECT

查 iptables -t 表名 -L -n -v --line-numbers [鏈名] 
               -nvL


生產環境中通常使用白名單方式設定規則  
   iptables -t 表名 -A 鏈名 匹配條件 -j ACCEPT       #先配置需要放行的規則
   ....

iptables -t 表名 -A 鏈名 -j DROP    
iptables -t 表名 -P 鏈名 DROP       
#最後配置預設禁止所有的規則

(3)規則的匹配條件

(1)通用匹配

可直接使用,不依賴於其他條件或擴充套件,包括網路協議、IP地址、網路介面等條件。
協議匹配:-p 協議名
地址匹配:-s 源地址、-d 目的地址 #可以是IP、網段、域名、空(任何地址)
介面匹配:-i 入站網路卡、-o 出站網路卡

(2)隱含匹配

要求以特定的協議匹配作為前提,包括埠、TCP標記、ICMP型別等條件。
埠匹配:--sport 源埠、--dport 目的埠
可以是個別埠、埠範圍
需要使用 -p 指定協議作為前提

-p tcp/udp --dport 目的埠/埠範圍
-p tcp/udp --sport 源埠/埠範圍
-p icmp --icmp-type 8(請求)/0(回顯)/3(目標不可達)


(3)顯式匹配

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

需要使用 -m 指定模組
-m multiport --sport/--dport 埠列表
-m iprange --src-range/--dst-range  IP範圍
-m mac --mac-source 源MAC地址
-m state --state RELATED,ESTABLISHED[,NEW,INVALID]          #RELATED,ESTABLISHED 用於放行返回的應答包進站

常見的連線狀態
NEW 主機連線目標主機,在目標主機上看到的第一個想要連線的包
ESTABLISHED 主機已與目標主機進行通訊,判斷標準只要目標主機回應了第一個包,就進入該狀態
RELATED 主機已與目標主機進行通訊,目標主機發起新的連結方式,一般與ESTABLISHED 配合使用
INVALID 無效的封包,例如資料破損的封包狀態

注:*主機型防火牆 主要使用 INPUT、OUTPUT 鏈,設定規則時一般要詳細的指定到埠
網路型防火牆 主要使用 FORWARD 鏈,設定規則時很少去指定到埠,一般指定到IP地址或者到網段即可

相關文章