iptables詳解

iptables_1 linux 2.4_2.6
原文http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html#RCFIREWALLTXT

iptables 3Table表   filter nat mangle 可自定義表;默認的表是filter
   表包含Chain鏈也能包含用戶定義的鏈。
     filter表設計用來過濾,包含INPUT(主機目的包) OUTPUT(外出包) FORWARD(轉發包)鏈。DROP、LOG、ACCEPT和REJECT等操作
     nat表僅用於NAT,只有流的第一個包會被這個鏈匹配,其後的包會自動被做相同的處理。包含PREROUTING POSTROUTING OUTPUT鏈。nat表包含三種操作DNAT SNAT MASQUERADE
      DNAT操作主要用在這樣一種情況,你有一個合法的IP地址,要把對防火牆的訪問重定向到其他的機子上(比如DMZ)。也就是說,我們改變的是目的地址,以使包能重路由到某臺主機。 
      SNAT改變包的源地址,這在極大程度上可以隱藏你的本地網絡或者DMZ等。一個很好的例子是我們知道防火牆的外部地址,但必須用這個地址替換本地網絡地址。有了這個操作,防火牆就能自動地對包做SNAT和De-SNAT(就是反向的SNAT),以使LAN能連接到Internet。如果使用類似 192.168.0.0/24這樣的地址,是不會從Internet得到任何迴應的。因爲IANA定義這些網絡(還有其他的)爲私有的,只能用於LAN內部。
      MASQUERADE的作用和SNAT完全一樣,只是計算機的負荷稍微多一點。因爲對每個匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。當然,這也有好處,就是我們可以使用通過PPP、 PPPOE、SLIP等撥號得到的地址,這些地址可是由ISP的DHCP隨機分配的。

    mangle表包含PREROUTING,POSTROUTING, OUTPUT,INPUT FORWARD鏈。mangle表包含三種操作TOS TTL MARK,與路由關。
        TOS操作用來設置或改變數據包的服務類型域。TTL操作用來改變數據包的生存時間域。MARK用來給包設置特殊的標記。

         鏈  是一個規則列表
iptalbes命令是用來設置、維護和檢查Linux內核的IP包過濾規則的。把Netfilter內核空間中的整個規則集都提取出來,然後再插入或附加,或做其他的改動,最後,再把新的規則集從它的內存空間插入到內核空間中。
iptables-save  iptables-restore命令一次保存、一次提交

數據包的4種狀態:NEW,ESTABLISHED,RELATED 和INVALID
  NEW 連接的第一個包。ESTABLISHED 有迴應包,有雙向傳輸。

  RELATED ESTABLISHED連接再產生一個主連接之外的連接。
  INVALID說明數據包不能被識別屬於哪個連接或沒有任何狀態。

 



以本地爲目標的包  必經INPUT
Step(步驟) Table(表) Chain(鏈) Comment(註釋)
    在線路上傳輸(比如,Internet)
    進入接口 (比如, eth0)
3 mangle表 PREROUTING鏈 這個鏈用來mangle數據包,比如改變TOS等
4 nat表    PREROUTING鏈 這個鏈主要用來做DNAT。不要在這個鏈做過慮操作,因爲某些情況下包會溜過去。
    路由判斷,比如,包是發往本地的,還是要轉發的。
6 mangle表 INPUT鏈 在路由之後,被送往本地程序之前,mangle數據包。
7 filter表 INPUT鏈所有以本地爲目的的包都要經過這個鏈,不管它們從哪兒來,對這些包的過濾條件就設在這裏。 
    到達本地程序了(比如,服務程序或客戶程序)

以本地爲源的包  必經OUTPUT
Step(步驟) Table(表) Chain(鏈) Comment(註釋)
    本地程序(比如,服務程序或客戶程序)
    路由判斷,要使用源地址,外出接口,還有其他一些信息。 
