iptables(一)基礎概念、filter表常用語法規則


iptables簡介

netfilter/iptables(簡稱為iptables)組成Linux平台下的包過濾防火牆,與大多數的Linux軟件一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。
 

iptables基礎

規則(rules)

其實就是網絡管理員預定義的條件,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是添加、修改和刪除這些規則。
 

iptables和netfilter的關系:

這是第一個要說的地方,Iptables和netfilter的關系是一個很容易讓人搞不清的問題。很多的知道iptables卻不知道 netfilter。其實iptables只是Linux防火牆的管理工具而已,位於/usr/sbin/iptables。真正實現防火牆功能的是 netfilter,它是Linux內核中實現包過濾的內部結構。

數據包在netfilter的轉發過程

  1. 當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。
  2. 如果數據包就是進入本機的,它就會沿着圖向下移動,到達INPUT鏈。數據包到了INPUT鏈后,任何進程都可以收到它。本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然后到達POSTROUTING鏈輸出。
  3. 如果數據包是要轉發出去的,且內核允許轉發(sysctl net.ipv4.ip_forward,sysctl -w net.ipv4.ip_forward=1),數據包就會如圖所示向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出

 

iptables的規則表和鏈:

表(tables):
提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。
鏈(chains):
是數據包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。這里的規則是配置在表中的,哪個鏈有哪些表在netfilter中已經約定好了。

規則表:

1.filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數據包 內核模塊:iptable_filter
2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用於網絡地址轉換(IP、端口) 內核模塊:iptable_nat
3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數據包的服務類型、TTL、並且可以配置路由實現QOS內核模塊:iptable_mangle
4.Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數據包是否被狀態跟蹤機制處理 內核模塊:iptable_raw
 

規則鏈:

1.INPUT——目的為本機的數據包應用此規則鏈中的策略
2.OUTPUT——本機發出的數據包應用此規則鏈中的策略
3.FORWARD——轉發數據包時應用此規則鏈中的策略
4.PREROUTING——對數據包作路由選擇前應用此鏈的規則,本機收到的所有包都會應用此鏈規則
5.POSTROUTING——對數據包作路由選擇后應用此鏈中的規則,所有出本機的包都會應用此鏈規則

規則表之間的優先順序:

Raw——mangle——nat——filte

 

管理和設置iptables規則

實際工作中最常用的就是使用filter表對數據包進行各種過濾,這里先詳細介紹filter表的常用命令。各種常用參數如下圖

 

iptables的基本語法格式

iptables [-t 表名] 命令選項   鏈名  條件匹配   -j 目標動作或跳轉

