【Q】之Linux中的防火墙netfilter iptables
防火墻
- 一、Linux防火墻基礎
- 1.1 Linux包過濾防火墻概述
- 1.2 數(shù)據(jù)包控制的匹配流程
- 控制的匹配流程👇
- 1.2.1 四表
- 1.2.2 五鏈
- 1.2.3 四表五鏈總結
- 1.2.4 規(guī)則鏈之間的匹配順序
- 1.2.5 規(guī)則鏈內的匹配順序∶
- 過濾的匹配流程👇
- 二、編寫防火墻規(guī)則
- 2.1 基本語法、控制類型
- 2.1.1 iptables防火墻的配置方法∶
- 2.1.2 iptables 命令行配置方法∶
- 2.1.3 常用的控制類型∶
- 2.1.4 常用的管理選項∶
- 2.2 添加、查看、刪除規(guī)則
- 2.2.1 添加新的規(guī)則∶
- 2.2.2 查看規(guī)則列表∶
- 2.2.3 設置默認策略∶
- 2.2.4 刪除規(guī)則∶
- 2.2.5 清空規(guī)則∶
- 2.3 規(guī)則的匹配條件
- 2.3.1 通用匹配
- 2.3.2 隱含匹配
- 2.3.4 TCP標記匹配∶ --tcp-flags TCP標記
- 2.3.5 ICMP類型匹配∶–icmp-type ICMP類型
- 2.3.6 顯式匹配
- 2.3.7 IP范圍匹配∶ -m iprange --src-range IP范圍
- 2.3.8 狀態(tài)匹配∶-m state_–state 連接狀態(tài)
一、Linux防火墻基礎
1.1 Linux包過濾防火墻概述
■netfilter
- 位于Linux內核中的包過濾功能體系
- 稱為Linux防火墻的"內核態(tài)"
■iptables
- 位于/sbiniptables,用來管理防火墻規(guī)則的工具
- 稱為Linux防火墻的"用戶態(tài)"
上述2種稱呼都可以表示Linux防火墻
■包過濾的工作層次
- 主要是網(wǎng)絡層,針對IP數(shù)據(jù)包
- 體現(xiàn)在對包內的IP地址、端口等信息的處理上
1.2 數(shù)據(jù)包控制的匹配流程
控制的匹配流程👇
數(shù)據(jù)包到達防火墻時,規(guī)則表之間的優(yōu)先順序:
raw > mangle > nat > filter
1.2.1 四表
raw表∶ 確定是否對該數(shù)據(jù)包進行狀態(tài)跟蹤。包含兩個規(guī)則鏈, OUTPUT、PREROUTING。
mangle表∶修改數(shù)據(jù)包內容,用來做流量整形的,給數(shù)據(jù)包設置標記。包含五個規(guī)則鏈,INPUT、OUTPUT、FORWARD、PREROUTTNG、POSTROUTING。
nat表∶ 負責網(wǎng)絡地址轉換,用來修改數(shù)據(jù)包中的源、目標IP地址或端口。包含三個規(guī)則鏈, OUTPUT、PREROUTING、POSTRoUTING。
filter表;負責過濾數(shù)據(jù)包, 確定是否放行該數(shù)據(jù)包(過濾)。 包含三個規(guī)則鋅鏈,INPUT、FORWARD、OUTPUT。
注:在iptables的四個規(guī)則表中, mangle表和raw表的應用相對較少
1.2.2 五鏈
INPUT∶ 處理入站數(shù)據(jù)包,匹配目標IP為本機的數(shù)據(jù)包。
OUTPUT∶處理出站數(shù)據(jù)包,一般不在此鏈上,做配置。
FORWARD∶ 處理轉發(fā)數(shù)據(jù)包,匹配流經(jīng)本機的數(shù)據(jù)包。
PREROUTING鏈∶ 在進行路由選擇前處理數(shù)據(jù)包,用來修改目的地址,用來做DNAT。相當于把內網(wǎng)服務器的工P和端口映射到路由器的外網(wǎng)IP和端口上。
POSTROUTING鏈∶ 在進行路由選擇后處理數(shù)據(jù)包,用來修改源地址,用來做SNAT。相當于內網(wǎng)通過路由器NAT轉換功能實現(xiàn)內網(wǎng)主機通過一個公網(wǎng)工iP地址上網(wǎng)。
1.2.3 四表五鏈總結
規(guī)則表的作用∶對數(shù)據(jù)包進行過濾或處理
規(guī)則鏈的作用∶容納各種防火墻規(guī)則
鏈的分類依據(jù):處理數(shù)據(jù)包的不同時機
總結∶表里有鏈,鏈里有規(guī)則
1.2.4 規(guī)則鏈之間的匹配順序
1)主機型防火墻∶
數(shù)據(jù)包直接進入到防火墻所在的服務器的內部某一個應用程序當中
入站數(shù)據(jù)(來自外界的數(shù)據(jù)包,且目標地址是防火墻本機)∶ PREROUTING --> INPUT --> 本機的應用程序
出站數(shù)據(jù)(從防火墻本機向外部地址發(fā)送的數(shù)據(jù)包)∶ 本機的應用程序 --> OUTPUT --> POSTROUTING
2)網(wǎng)絡型防火墻∶
轉發(fā)數(shù)據(jù)(需要經(jīng)過防火墻轉發(fā)的數(shù)據(jù)包)∶ PREROUTING --> FORWARD --> POSTROUTING
1.2.5 規(guī)則鏈內的匹配順序∶
自上向下按順序依次進行檢查,找到相匹配的規(guī)則即停止 (LOG策略例外, 表示記錄相關日志)
若在該鏈內找不到相匹配的規(guī)則,則按該鏈的默認策略處理(未修改的狀況下,默認策略為允許)
過濾的匹配流程👇
- 入站數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達防火墻后,首先被PREROUTING鏈處理(是否修改數(shù)據(jù)包地址等) ,然后進行路由選擇(判斷該數(shù)據(jù)包應發(fā)往何處) ;如果數(shù)據(jù)包的目標地址是防火墻本機(如Internet用戶訪問網(wǎng)關的web服務端口) ,那么內核將其傳遞給INPUT鏈進行處理(決定是否允許通過等) ,通過以后再交給系統(tǒng)上層的應用程序(如httpd服務器)進行響應。
- 轉發(fā)數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達防火墻后,首先被PREROUTING鏈處理,然后再進行路由選擇;如果數(shù)據(jù)包的目標地址是其他外部地址(如局域網(wǎng)用戶通過網(wǎng)關訪問QQ服務器) ,則內核將其傳遞給FORWARD鏈進行處理(允許轉發(fā)或攔截、丟棄)最后交給POSTROUTING鏈(是否修改數(shù)據(jù)包的地址等)進行處理。
- 出站數(shù)據(jù)流向:防火墻本機向外部地址發(fā)送的數(shù)據(jù)包(如在防火墻主機中測試公網(wǎng)DNS服務時) ,首先進行路由選擇,確定了輸出路徑后,再經(jīng)由OUTPUT鏈處理,最后再交POSTROUTING鏈(是否修改數(shù)據(jù)包的地址等)進行處理。
入站PREROUTING input 應用程序 output postrouting
注:按第一條規(guī)則 ....二條規(guī)則的順序進行匹配處理,遵循“匹配即停止"的原則,
一旦找到一條匹配規(guī)則將不再檢查后續(xù)的其他規(guī)則,如果一直找不到匹配的規(guī)則,就按默認規(guī)則處理。
默認規(guī)則用iptables-L查看,規(guī)則鏈后面出現(xiàn)(policy ACCEPT)即是默認放行
默認策略不參與鏈內規(guī)則的順序編排
-F清空鏈時,默認策略不受影響
二、編寫防火墻規(guī)則
準備工作:
1.iptables的安裝
CentOS 7默認使用firewalld防火墻,沒有安裝 iptables,若想使用iptables防火墻。必須先關閉firewalld防火墻,再安裝 iptables
systemctl stop firewalld.service #關閉防火墻
systemctl disable firewalld.service #設為開機不自啟
setenforce 0 #關閉安全增強型
yum -y install iptables iptables-services #安裝iptables
systemctl start iptables. Service #開啟服務
2.1 基本語法、控制類型
2.1.1 iptables防火墻的配置方法∶
使用iptables 命令行。
使用system-config-firewall
2.1.2 iptables 命令行配置方法∶
命令格式
iptables [-t 表名 ] 管理選項 [ 鏈名 ] [ 匹配條件 ] [-j 控制類型 ]
例:iptables -t filter -l INPUT -p icmp -j REJECT
其中,表名、鏈名用來指定iptables命令所操作的表和鏈,未指定表名時將默認使用filter表;
管理選項:表示iptables規(guī)則的操作方式,如插入、增加、刪除、查看等;
匹配條件:用來指定要處理的數(shù)據(jù)包的特征,不符合指定條件的數(shù)據(jù)包將不會處理;控制類型指的是數(shù)據(jù)包的處理方式,如允許、拒絕、丟棄等。
注意事項:
不指定表名時,默認指filter表
不指定鏈名時,默認指表內的所有鏈
除非設置鏈的默認策略,否則必須指定匹配條件
控制類型使用大寫字母,其余均為小寫
2.1.3 常用的控制類型∶
對于防火墻,數(shù)據(jù)包的控制類型非常關鍵,直接關系到數(shù)據(jù)包的放行、封堵及做相應的日志記錄等。在iptables防火墻體系中,最常用的幾種控制類型如下。
ACCEPT∶允許數(shù)據(jù)包通過。
DROP∶直接丟棄數(shù)據(jù)包,不給出任何回應信息。
REJECT∶ 拒絕數(shù)據(jù)包通過,會給數(shù)據(jù)發(fā)送端一個響應信息。
SNAT∶修改數(shù)據(jù)包的源地址。
DNAT∶修改數(shù)據(jù)包的目的地址。
MASQUERADE∶偽裝成一個非固定公網(wǎng)IP地址。
LOG∶ 在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則。LOG只是一種輔助動作,并沒有真正處理數(shù)據(jù)包。
2.1.4 常用的管理選項∶
-A ∶ 在指定鏈的末尾追加 (–append)一條新的規(guī)則
-I ∶ 在指定鏈的開頭插入(–insert)一條新的規(guī)則, 未指定序號時默認作為第一條規(guī)則
-R ∶ 修改、替換(–replace)指定鏈中的某一條規(guī)則,可指定規(guī)則序號或具體內容
-P ∶設置指定鏈的默認策略(–policy)
-D ∶ 刪除 (–delete)指定鏈中的某一條規(guī)則, 可指定規(guī)則序號或具體內容
-F ∶ 清空(–flush)指定鏈中的所有規(guī)則,若未指定鏈名,則清空表中的所有鏈
-L∶列出 (–list)指定鏈中所有的規(guī)則,若未指定鏈名,則列出表中的所有鏈
-n ∶ 使用數(shù)字形式(–numeric)顯示輸出結果,如顯示 IP 地址而不是主機名
-v ∶ 顯示詳細信息,包括每條規(guī)則的匹配包數(shù)量和匹配字節(jié)數(shù)
–line-numbers∶ 查看規(guī)則時,顯示規(guī)則的序號
2.2 添加、查看、刪除規(guī)則
2.2.1 添加新的規(guī)則∶
添加新的防火墻規(guī)則時,使用管理選項“-A"、"-I",前者用來追加規(guī)則,后者用來插入規(guī)則。
iptables -t filter -A INPUT -p icmp -j DROP 禁止ping通本主機(無響應)
iptables -t filter -A INPUT -p icmp -j REJECT //不允許任何主機ping本主機(有響應)
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT//允許主機ssh端口 進過我的
其他
iptables -t filter -A INPUT -p tcp -j ACCEPT //允許任何主機tcp
iptables -I INPUT -p udp -j ACCEPT//允許任何主機udp
2.2.2 查看規(guī)則列表∶
iptables [-t 表名 ]-n -L[ 鏈名][–line-numbers]
或
iptables -[vn]L #注意∶不可以合寫為 -Ln,#L放后面
iptables -n -L --line-numbers
2.2.3 設置默認策略∶
iptlables [-t 表名 ] -P <鏈名><控制類型>
iptables -P INPUT DROp iptables -P FORWARD DROp
2.2.4 刪除規(guī)則∶
iptables -D INPUT -p tcp --dport 22 -j REJECT
iptables -t filter -D INPUT -p icmp -j REJECT
iptables -D INPUT 2
#一般在生產(chǎn)環(huán)境中設置網(wǎng)絡型防火墻、主機型防火墻時都要設置默認規(guī)則為DROP,并設置白名單
注意∶
若規(guī)則列表中有多條相同的規(guī)則時, 按內容匹配只刪除的序號最小的一條
按號碼匹配刪除時, 確保規(guī)則號碼小于等于已有規(guī)則數(shù),否則報錯
按內容匹配刪數(shù)時, 確保規(guī)則存在, 否則報錯
2.2.5 清空規(guī)則∶
iptables 【-t 表名】 -F 【鏈名】
iptables -F INPUT
iptables -F
注意:
-F 僅僅是清空鏈中的規(guī)則,并不影響 -P 設置的默認規(guī)則,默認規(guī)則需要手動進行修改
-P 設置了DROP后,使用-F 一定要小心
防止把允許遠程連接的相關規(guī)則清除后導致無法遠程連接主機,此情況如果沒有保存規(guī)則可重啟主機解決
如果不寫表名和鏈名,默認清空filter表中所有鏈里的所有規(guī)則
2.3 規(guī)則的匹配條件
2.3.1 通用匹配
可直接使用,不依賴于其他條件或擴展,包括網(wǎng)絡協(xié)議、IP地址、網(wǎng)絡接口等條件。
協(xié)議匹配∶ -p 協(xié)議名
地址匹配∶ -s 源地址、-d 目的地址 #可以是IP、網(wǎng)段、域名、空(任何地址)
接口匹配∶ -i 入站網(wǎng)卡、-o 出站網(wǎng)卡
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.3.2 隱含匹配
要求以特定的協(xié)議匹配作為前提,包括端口、TCP標記、ICMP類型等條件。
端口匹配∶ --sport 源端口、–dport 目的端口
#可以是個別端口、端口范圍
–sport 1000 匹配源端 口是1000的數(shù)據(jù)包
–sport 1000:3000 匹配源端 口是1000-3000的數(shù)據(jù)包
–sport : 3000 匹配源端 口是3000及以下的數(shù)據(jù)包
–sport 1000: 匹配源端 口是1000及以上的數(shù)據(jù)包
注意∶ --sport 和 --dport 必須配合 -p <協(xié)議類型> 使用
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
2.3.4 TCP標記匹配∶ --tcp-flags TCP標記
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -jACCEPT
#丟棄SYN請求包,放行其他包
2.3.5 ICMP類型匹配∶–icmp-type ICMP類型
#可以是字符串、數(shù)字代碼
"Echo-Request"(代碼為 8)表示 請求
"Echo-Reply"(代碼為 0)表示 回顯
"Destination-Unreachable"(代碼為 3)表示 目標不可達
關于其它可用的 ICMP 協(xié)議類型,可以執(zhí)行"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協(xié)議的控制類型為 REJECT
iptables -A INPUT-p icmp -j REJECT
2.3.6 顯式匹配
要求以"-m 擴展模塊"的形式明確指出類型,包括多端口、MAC地址、IP范圍、數(shù)據(jù)包狀態(tài)等條件。
多端口匹配∶
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -i ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
2.3.7 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
#禁止轉發(fā)源地址位于192.168.80.100-192.168.80.200的udp數(shù)據(jù)包
2.3.6=8 MAC地址匹配∶-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xX:xx-j DROP
#禁止來自某MAC 地址的數(shù)據(jù)包通過本機轉發(fā)
2.3.8 狀態(tài)匹配∶-m state_–state 連接狀態(tài)
常見的連接狀態(tài)∶
NEW ∶與任何連接無關的,還沒開始連接
ESTABLISHED ∶響應請求或者已建立連接的,連接態(tài)
RELATED ∶ 與已有連接有相關性的(如FTP 主被動模式的數(shù)據(jù)連接),衍生態(tài),一般與ESTABLISHED 配合使用
INVALID ∶ 不能被識別屬于哪個連接或沒有任何狀態(tài)
iptables -A FORWARD -m state --state NEW -p tcp !–syn -j DROP
#禁止轉發(fā)與正常 TCP 連接無關的非–syn 請求數(shù)據(jù)包(如偽造的網(wǎng)絡攻擊數(shù)據(jù)包)
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
總結
以上是生活随笔為你收集整理的【Q】之Linux中的防火墙netfilter iptables的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【拔刀吧少年】之Expect 自动化控制
- 下一篇: 【Q】之防火墙的SNAT DANT原理应