3 mangle表 OUTPUT鏈 在這兒可以mangle包。建議不要在這兒做過濾,可能有副作用哦。
4 nat表    OUTPUT鏈 這個鏈對從防火牆本身發出的包進行DNAT操作。
5 filter表 OUTPUT鏈 對本地發出的包過濾。
6 mangle表 POSTROUTING鏈這條鏈主要在包DNAT之後(譯者注:作者把這一次DNAT稱作實際的路由,雖然在前面有一次路由。對於本地的包,一旦它被生成,就必須經過路由代碼的處理,但這個包具體到哪兒去,要由NAT代碼處理之後才能確定。所以把這稱作實際的路由。),離開本地之前,對包 mangle。有兩種包會經過這裏,防火牆所在機子本身產生的包,還有被轉發的包。
7 nat表    POSTROUTING鏈在這裏做SNAT。但不要在這裏做過濾,因爲有副作用,而且有些包是會溜過去的,即使你用了DROP策略。
    離開接口(比如: eth0)
    在線路上傳輸(比如,Internet)

被轉發的包   必經FORWARD
Step(步驟) Table(表) Chain(鏈) Comment(註釋)
    在線路上傳輸(比如,Internet)
    進入接口(比如, eth0)
3 mangle表 PREROUTING鏈 mangle數據包,,比如改變TOS等。
4 nat表    PREROUTING鏈 這個鏈主要用來做DNAT。不要在這個鏈做過慮操作,因爲某些情況下包會溜過去。稍後會做SNAT。
    路由判斷,比如,包是發往本地的,還是要轉發的。
6 mangle表 FORWARD鏈包繼續被髮送至mangle表的FORWARD鏈,這是非常特殊的情況纔會用到的。在這裏,包被mangle(還記得mangle的意思嗎)。這次mangle發生在最初的路由判斷之後,在最後一次更改包的目的之前(譯者注:就是下面的FORWARD鏈所做的,因其過濾功能,可能會改變一些包的目的地,如丟棄包)。
7 filter表 FORWARD鏈包繼續被髮送至這條FORWARD鏈。只有需要轉發的包纔會走到這裏,並且針對這些包的所有過濾也在這裏進行。注意,所有要轉發的包都要經過這裏,不管是外網到內網的還是內網到外網的。在你自己書寫規則時,要考慮到這一點。 
8 mangle表 POSTROUTING鏈這個鏈也是針對一些特殊類型的包(譯者注:參考第6步,我們可以發現,在轉發包時,mangle表的兩個鏈都用在特殊的應用上)。這一步mangle是在所有更改包的目的地址的操作完成之後做的,但這時包還在本地上。
9 nat表    POSTROUTING鏈這個鏈就是用來做SNAT的,當然也包括Masquerade(僞裝)。但不要在這兒做過濾,因爲某些包即使不滿足條件也會通過。
10     離開接口(比如: eth0)
11     又在線路上傳輸了(比如,LAN) 

 

原文http://hi.baidu.com/9812658/blog/item/7ff68d2cad4d155c4fc226cf.html

一、iptables命令格式(較爲複雜)
iptables    [-t   table]    command    [chain]    [rules]    [-j   target]
(1)table ------- 指定表名(raw表、mangle表、nat表、filter表)
(2)command ------- 對鏈的操作命令(-A:追加規則(最下面進行追加規則)、-I:插入(一般在相應的哪條規則前後插入))
(3)chain ------- 鏈名(prerouting鏈、forward鏈、input鏈、output鏈、postrouting鏈)
(4)rules ------- 規則
(5)target ------- 動作如何進行
 




1、表選項table

 表選項用於指定命令應用於哪個iptables內置表,iptables內置包括:filter表、nat表、mangle表和raw表
使用的參數爲: -t  表名,如果不使用-t參數,那麼默認是使用filter表
 

2、命令選項command
 

命令

說明

-P或--policy + <鏈名>

定義默認策略

-L或--list + <鏈名>

查看iptables規則列表

-A或--append + <鏈名> 

在規則列表的最後增加1條規則

-I或--insert + <鏈名>

在指定的位置插入1條規則

-D或--delete + <鏈名> + number
 

從規則列表中刪除1條規則

-R或--replace + <鏈名> + number
 

替換規則列表中的某條規則

