iptables 防火墙
一、iptables 概述
Linux系統的防火墻: IP 信息包過濾系統,它實際上由兩個組件 netfilter 和 iptables 組成。
主要工作在網絡層,針對 IP 數據包。針對 TCP/IP 數據包實施過濾和限制,屬于典型的包過濾防火墻(或稱為網絡層防火墻)
netfilter/iptables:IP 信息包過濾系統,它實際上由兩個組件 netfilter 和 iptables 組成。 ?
1.1 netfilter/iptables關系
netfilter : 屬于“內核態”( Kernel Space, 又稱為內核空間 ) 的防火墻功能體系。 是內核的一部分,由一些數據包過濾表組成,這些表包含內核用來控制數據包過濾處理的規則集。
iptables: 屬于“用戶態”( User Space,又稱為用戶空間 ) 的防火墻管理體系。 是一種用來管理Linux防火墻的命令程序,它使插入,修改和刪除數據包過濾表中的規則變得容易,通常位于 /sbin/iptables 目錄下。
netfilter/iptables后期簡稱為iptables。iptables是基于內核的防火墻其中內置了 raw、mangle 、nat 和 filter 四個規則表。
表中所有規則配置后,立即生效,不需要重啟服務。
1.2 iptables 的四表五鏈
1.2.1 四表
raw :主要用來決定是否對數據包進行狀態跟蹤包含兩個規則鏈,OUTPUT、PREROUTING
mangle :修改數據包內容,用來做流量整形的,給數據包設置標記。包含五個規則鏈:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
nat :負責網絡地址轉換,用來修改數據包中的源、目標IP地址或端口。包含三個規則鏈:oUTPUT、PEROUTTNG、POSTROUTING
filter :負責過濾數據包,確定是否放行該數據包(過濾)。包含三個鏈:PREROUTTNG、POSTROUTING、OUTPUT
注 :在iptables的四個規則表中,mangle表和raw表的應用相對較少
1.2.2 五鏈
INPUT :處理入站數據包,匹配目標 IP 為本機的數據包。
OUTPUT :處理出站數據包,一般不在此鏈上做配置。
FORWARD :處理轉發數據包,匹配流經本機的數據包。
PREROUTING鏈 :在進行路由選擇前處理數據包,用來修改目的地址,用來做 DNAT。相當于把內網中的 80 端口映射到路由器外網端口上。
POSTROUTING鏈 :在進行路由選擇后處理數據包,用來修改源地址,用來做 SNAT。相當于內網通過路由器 NAT 轉換功能實現內網主機通過一個公網IP地址上網。
1.2.3 表鏈結構示意圖
優先順序 :規則表應用順序 : raw → mangle → nat → filter ?
1.2.4 規則鏈之間的匹配順序
入站數據:PREROUTING→>INPUT
出站數據:OUTPUT→POSTROUTING
轉發數據:PREROUTING→FORWARD→POSTROUTING
主機型防火墻: 數據包直接進入到防火墻所在的服務器的內部某一個應用程序當中,是不是我只是路過服務器吧,是直接進入到服務 入站數據 ( 來自外界的數據包,且目標地址是防火墻本機 ) :PREROUTING --> INPUT -->本機的應用程序 出站數據 ( 從防火墻本機向外部地址發送的數據包 ) :本機的應用程序–>OUTPUT–>POSTROUTING
網絡型防火墻: 轉發數據 ( 需要經過防火墻轉發的數據包 ) :PREROUTING --> FORWARD --> POSTROUTING
1.2.5 規則鏈內的匹配順序
自上向下按順序依次進行檢查,找到相匹配的規則即停止(LOG策略例外,表示記錄相關日志)要么放行要么丟棄
若在該鏈內找不到相匹配的規則,則按該鏈的默認策略處理(未修改的狀況下,默認策略為允許)
注 :按第一條規則…第二條規則的順序進行匹配處理,遵循"匹配即停止"的原則, 一旦找到一條匹配規則將不再檢查后續的其他規則,如果一直找不到匹配的規則,就按默認規則處理。
默認規則用 iptables -L 查看,規則鏈后面出現 ( policy ACCEPT ) 即是默認放行
默認策略不參與鏈內規則的順序編排
-F 清空鏈時,默認策略不受影響
1.2.6 數據包在規則表、鏈間的匹配流程
入站數據流向: 來自外界的數據包到達防火墻后,首先被 PREROUTING鏈 處理( 是否修改數據包地址等 ),然后進行路由選擇( 判斷該數據包應發往何處 )如果數據包的目標地址是防火墻本機( 如 Internet 用戶訪問網關的 web 服務端口 ) ,那么內核將其傳遞給 INPUT鏈 進行處理( 決定是否允許通過等 ),通過以后再交給系統上層的應用程序 ( 如httpd服務器 )進行響應。
轉發數據流向: 來自外界的數據包到達防火墻后,首先被 PREROUTING鏈 處理,然后再進行路由選擇;如果數據包的目標地址是其他外部地址( 如局域網用戶通過網關訪問QQ服務器 ),則內核將其傳遞給 FORWARD鏈 進行處理( 允許轉發或攔截、丟棄 ),最后交給 POSTROUTING 鏈( 是否修改數據包的地址等 )進行處理。
入站 prerouting input 應用程序 output postrouting
二、iptables 配置
2.1 iptables 安裝
Centos 7 默認使用 firewalld 防火墻,沒有安裝iptables, 若想使用iptables防火墻。必須先關閉firewalld防火墻,再安裝iptables
systemctl stop firewalld. service #關閉firewalld防火墻
systemctl disable firewalld. service #取消firewalld防火墻開機自啟動
yum -y install iptables iptables-services #安裝iptables和iptables-services
systemctl start iptables.service #啟動iptables-services
systemctl enable iptables.service ??????????????#設置iptables開機啟動
2.2 iptables 命令
命令格式:
iptables ?[-t 表名] ?管理選項 ?[鏈名] [匹配條件] [-j 控制類型]
表名、鏈名用來指定iptables 命令所操作的表和鏈,未指定表名時將默認使用 filter 表
管理選項:表示iptables規則的操作方式,如插入、增加、刪除、查看等
匹配條件:用來指定要處理的數據包的特征,不符合指定條件的數據包將不會處理
控制類型指的是數據包的處理方式,如允許、拒絕、丟棄等
注意事項 :
?不指定表名時,默認指filter表 ?不指定鏈名時,默認指表內的所有鏈 ?除非設置鏈的默認策略,否則必須指定匹配條件 ?選項、鏈名、控制類型使用大寫字母,其余均為小寫 ?
iptables 語法總結 ?
2.3 常見控制類型
控制類型作用ACCEPT允許數據包通過DROP直接丟棄數據包,不給出任何回應消息REJECT拒絕數據包通過,會給數據發送端一個響應信息LOG在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則SNAT修改數據包的源地址DNAT修改數據包的目的地址MASQUERADE偽裝成—個非固定公網IP地址
注: 1.防火墻規則的 " 匹配即停止 " 對于 LOG 操作來說是一個特例,因為LOG只是一種輔助動作,并沒 有真正處理數據包
2.需要大寫
2.4 管理選項
管理選項用法示例-A在指定鏈末尾追加一條iptables -A INPUT(操作)-l在指定鏈中插入一條新的,未指定序號默認作為第一條iptables -l INPUT(操作)-p指定默認規則iptables -P OUTPUT ACCEPT(操作)-D刪除iptables -t nat -D INPUT(操作)-R修改、替換某一條規則iptables -t nat -R INPUT(操作)-L查看iptables -t nat -L(查看)-n所有字段以數字形式顯示(比如任意ip地址是0.0.0.0而不是anywhere,比如顯示協議端口號而不 是服務名)iptables -L -n,iptables -nL,iptables -vnL(查看)-v查看時顯示更詳細信息,常跟-L一起使用(查看)–line-number規則帶編號 iptables -t nat -L -n --line-number / iptables -t nat -I --line-number-F清除鏈中所有規則iptables -F(操作)-X清空自定義鏈的規則,不影響其他鏈iptables -x-Z清空鏈的計數器(匹配到的數據包的大小和總和) iptables -Z-S查看鏈的所有規則或者某個鏈的規則/某個具體規則后面跟編號
2.5 添加新的規則
添加新的防火墻規則時,使用管理選項 “ -A ”、“ -I ” ,前者用來追加規則,后者用來插入規則。
#示例,若要在 filter 表 INPUT 鏈的末尾添加一條防火墻規則,可以執行以下操作(其中 “-p 協議名”作為匹配條件)。
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.6 查看規則列表
查看已有的防火墻規則時,使用管理選項 “ -L ” ,結合 “ --line-numbers ” 選項還可顯示各條規則在鏈內的順序號。例如,若要查看 filter 表 INPUT 鏈中的所有規則,并顯示規則序號, 可以執行以下操作
iptables [-t表名] -n -L [鏈名] |[-- line-numbers]
或
iptables - [vn]L
#注意:不可以合寫為-Ln
2.7 刪除、清空規則
刪除一條防火墻規則時,使用管理選項"-D"。例如,若要刪除filter表INPUT鏈中的第五條規則,可以執行以下操作
iptables [-t 表名] -F [鏈名]
iptables -D INPUT 5
iptables -L INPUT --line-numbers
iptables -t filter -D INPUT -P icmp - j REJECT
清空指定鏈或表中的所有防火墻規則,使用管理選項"-F”。例如,若要清空filter表INPUT鏈中的所有規則,可以執行以下操作
iptables -F ?INPUT
iptables -nL INPUT
使用管理選項"-F”時,允許省略鏈名而清空指定表所有鏈的規則。例如,執行以下操作分別用來清空 filter表、nat表、mangle表
iptables -F
iptables -t nat -F
iptables -t mangle -F
注意:
?若規則列表中有多條相同的規則時,按內容匹配只刪除的序號最小的一條 ?按號碼匹配刪除時,確保規則號碼小于等于已有規則數,否則報錯 ?按內容匹配刪數時,確保規則存在,否則報錯 ?
2.8 設置默認策略
iptables 的各條鏈中,默認策略是規則匹配的最后一個環節——當找不到任何一條能夠匹配數據包的規則時,則執行默認策略。默認策略的控制類型為 ACCEPT(允許)、DROP(丟棄)兩種。例如,執行以下操作可以將 filter 表中 FORWARD 鏈的默認策略設為丟棄, OUTPUT 鏈的默認策略設為允許
iptables [ -t 表名 ] -P ?< 鏈名 > ??< 控制類型 >
iptables -P INPUT DROP ?????輸入后沒顯示 ?清除所有規則之后生效,因為下面只剩下DROP ?添加遠程端口22
iptables -P FORWARD DROP
#一般在生產環境中設置網絡型防火墻、主機型防火墻時都要設置默認規則為DROP,并設置白名單
iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT
三、規則匹配條件
3.1 通用匹配
在編寫防火墻規則時,匹配條件的設置起著決定性的作用。只有清晰、準確地設置好匹配條件,防火墻才知道要對符合什么條件的數據包進行處理,避免"誤殺"。對于同一條防火墻規則,可以指定多個匹配條件,表示這些條件必須都滿足規則才會生效。根據數據包的各種特征,結合iptables的模塊結構,匹配條件的設置包括三大類:通用匹配 、隱含匹配、顯式匹配
通用匹配 通用匹配也稱為常規匹配,這種匹配方式可以獨立使用,不依賴于其他條件或擴展模塊。 常見的通用匹配包括:協議匹配、地址匹配、網絡接口匹配
協議匹配: 編寫iptables規則時使用"-p 協議名"的形式指定,用來檢查數據包所使用的網絡協議(–protocol),如tcp、udp、icmp和 all(針對所有IP數據包)等,可用的協議類型存放于Linux系統的/etc/procotols文件中。例如,若要丟棄通過icmp 協議訪問防火墻本機的數據包,允許轉發經過防火墻的除 icmp協議之外的數據包,可以執行以下操作
通用匹配:可直接使用,不依賴于其他條件或擴展,包括網絡協議、IP地址、網絡接口等條件
協議匹配:-p協議名
地址匹配:-s源地址、-d目的地址 ?????????#可以是IP、網段、域名、空(任何地址)
接口匹配:-i入站網卡、-o出站網卡
1234567
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
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT ???###感嘆號”!"表示取反
3.2 隱含匹配
要求以特定的協議匹配作為前提,包括端口、TCP標記、ICMP類型等條件。端口匹配:–sport源端口、–dport目的端口
#可以是個別端口、端口范圍
--sport 1000 ?????匹配源端口是1000的數據包
--sport 1000:3000 匹配源端口是1000-3000的數據包
--sport :3000 ????匹配源端口是3000及以下的數據包
--sport 1000: ????匹配源端口是1000及以上的數據包
注意:--sport和--dport必須配合-p <協議類型> 使用
1234567891011
案列: iptables -A INPUT -p tcp --sport 1000:3000 -jREJECT 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 iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT iptables -A INPUT -s 192.168.4.0/24 -p tcp --dport 53 -j ACCEPT
TCP標記匹配:–tcp-flags TCP標記
?iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
?###丟棄SYN請求包,放行其他包
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 -j ?DROP
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT ???????????????????????????????????????????????????????????????????????#當本機ping不通其它主機時提示目標不可達
#此時其它主機需要配置關于icmp協議的控制類型為REJECT
iptables -A INPUT -p icmp -j ?REJECT
4.3 顯示匹配
要求以"-m擴展模塊”的形式明確指出類型,包括多端口、MAc地址、IP范圍、數據包狀態等條件
多端口匹配:
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
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
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數據包
MAC地址匹配:
-m mac -- -mac- source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
#禁止來自某MAC地址的數據包通過本機轉發
4.4 狀態匹配
-m ???state ??--state連接狀態
常見的連接狀態:
NEW:與任何連接無關的,還沒開始連接。
ESTABLISHED :響應請求或者已建立連接的,連接態。
RELATED:與已有連接有相關性的( 如 FTP 主被動模式的數據連接 ),衍生態,一般與ESTABLISHEBD配合使用。
INVALID:不能被識別屬于哪個連接或沒有任何狀態。
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.規則表的作用:容納各種規則鏈; 表的劃分依據:防火墻規則的作用相似
2.規則鏈的作用:容納各種防火墻規則;規則的作用:對數據包進行過濾或處理 ;鏈的分類依據:處理數據包的不同時機
3.總結:表里有鏈,鏈里有規則
總結
以上是生活随笔為你收集整理的iptables 防火墙的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 之免交互操作
- 下一篇: LINUX 三剑客之awk