iptables簡介
iptables 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利于在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。
iptables基礎
規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息 包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規 則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的 主要工作就是添加、修改和刪除這些規則。
iptables和netfilter:
雖然 netfilter/iptables IP 信息包過濾系統被稱為單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。
-
netfilter:netfilter組件也稱為內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。
-
iptables:iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。
iptables的規則表和鏈
表(tables):提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用于實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。
鏈(chains):數據包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一 條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據 該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的默認策略來處理數據包。
規則鏈:
-
PREROUTING(路由前):對數據包作路由選擇前應用此鏈中的規則,所有的數據包進來的時侯都先由這個鏈處理。
-
INPUT(輸入隊列):進來的數據包應用此規則鏈中的策略。
-
FORWARD(輸出隊列):轉發數據包時應用此規則鏈中的策略。
-
OUTPUT(轉發隊列):外出的數據包應用此規則鏈中的策略。
-
POSTROUTING(路由后):對數據包作路由選擇后應用此鏈中的規則,所有的數據包出來的時侯都先由這個鏈處理。
規則表:
-
Filter表:過濾數據包, 對應三個鏈INPUT、FORWARD、OUTPUT。
-
Nat表:用于網絡地址轉換(IP、端口),對應三個鏈PREROUTING、POSTROUTING、OUTPUT。
-
Mangle表:修改數據包的服務類型、TTL、并且可以配置路由實現QOS,對應五個鏈PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。
-
Raw表:決定數據包是否被狀態跟蹤機制處理,對應兩個鏈OUTPUT、PREROUTING。
同一鏈上的不同的表的規則的應用優先級(高–>低): raw——mangle——nat——filter
iptables的報文流向
1、當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。
2、如果數據包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。數據包到了INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然后到達POSTROUTING鏈輸出。
3、如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出。
管理和設置iptables規則
iptables的基本語法格式:
iptables [-t table] SUBCOMMAND chain [matches...] [-j target] iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
命令選項:
鏈管理: -N:new,新增一條自定義鏈 -X:delete,刪除自定義的空鏈 -P:policy,設置鏈的默認策略 ACCEPT:允許數據包通過 DORP:直接丟棄數據包,不給任何回應信息 REJECT:拒絕數據包通過,必要時會給數據發送端一個響應的信息 -E:renname,重命名自定義的未被引用(引用計數為0)的鏈 規則管理: -A:append,追加,默認為最后一個 -I:insert,插入,默認為第一個 -D:delete,刪除,指定鏈中的某一條規則,可以按規則序號和內容刪除 -R:replace,替換,指定鏈中的某一條規則,可以按規則序號和內容替換 -F:flush,清空 -Z:zero,置0,將所有表的所有鏈的字節和數據包計數器清零 -S:selected,以iptables-save命令的格式顯示鏈上的規則 查看: -L:list,列出規則 -n:numeric,以數字格式顯示地址和端口 -v:verbose,詳細信息,-vv,-vvv -x:exactly,顯示計數器的精確值而非單位換算后的結果 --line-numbers:顯示鏈上的規則編號 組合:-nvL
匹配條件:
基本匹配:netfilter自帶的匹配機制 [!] -s:指定作為源地址匹配,這里不能指定主機名稱,必須是IP IP | IP/MASK | 0.0.0.0/0.0.0.0 [!] -d:目標地址匹配 [!] -i:限制報文流入的接口,只能用于PRETOUTING,INPUT及FORWD [!] -o:限制報文流出的接口,只能用于OUTPUT,FORWARD及POSTROUTING 注:加"!"表示取反 擴展匹配:需要加載擴展模塊,經由擴展模塊引入的匹配機制,-m matchname 隱式擴展:可以不用使用-m選項專門加載相應模塊,前提是要使用-p選項指明可匹配何種協議 [!] -p:限制協議,tcp,udp,icmp,icmpv6,esp,ah,sctp,mh or "all" tcp:隱含指明了"-m tcp",有專用選項: [!] --sport port[:port]:匹配報文中的tcp首部的源端口,可以是端口范圍 [!] --dport port[:port]:匹配報文中的tcp首部的目標端口,可以是端口范圍 [!] --tcp-flags mask comp:檢查報文中的mask指明的tcp標志位,而這些標志位comp中必須為1 udp:隱含指明的"-m udp",有專用選項: [!] --sport port[:port]:匹配報文中的udp首部的源端口,可以是端口范圍 [!] --dport port[:port]:匹配報文中的udp首部的目標端口,可以是端口范圍 icmp:隱含指明了"-m icmp",有專用選項: [!] --icmp-type {type[/code]|typename} type/code: 0/0:echo reply 8/0:echo request 顯式擴展:必須由-m選項專門加載相應模塊 multiport:多端口匹配,以離散方式定義多端口匹配,最多可以指定15個端口 [!] --sports port[,port|,port:port]... [!] --dports port[,port|,port:port]... [!] --ports port[,port|,port:port]... 示例: iptables -I INPUT -s 0/0 -d 10.1.8.93 -p tcp -m multiport --dport 22,80 -j ACCEPT iprange:指明一段連續的ip地址范圍作為源地址或目標地址匹配 [!] --src-range from[-to]:源地址范圍 [!] --dst-range from[-to]:目標地址范圍 string:對報文中的應用層數據做字符串匹配檢測 --algo {bm|kmp}:(bm = Boyer-Moore, kmp = Knuth-Pratt-Morris) [!] --string pattern:給定要檢查的字符串模式 [!] --hex-string pattern:給定要檢查的字符串模式 示例: iptables -I OUTPUT -d 0/0 -s 10.1.8.93 -p tcp -m string -algo bm --string "old" -j REJECT time:根據收到的報文的時間/日期與指定的時間/日期范圍進行匹配 --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]:起始日期時間 --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結束日期時間 --timestart hh:mm[:ss]:起始時間 --timestop hh:mm[:ss]:結束時間 [!] --monthdays day[,day...]:匹配一個月中的哪些天 [!] --weekdays day[,day...]:匹配一周的哪些天 connlimit:根據客戶端主機做并發連接數限制,及每客戶端最多可同時發起的連接數量 --connlimit-upto n:連接數量小于等于n則匹配 --connlimit-above n:連接數量大于n則匹配 示例: iptables -A INPUT -s 0/0 -d 172.18.100.6 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT limit:基于令牌桶算法對報文的速率做匹配 -limit rate[/second|/minute|/hour|/day] --limit-burst number 示例: ptables -R INPUT 3 -d 172.18.100.6 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT
目標動作:
ACCERT DORP REJECT RETURN:返回調用的鏈 REDIRECT:端口重定向 LOG:日志 MARK:防火墻標記 DNAT:目標地址轉換 SNAT:源地址轉換 MASQERADE:地址偽裝
規則的有效期限
iptables命令添加的規則,手動刪除之前,其生效期限為kernel的生命周期。
保存規則:
CentOS 6:
# service iptables save
# iptables-save > /etc/sysconfig/iptables
# iptables-save > /PATH/TO/SOME_RULL_FILE
CentOS 7:
# iptables -S > /PATH/TO/SOME_RULL_FILE
# iptables-save > /PATH/TO/SOME_RULL_FILE
重載預存的規則:
# iptables-restore < /PATH/TO/SOME_RULL_FILE
CentOS 6:
service iptables restart
會自動從/etc/sysconfig/iptables文件中重載規則
自動生效規則文件中的規則:
1、把iptables命令放在腳本文件中,讓腳本文件開機自動運行
/etc/rc.d/rc.local
/usr/bin/iptables.sh
2、用規則文件保存規則,開機自動重載命令
/etc/rc.d/rc.local
iptables-restore < /PATH/TO/SOME_RULL_FILE
原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/68774
很詳細的iptables介紹,這部分很多同學缺少這樣的總結,在工作實際中遇到問題就比較難排查,雖說實際工作通常關閉了,但是掌握這部分知識還是非常重要的,很贊。