-F或--flush + <鏈名>
-X或--delete-chain + <用戶自定義的鏈名>

刪除表中所有規則(注意:無法清空默認規則)
刪除用戶自定義的鏈(前提:這些用戶自定義的鏈上必須沒有任何規則,所以刪除用戶自定義鏈時,必須先刪除該用戶定義的鏈上的所有規則),如果不跟用戶自定義的鏈名,那麼將刪除所有用戶自定義的鏈)
以下幾個例子
(1)iptables  -t  filter  -F,清除filter表中的所有規則(包括系統內置的鏈上的所有規則,以及用戶自定義的鏈上的所有規則)
(2)iptables  -t  filter  -F  INPUT,清除filter表中的INPUT鏈上的所有規則
(3)iptables -t  filter  -X,刪除filter表中所有用戶自定義鏈(系統內置的鏈:INPUT、OUTPUT、FOWRARD..無法清除)
(4)iptables -t  filter  -X  mydefine,刪除filter表中自定義的鏈mydefine

-Z或--zero + <鏈名>
-N或 --new-chain + <用戶自定義的鏈名>

將表中數據包計數器和流量計數器歸零
新建一個用戶自定義的鏈,且鏈名必須跟內置那些鏈名不同
例如:iptables  -t  filter  -N  "CentOS-TCP" ,在filter這個表中新增一個名爲"CentOS-TCP"的鏈,該鏈用於處理TCP數據包的;以後我們把相應的規則寫到CentOS-TCP鏈裏
例如:iptables  -t  filter  -N  "CentOS-UDP" ,在filter這個表中新增一個名爲"CentOS-UDP"的鏈,該鏈用於處理UDP數據包的;以後我們把相應的規則寫到CentOS- UDP鏈裏
最後,運用時,我們可以把它們運用到內置那些表的INPUT鏈或者其它內置的鏈裏,如
iptables  -t  filter  -A  INPUT  -p  tcp  -j  CentOS-TCP
iptables  -t  filter  -A  INPUT  -p  udp  -j  CentOS-UDP

 

 

3、匹配選項(rules)

匹配

說明

-i或--in-interface + <網絡接口名>

指定數據包從哪個網絡接口進入,如ppp0、eth0和eth1等
注意:該參數只能用於INPUT,  FORWARD  and PREROUTING這三個鏈
 

-o或--out-interface + <網絡接口名>

指定數據包從哪塊網絡接口輸出,如ppp0、eth0和eth1等
注意:該參數只能用於OUTPUT,  POSTROUTING這兩個鏈

-p或---prot + < 協議類型>

指定數據包匹配的協議,如TCP、UDP和ICMP等

-s或--source + <源地址或子網>
-m  state  --state + 狀態

-m  mac   --mac-source + MAC地址

-m  limit   --limit
-m  owner

 

指定數據包匹配的源地址
基於狀態的匹配(狀態可以是:NEW,ESTABLISHED,INVALID,RELATED中的一個或者它們的組合)
基於MAC地址的匹配(注意:該參數只能用於PREROUTING, FORWARD or INPUT這三個鏈)
基於封包數量的匹配
基於uid、gid的匹配(注意:該參數只對OUTPUT鏈有效)

--sport + <源端口號>

指定數據包匹配的源端口號,可以使用 "起始端口號:結束端口號" 的格式指定一個範圍的端口

-d或--destination + <目標地址或子網>

指定數據包匹配的目標地址

--dport + 目標端口號

指定數據包匹配的目標端口號,可以使用 "起始端口號:結束端口號" 的格式指定一個範圍的端口

 

4、動作選項(-j  target)

動作

說明

ACCEPT

接受數據包

DROP

丟棄數據包

REDIRECT

與DROP基本一樣,區別在於它除了阻塞包之外, 還向發送者返回錯誤信息

SNAT 

源地址轉換,即改變數據包的源地址
例如:將局域網的IP(10.0.0.1/24) ==> 廣域網的IP(222.101.98.54/24),且在NAT表的POSTROUTING鏈上進行該動作

DNAT

目標地址轉換,即改變數據包的目的地址
例如:將的廣域網IP(222.101.98.54/24) ==> 局域網的IP(10.0.0.1/24),且在NAT表的PREROUTING鏈上進行該動作

MASQUERADE + IP

僞裝,即是常說的NAT技術,MASQUERADE只能用於ADSL等撥號上網的IP僞裝,也就是主機的IP是由ISP分配動態的;如果主機的IP地址是靜態固定的,就要使用SNAT

LOG

日誌功能,將符合規則的數據包的相關信息記錄在日誌中,以便管理員的分析和排錯                      

 

 


二、iptables的語法

1.定義默認策略

1)作用:當數據包不符合鏈中任一條規則時,iptables將根據該鏈預先定義的默認策略來處理數據包

2)默認策略的定義格式: iptables   [-t  表名]   <-P>   <鏈名>   <動作>
參數說明如下:
(1)[-t   表名]
指默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表
(2)<-P>
定義默認策略
(3)<鏈名>
指默認策略將應用於哪個鏈,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING
(4)<動作>
處理數據包的動作,可以使用ACCEPT(接受數據包)和DROP(丟棄數據包) 

2.查看iptables規則

 

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

3.增加、插入、刪除、替換iptables規則

iptables  [-t表名]  <-A | I | D | R>  鏈名  [規則編號]  [-i | o 網卡名稱]  [-p 協議類型]  [-s 源IP地址 | 源子網]  [--sport 源端口號]  [-d目標IP地址 | 目標子網]  [--dport目標端口號]  <-j動作>

例如:
iptables -t  filter  -I   INPUT  3   -p  tcp  --dport   80  -j  ACCEPT(#在INPUT鏈第3條規則之前插入)
iptables -t  filter  -I   INPUT  -p  tcp  --dport  80  -j  ACCEPT (#在INPUT鏈規則的第1條規則之前插入)
iptables -t  filter  -R   INPUT  3 -p tcp   --dport  22  -j   ACCEPT

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

4、清除規則和計數器

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

 

三、NAT

1、什麼是NAT

2、NAT的類型

1) 靜態NAT(Static NAT,SNAT)(局域網的IP==>廣域網的IP)
靜態NAT設置起來最爲簡單和最容易實現的一種,內部網絡中的每個主機都被永久映射成外部網絡中的某個合法的地址

2)動態地址NAT(Pooled NAT,DNAT)(廣域網的IP==>局域網的IP)
(1)動態地址NAT是在外部網絡中定義了一系列的合法地址,採用動態分配的方法映射到內部網絡
(2)動態地址NAT只是轉換IP地址,它爲每一個內部的IP地址分配一個臨時的外部IP地址,主要應用於撥號,對於頻繁的遠程聯接也可以採用動態NAT

3)網絡地址端口轉換NAPT(Port-Level NAT)
NAPT是把內部地址映射到外部網絡的一個IP地址的不同端口上
最熟悉的一種轉換方式。NAPT普遍應用於接入設備中,它可以將中小型的網絡隱藏在一個合法的IP地址後面。NAPT與動態地址NAT不同,它將內部連接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的TCP端口號


三、規則走向        規則的應用順序:從上到下的,最後纔是默認規則

四、INPUT與OUTPUT區別

對於input而言
--dport -d都是指你自己的端口和地址
--sport和-s指的是發起連接者的端口和地址
對於output而言
--sport -s都是指你自己的端口和地址
--dport -d指的dest地址

 

原文http://www.linux.gov.cn/netweb/iptables.htm

iptables 指令語法

iptables [-t table] command [match] [-j target/jump]

[-t table] 指定規則表
 

-t 參數用來,內建的規則表有三個,分別是:nat、mangle 和 filter,當未指定規則表時,則一律視爲是 filter。個規則表的功能如下:

nat:此規則表擁有 PREROUTING 和 POSTROUTING 兩個規則鏈,主要功能爲進行一對一、一對多、多對多等網址轉換工作(SNAT、DNAT),這個規則表除了作網址轉換外,請不要做其它用途。

mangle:此規則表擁有 PREROUTING、FORWARD 和 POSTROUTING 三個規則鏈。除了進行網址轉換工作會改寫封包外,在某些特殊應用可能也必須去改寫封包(TTL、TOS)或者是設定 MARK(將封包作記號,以進行後續的過濾),這時就必須將這些工作定義在 mangle 規則表中,由於使用率不高,我們不打算在這裏討論 mangle 的用法。

filter: 這個規則表是默認規則表,擁有 INPUT、FORWARD 和 OUTPUT 三個規則鏈,這個規則表顧名思義是用來進行封包過濾的處理動作(例如:DROP、 LOG、 ACCEPT 或 REJECT),我們會將基本規則都建立在此規則表中。

command 常用命令列表:

命令 -A, --append
範例 iptables -A INPUT ...
說明 新增規則到某個規則鏈中,該規則將會成爲規則鏈中的最後一條規則。
 

命令 -D, --delete
範例 iptables -D INPUT --dport 80 -j DROP
iptables -D INPUT 1
說明 從某個規則鏈中刪除一條規則,可以輸入完整規則,或直接指定規則編號加以刪除。
 

命令 -R, --replace
範例 iptables -R INPUT 1 -s 192.168.0.1 -j DROP
說明 取代現行規則,規則被取代後並不會改變順序。
 

命令 -I, --insert
範例 iptables -I INPUT 1 --dport 80 -j ACCEPT
說明 插入一條規則,原本該位置上的規則將會往後移動一個順位。
 

命令 -L, --list
範例1 iptables -L INPUT
說明 列出某規則鏈中的所有規則。
範例2 iptables -t nat -L
說明 列出nat表所有鏈中的所有規則。
 

命令 -F, --flush
範例 iptables -F INPUT
說明 刪除filter表中INPUT鏈的所有規則。
 

命令 -Z, --zero
範例 iptables -Z INPUT
說明 將封包計數器歸零。封包計數器是用來計算同一封包出現次數,是過濾阻斷式***不可或缺的工具。
 

命令 -N, --new-chain
範例 iptables -N allowed
說明 定義新的規則鏈。
 

命令 -X, --delete-chain
範例 iptables -X allowed
說明 刪除某個規則鏈。
 

命令 -P, --policy
範例 iptables -P INPUT DROP
說明 定義過濾政策。 也就是未符合過濾條件之封包, 默認的處理方式。
 

命令 -E, --rename-chain
範例 iptables -E allowed disallowed
說明 修改某 自定義規則鏈的名稱。

[match] 常用封包匹配參數

參數 -p, --protocol
範例 iptables -A INPUT -p tcp
說明 匹配通訊協議類型是否相符,可以使用 ! 運算符進行反向匹配,例如:
-p !tcp
意思是指除 tcp 以外的其它類型,如udp、icmp ...等。
如果要匹配所有類型,則可以使用 all 關鍵詞,例如:
-p all
 

參數 -s, --src, --source
範例 iptables -A INPUT -s 192.168.1.1
說明 用來匹配封包的來源 IP,可以匹配單機或網絡,匹配網絡時請用數字來表示 子網掩碼,例如:
-s 192.168.0.0/24
匹配 IP 時可以使用 ! 運算符進行反向匹配,例如:
-s !192.168.0.0/24。
 

參數 -d, --dst, --destination
範例 iptables -A INPUT -d 192.168.1.1
說明 用來匹配封包的目的地 IP,設定方式同上。
 

參數 -i, --in-interface
範例 iptables -A INPUT -i eth0
說明 用來匹配封包是從哪塊網卡進入,可以使用通配字符 + 來做大範圍匹配,例如:
-i eth+
表示所有的 ethernet 網卡
也可以使用 ! 運算符進行反向匹配,例如:
-i !eth0
 

參數 -o, --out-interface
範例 iptables -A FORWARD -o eth0
說明 用來匹配封包要從哪 塊網卡送出,設定方式同上。
 

參數 --sport, --source-port
範例 iptables -A INPUT -p tcp --sport 22
說明 用來匹配封包的源端口,可以匹配單一端口,或是一個範圍,例如:
--sport 22:80
表示從 22 到 80 端口之間都算是符合條件,如果要匹配不連續的多個端口,則必須使用 --multiport 參數,詳見後文。匹配端口號時,可以使用 ! 運算符進行反向匹配。
 

參數 --dport, --destination-port
範例 iptables -A INPUT -p tcp --dport 22
說明 用來匹配封包的目的地端口號,設定方式同上
 

參數 --tcp-flags
範例 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
說明匹配 TCP 封包的狀態標誌,參數分爲兩個部分,第一個部分列舉出想匹配的標誌,第二部分則列舉前述標誌中哪些有被設置,未被列舉的標誌必須是空的。TCP 狀態標誌包括:SYN(同步)、ACK(應答)、FIN(結束)、RST(重設)、URG(緊急) 、PSH(強迫推送)等均可使用於參數中,除此之外還可以使用關鍵詞 ALL 和 NONE 進行匹配。匹配標誌時,可以使用 ! 運算符行反向匹配。
 

參數 --syn
範例 iptables -p tcp --syn
說明 用來表示TCP通信協議中,SYN位被打開,而ACK與FIN位關閉的分組,即TCP的初始連接,與 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 的作用完全相同,如果使用 !運算符,可用來匹配非要求連接封包。
 

參數 -m multiport --source-port
範例 iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
說明用來匹配不連續的多個源端口,一次最多可以匹配 15 個端口,可以使用 ! 運算符進行反向匹配。
 

參數 -m multiport --destination-port
範例 iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
說明用來 匹配不連續的多個目的地端口號,設定方式同上
 

參數 -m multiport --port
範例 iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
說明 這個參數比較特殊,用來匹配源端口和目的端口號相同的封包,設定方式同上。注意:在本範例中,如果來源端口號爲 80目的地端口號爲 110,這種封包並不算符合條件。
 

參數 --icmp-type
範例 iptables -A INPUT -p icmp --icmp-type 8
說明用來匹配 ICMP 的類型編號,可以使用代碼或數字編號來進行 匹配。請打 iptables -p icmp --help 來查看有哪些代碼可用。
 

參數 -m limit --limit
範例 iptables -A INPUT -m limit --limit 3/hour
說明 用來匹配某段時間內封包的平均流量,上面的例子是用來 匹配:每小時平均流量是否超過一次 3 個封包。除了每小時平均次外,也可以每秒鐘、每分鐘或每天平均一次,默認值爲每小時平均一次,參數如後: /second、 /minute、/day。 除了進行封包數量的匹配外,設定這個參數也會在條件達成時,暫停封包的匹配動作,以避免因駭客使用洪水***法,導致服務被阻斷。
 

參數 --limit-burst
範例 iptables -A INPUT -m limit --limit-burst 5
說明 用來匹配瞬間大量封包的數量,上面的例子是用來匹配一次同時涌入的封包是否超過 5 個(這是默認值),超過此上限的封包將被直接丟棄。使用效果同上。
 

參數 -m mac --mac-source
範例 iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
說明 用來匹配封包來源網絡接口的硬件地址,這個參數不能用在 OUTPUT 和 POSTROUTING 規則鏈上,這是因爲封包要送到網卡後,才能由網卡驅動程序透過 ARP 通訊協議查出目的地的 MAC 地址,所以 iptables 在進行封包匹配時,並不知道封包會送到哪個網絡接口去。
 

參數 --mark
範例 iptables -t mangle -A INPUT -m mark --mark 1
說明 用來匹配封包是否被表示某個號碼,當封包被 匹配成功時,我們可以透過 MARK 處理動作,將該封包標示一個號碼,號碼最大不可以超過 4294967296。
 

參數 -m owner --uid-owner
範例
iptables -A OUTPUT -m owner --uid-owner 500
說明 用來匹配來自本機的封包,是否爲某特定使用者所產生的,這樣可以避免服務器使用 root 或其它身分將敏感數據傳送出,可以降低系統被駭的損失。可惜這個功能無法 匹配出來自其它主機的封包。

參數 -m owner --gid-owner
範例 iptables -A OUTPUT -m owner --gid-owner 0
說明 用來匹配來自本機的封包,是否爲某特定使用者羣組所產生的,使用時機同上。
 

參數 -m owner --pid-owner
範例
iptables -A OUTPUT -m owner --pid-owner 78
說明 用來匹配來自本機的封包,是否爲某特定進程所產生的,使用時機同上。

參數 -m owner --sid-owner
範例
iptables -A OUTPUT -m owner --sid-owner 100
說明 用來匹配來自本機的封包,是否爲某特定 連接(Session ID)的響應封包,使用時機同上。

參數 -m state --state
範例
iptables -A INPUT -m state --state RELATED,ESTABLISHED
說明 用來匹配連接狀態, 連接狀態共有四種:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表示該封包的連接編號(Session ID)無法辨識或編號不正確。
ESTABLISHED 表示該封包屬於某個已經建立的連接。
NEW 表示該封包想要起始一個連接(重設連接或將連接重導向)。
RELATED 表示該封包是屬於某個已經建立的連接,所建立的新連接。例如:FTP-DATA 連接必定是源自某個 FTP 連接。

[-j target/jump] 常用的處理動作:

-j 參數用來指定要進行的處理動作,常用的處理動作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,分別說明如下:

ACCEPT: 將封包放行,進行完此處理動作後,將不再匹配其它規則,直接跳往下一個規則鏈(natostrouting)。

REJECT: 攔阻該封包,並傳送封包通知對方,可以傳送的封包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個封包會要求對方關閉連接),進行完此處理動作後,將不再匹配其它規則,直接中斷過濾程序。 範例如下:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

DROP: 丟棄封包不予處理,進行完此處理動作後,將不再匹配其它規則,直接中斷過濾程序。

REDIRECT: 將封包重新導向到另一個端口(PNAT),進行完此處理動作後,將會繼續匹配其它規則。這個功能可以用來實現透明代理或用來保護 web 服務器。例如:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

MASQUERADE: 改寫封包來源 IP 爲防火牆 NIC IP,可以指定 port 對應的範圍,進行完此處理動作後,直接跳往下一個規則 鏈(manglepostrouting)。這個功能與SNAT 略有不同,當進行 IP 僞裝時,不需指定要僞裝成哪個 IP,IP會從網卡直接讀取,當使用撥 號接連時,IP通常是由ISP公司的DHCP 服務器指派的,這個時候 MASQUERADE 特別有用。範例如下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
 

LOG: 將封包相關訊息紀錄在 /var/log 中,詳細位置請查閱 /etc/syslog.conf 配置文件,進行完此處理動作後,將會繼續匹配其規則。例如:
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"

SNAT: 改寫封包來源 IP 爲某特定 IP 或 IP 範圍,可以指定 port 對應的範圍,進行完此處理動作後,將直接跳往下一個規則(mangleostrouting)。範例如下:
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source?194.236.50.155-194.236.50.160:1024-32000 

DNAT: 改寫封包目的地 IP 爲某特定 IP 或 IP 範圍,可以指定 port 對應的範圍,進行完此處理動作後,將會直接跳往下一個規則鏈(filter:input 或 filter:forward)。範例如下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100

MIRROR: 鏡射封包,也就是將來源 IP 與目的地 IP 對調後,將封包送回,進行完此處理動作後,將會中斷過濾程序。

QUEUE:中斷過濾程序,將封包放入隊列,交給其它程序處理。通過自行開發的處理程序,可以進行其它應用,例如:計算連接費用等。
 

RETURN:結束在目前規則鏈中的過濾程序,返回主規則鏈繼續過濾,如果把自定義規則鏈看成是一個子程序,那麼這個動作,就相當於提前結束子程序並返回到主程序中。

MARK:將封包標上某個代號,以便提供作爲後續過濾的條件判斷依據,進行完此處理動作後,將會繼續匹配其它規則。範例如下:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章