- 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地址或者到網段即可