說明:表名、鏈名用於指定 iptables命令所操作的表和鏈,命令選項用於指定管理iptables規則的方式(比如:插入、增加、刪除、查看等;條件匹配用於指定對符合什么樣 條件的數據包進行處理;目標動作或跳轉用於指定數據包的處理方式(比如允許通過、拒絕、丟棄、跳轉(Jump)給其它鏈處理。
如果沒指定表名默認會將規則寫入filter表,所以filter的表名是可以省略的。

iptables命令選項詳解

-A 在指定鏈的末尾添加(append)一條新的規則
-D 刪除(delete)指定鏈中的某一條規則,可以按規則序號和內容刪除
-I 在指定鏈中插入(insert)一條新的規則,默認在第一行添加
-R 修改、替換(replace)指定鏈中的某一條規則,可以按規則序號和內容替換
-L 列出(list)指定鏈中所有的規則進行查看
-E 重命名用戶定義的鏈,不改變鏈本身
-F 清空(flush)
-N 新建(new-chain)一條用戶自己定義的規則鏈
-X 刪除指定表中用戶自定義的規則鏈(delete-chain)
-P 設置指定鏈的默認策略(policy)
-Z 將所有表的所有鏈的字節和數據包計數器清零
-n 使用數字形式(numeric)顯示輸出結果
-v 查看規則表詳細信息(verbose)的信息
-V 查看版本(version)
-h 獲取幫助(help)
 

iptables命令目標動作參數詳解

ACCEPT 允許數據包通過
DROP 直接丟棄數據包,不給任何回應信息
REJECT 拒絕數據包通過,必要時會給數據發送端一個響應的信息。
LOG在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則
 

常用語法解析

1.定義默認策略

當數據包不符合鏈中任一條規則時,iptables將根據該鏈預先定義的默認策略來處理數據包,默認策略的定義格式如下。
iptables [-t表名] <-P> <鏈名> <動作> ?參數說明如下。
[-t表名]:指默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表。
<-P>:定義默認策略。
<鏈名>:指默認策略將應用於哪個鏈,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
<動作>:處理數據包的動作,可以使用ACCEPT(接受數據包)和DROP(丟棄數據包)。

2.鏈的常用操作

-F: FLASH,清空規則鏈的(注意每個鏈的管理權限)
iptables -t nat -F PREROUTING   清空nat表在PREROUTING鏈上的規則
iptables -t nat -F 清空nat表的所有鏈
-N:NEW 支持用戶新建一個鏈
iptables -N inbound_tcp_web 表示附在tcp表上用於檢查web的。
-X: 用於刪除用戶自定義的空鏈
使用方法跟-N相同,但是在刪除之前必須要將里面的鏈給清空昂了
-E:用來Rename chain主要是用來給用戶自定義的鏈重命名
-E oldname newname
-Z:清空指定鏈、表中規則的計數器的(有兩個計數器,被匹配到多少個數據包,多少個字節)
iptables -Z :清空

3.查看iptables規則

查看iptables規則的命令格式為:
iptables [-t表名] <-L> [鏈名]
參數說明如下。
[-t表名]:指查看哪個表的規則列表,表名用可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認查看filter表的規則列表。
<-L>:查看指定表和指定鏈的規則列表。
[鏈名]:指查看指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING,如果不指明哪個鏈,則將查看某個表中所有鏈的規則列表。

 附加子命令
 -n:以數字的方式顯示ip,它會將ip直接顯示出來,如果不加-n,則會將ip反向解析成主機名。
 -v:顯示詳細信息
 -vv
 -vvv :越多越詳細
 -x:在計數器上顯示精確值,不做單位換算
 --line-numbers : 顯示規則的行號
 -t nat:顯示所有的關卡的信息

4.增加、插入、刪除和替換規則

相關規則定義的格式為:
iptables [-t表名] <-A | I | D | R> 鏈名 [規則編號] [-i | o 網卡名稱] [-p 協議類型] [-s 源IP地址 | 源子網] [--sport 源端口號] [-d目標IP地址 | 目標子網] [--dport目標端口號] <-j動作>
參數說明如下。
[-t表名]:定義默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表。
-A:新增加一條規則,該規則將會增加到規則列表的最后一行,該參數不能使用規則編號。
-I:插入一條規則,原本該位置上的規則將會往后順序移動,如果沒有指定規則編號,則在第一條規則前插入。
-D:從規則列表中刪除一條規則,可以輸入完整規則,或直接指定規則編號加以刪除。
-R:替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號。
<鏈名>:指定查看指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
[規則編號]:規則編號用於插入、刪除和替換規則時用,編號是按照規則列表的順序排列,規則列表中第一條規則的編號為1。
[-i | o 網卡名稱]:i是指定數據包從哪塊網卡進入,o是指定數據包從哪塊網卡輸出。網卡名稱可以使用ppp0、eth0和eth1等。
[-p 協議類型]:可以指定規則應用的協議,包含TCP、UDP和ICMP等。
[-s 源IP地址 | 源子網]:源主機的IP地址或子網地址。
[--sport 源端口號]:數據包的IP的源端口號。
[-d目標IP地址 | 目標子網]:目標主機的IP地址或子網地址。
[--dport目標端口號]:數據包的IP的目標端口號。
<-j動作>:處理數據包的動作,各個動作的詳細說明可以參考前面的說明。

擴展匹配

隱含擴展:對協議的擴展
-p tcp :TCP協議的擴展。一般有三種擴展
--dport XX-XX:指定目標端口,不能指定多個非連續端口,只能指定單個端口,比如
--dport 21  或者 --dport 21-23 (此時表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的標志位(SYN,ACK,FIN,PSH,RST,URG)
    對於它,一般要跟兩個參數:
1.檢查的標志位
2.必須為1的標志位
--tcpflags syn,ack,fin,rst syn   =    --syn
表示檢查這4個位,這4個位中syn必須為1,其他的必須為0。所以這個意思就是用於檢測三次握手的第一次包的。對於這種專門匹配第一包的SYN為1的包,還有一種簡寫方式,叫做--syn
-p udp:UDP協議的擴展
        --dport
        --sport
-p icmp:icmp數據報文的擴展
        --icmp-type:
echo-request(請求回顯),一般用8 來表示
所以 --icmp-type 8 匹配請求回顯數據包
echo-reply (響應的數據包)一般用0來表示
 
顯式擴展匹配(-m)
     擴展各種模塊
      -m multiport:表示啟用多端口擴展
      之后我們就可以啟用比如 --dports 21,23,80

 

詳解-j ACTION

 常用的ACTION:
 DROP:悄悄丟棄,一般我們多用DROP來隱藏我們的身份,以及隱藏我們的鏈表
 REJECT:明示拒絕
 ACCEPT:接受
custom_chain:轉向一個自定義的鏈
 DNAT
 SNAT
 MASQUERADE:源地址偽裝,只NAT表中使用
 REDIRECT:重定向:主要用於實現端口重定向
 MARK:打防火牆標記的
 RETURN:返回,在自定義鏈執行完畢后使用返回,來返回原規則鏈。
 

狀態檢測

是一種顯式擴展,用於檢測會話之間的連接關系的,有了檢測我們可以實現會話間功能的擴展
什么是狀態檢測?對於整個TCP協議來講,它是一個有連接的協議,三次握手中,第一次握手,我們就叫NEW連接,而從第二次握手以后的,ack都為1,這是正常的數據傳輸,和tcp的第二次第三次握手,叫做已建立的連接(ESTABLISHED),還有一種狀態,比較詭異的,比如:SYN=1 ACK=1 RST=1,對於這種我們無法識別的,我們都稱之為INVALID無法識別的。還有第四種,FTP這種古老的擁有的特征,每個端口都是獨立的,21號和20號端口都是一去一回,他們之間是有關系的,這種關系我們稱之為RELATED。
所以我們的狀態一共有四種:
        NEW
        ESTABLISHED
        RELATED
        INVALID
 

5.清除規則和計數器

在新建規則時,往往需要清除原有的、舊的規則,以免它們影 ?響新設定的規則。如果規則比較多,一條條刪除就會十分麻煩, ?這時可以使用iptables提供的清除規則參數達到快速刪除所有的規 ?則的目的。
定義參數的格式為:
iptables [-t表名] <-F | Z>
參數說明如下。
[-t表名]:指定默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表。
-F:刪除指定表中所有規則。
-Z:將指定表中的數據包計數器和流量計數器歸零。

 

 

 

 

 

#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM