Linux基礎命令---iptables防火牆

一生有你llx發表於2019-03-06

iptables

iptables 指令用來設定Linux核心的ip過濾規則以及管理nat功能。iptables用於在Linux核心中設定、維護和檢查IPv4資料包過濾規則表。可以定義幾個不同的表。每個表包含許多內建鏈,也可能包含使用者定義的鏈。每個鏈都是一個規則列表,可以匹配一組資料包。每條規則都指定如何處理匹配的資料包。這被稱為“目標”,它可能是跳轉到同一表中的使用者定義鏈。

此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

 

1 、語法

iptables [-t table]  {-A|-D}  chain  rule-specification

iptables [-t table]  -I  chain [rulenum]  rule-specification

iptables [-t table]  -R  chain  rulenum rule-specification

iptables [-t table]  -D  chain rulenum

iptables [-t table]  -S  [chain [rulenum]]

iptables [-t table]  {-F|-L|-Z}  [chain [rulenum]]  [options...]

iptables [-t table]  -N  chain

iptables [-t table]  -X  [chain]

iptables [-t table]  -P  chain target

iptables [-t table]  -E  old-chain-name  new-chain-name rule-specification = [matches...] [target]

match = -m matchname [per-match-options]  target = -j targetname [per-target-options]

目前Linux核心支援3個相互獨立的表:filter,過濾ip資料包;nat,配置nat功能;mangle,修改ip資料包。

filter 是預設表,包含INPUT(傳送給本機) 、OUTPUT(本機向外傳送)、FORWARD(被路由出去)三個鏈。

nat 表包含PREROUTING(修改剛收到的資料包) 、OUTPUT(在路由之前處理本機產生的資料包) 、POSTROUTING(修改將要傳送的資料包)三個鏈。

mangle 表包含PREROUTING(路由之前,修改收到的包) 、OUTPUT(路由之前,修改本機產生的包) 、INPUT(修改傳送到本機的包) 、FORWARD (修改路由之後的包) 、POSTROUTING(修改將被本機傳送的包)五個鏈。

Linux 系統中的內建目標包括:ACCEPT(允許資料包通過)DROP(丟棄資料包) QUEUE(傳遞包到使用者空間)RETURN(停止向後檢測其他的規則,返回之前的條用規則處)

 

2 、選項列表

選項可以按組來區分

命令

說明

-t  table

指定要管理的表

-A | --append  chain rule-specification

追加記錄

-D | --delete  chain rule-specification

刪除記錄

-I | --insert  chain [rulenum] rule-specification

插入記錄

-R | --replace  chain [rulenum] rule-specification

替換記錄

-L | --list  [chain]

列出記錄

-S | --list-rules  [chain]

列出已選擇鏈的所有規則。如果沒有選擇任何鏈,則所有鏈都列印

-F | --flush  [chain]

刪除指定的記錄

-Z | --zero  [chain [rulenum]]

將資料計數和位元組計數清零

-N | --new-chain  chain

使用者自定義新鏈

-X | --delete-chain  [chain]

刪除使用者自定義鏈

-P  |  --policy  chain target

為指定的鏈設定策略

-E  |  --rename-chain  old   new

重新命名鏈

-h

顯示幫助資訊

引數

說明

[!] –p | --protocol  protocol

指定協議型別tcp、udp、icmp、all,協議前加!標識否定

[!] –s |  --source address [/mask][,…

源地址

[!] –d 

--destination address[/mask][,…

目標

-j | --jump

指定跳轉的目標

-g | --goto  chain

這指定應在使用者指定的鏈中繼續處理。與“ --jump ”選項不同,返回將不再在此鏈中繼續處理,而是在通過“ --jump ”呼叫我們的鏈中繼續處理。

[!] –i | --in-interface  name

接收資料包的介面名稱(僅用於輸入、轉發和PREROUTING鏈的資料包)。當“!”引數在介面名稱之前使用,意義被倒置。如果介面名以“+”結尾,則以此名稱開頭的任何介面都將匹配。如果省略此選項,則任何介面名稱都將匹配。

-o | --out-interface name

指定資料包離開的網路介面

[!] –f | --fragment

這意味著該規則僅指分段資料包的第二段和更多的片段。

-c | --set-counters  packets   bytes

這使管理員能夠初始化規則的資料包和位元組計數器(在插入、追加、替換操作期間)。

其他選項

說明

-v | --verbose

冗長的輸出,該選項使List命令顯示介面名稱、規則選項(如果有的話)和TOS掩碼。還列出了資料包計數器和位元組計數器

-n | --numeric

數字輸出IP地址和埠號將以數字格式列印。預設情況下,程式將嘗試將它們顯示為主機名、網路名稱或服務(只要適用)。

-x | --exact

擴大數字。顯示資料包和位元組計數器的確切值,而不是隻顯示K‘s(1000倍)M’s(1000 K倍數)或G‘s(1000 m倍數)中的四捨五入數。此選項僅與-L命令相關。

--line-numbers

當列出規則時,將行號新增到每條規則的開頭,對應於該規則在鏈中的位置。

--modprobe= command

在向鏈中新增或插入規則時,使用命令載入任何必要的模組(目標、匹配擴充套件等)

 

3 、匹配擴充套件

iptable 可以使用擴充套件的資料包匹配模組。它們以兩種方式載入:隱式地,當指定“-p”或“—protocol”時,或者使用“-m”或“—match”選項,後面跟著匹配的模組名稱;之後,根據特定模組的不同,可以使用各種額外的命令列選項。可以在一行中指定多個擴充套件匹配模組,並且可以在指定模組後使用“-h“或“--help“選項來接收特定於該模組的幫助。

1 )addrtype

此模組根據資料包的地址型別匹配資料包。地址型別在核心網路堆疊中使用,並將地址分類為不同的組。該組的確切定義取決於特定的第三層協議。地址型別可以是以下的幾種:

UNSPEC ,未指明的地址,例如,0.0.0.0。

UNICAST ,單播地址。

LOCAL ,本地地址。

BROADCAST ,廣播地址。

ANYCAST ,選播包。

MULTICAST ,多播地址。

BLACKHOLE ,黑洞地址。

UNREACHABLE ,不可達到的地址。

PROHIBIT ,被禁止的地址。

THROW ,FIXME。

NAT ,FIXME。

XRESOLVE

[!] --src-type type ,如果源地址為給定型別,則匹配。

[!] --dst-type type ,如果目標地址是給定型別的,則匹配。

--limit-iface-in ,地址型別檢查可以限制在資料包即將進入的介面上。此選項僅在PREROUTING、INPUT和FORWARD鏈中有效。它不能用“--limit-iface-out “選項來指定。

--limit-iface-out ,地址型別檢查可以限制在包將要輸出的介面上。此選項僅在POSTROUTING、OUTPUT和FORWARD鏈中有效。它不能用“--limit-iface-in“選項指定。

2 ah

此模組與IPSec資料包的身份驗證頭中的Spis匹配。

[!] --ahspi spi[:spi]

3 cluster

允許您部署閘道器和後端負載共享叢集,而不需要負載平衡器。此匹配要求所有節點都看到相同的資料包。因此,叢集匹配決定該節點是否必須處理給定以下選項的資料包。

--cluster-total-nodes num ,設定叢集中的總節點數。

[!] --cluster-local-node num ,設定本地節點編號ID。

[!] --cluster-local-nodemask mask ,設定本地節點編號ID掩碼。您可以使用此選項而不是” --cluster-local-node “。

--cluster-hash-seed value ,設定Jenkins雜湊的種子值。

iptables  -A PREROUTING  -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node  1  --cluster-hash-seed  0xdeadbeef  -j  MARK  --set-mark 0xffff

iptables  -A PREROUTING  -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node  1  --cluster-hash-seed  0xdeadbeef  -j  MARK  --set-mark 0xffff

iptables -A PREROUTING -t mangle -i eth1 -m mark ! --mark 0xffff -j DROP

iptables -A PREROUTING -t mangle -i eth2 -m mark ! --mark 0xffff -j DROP

下面的命令使所有節點都看到相同的資料包

ip maddr add 01:00:5e:00:01:01 dev eth1

ip maddr add 01:00:5e:00:01:02 dev eth2

arptables   -A  OUTPUT   -o   eth1  --h-length  6  -j  mangle  --mangle-mac-s 01:00:5e:00:01:01

arptables -A INPUT -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 –j mangle --mangle-mac-d 00:zz:yy:xx:5a:27

arptables   -A  OUTPUT   -o   eth2  --h-length  6  -j  mangle  --mangle-mac-s 01:00:5e:00:01:02

arptables -A INPUT -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 –j mangle --mangle-mac-d 00:zz:yy:xx:5a:27

4 comment

允許向任何規則新增註釋(最多256個字元)。

--comment comment

iptables -A INPUT -s 192.168.0.0/16 -m  comment  --comment  "A  privatized  IP block"

5 connbytes

主要用途是檢測長時間下載,並在流量控制中使用較低優先順序的頻帶來標記它們。每個連線傳輸的位元組也可以通過“conntrack -L”檢視,並通過ctnetlink訪問。

[!] --connbytes from [:to] ,將大於FROM,小於TO的連線中的資料包匹配,“!”用於匹配不在此範圍內的資料包。

--connbytes-dir {original|reply|both} 要考慮哪些資料包

--connbytes-mode {packets|bytes|avgpkt} 是否檢查資料包的數量、傳輸的位元組數或到目前為止收到的所有資料包的平均大小(以位元組為單位)。請注意,當“both”與“avgpkt”一起使用時,而且資料(主要是)只朝一個方向(例如HTTP)進行,平均資料包大小將約為實際資料包的一半。

iptables   ..  -m  connbytes  --connbytes 10000:100000  --connbytes-dir  both --connbytes-mode bytes

6 connlimit

允許您限制每個客戶端IP地址(或客戶地址塊)到伺服器的並行連線數。

[!] --connlimit-above n ,如果現有連線的數目大於n,則匹配

--connlimit-mask prefix_length ,使用字首長度對主機進行分組。對於IPv 4,這必須是介於(包括)0和32之間的數字。對於IPv 6,在0到128之間。

# 每個客戶端主機允許 2 telnet 連線

iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2  -j REJECT

iptables  -A  INPUT -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT

# 將並行 HTTP 請求的數量限制在每 C 類網路 16 (24 位網路掩碼 )

iptables  -p  tcp  --syn  --dport  80  -m   connlimit  --connlimit-above   16 --connlimit-mask 24 -j REJECT

# 將鏈路本地網路的並行 HTTP 請求限制為 16

(ipv6)   ip6tables  -p  tcp  --syn  --dport  80  -s fe80::/64  -m  connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT

7 connmark

此模組匹配與連線關聯的netfilter標記欄位(可以使用下面的CONNMARK目標進行設定)。

[!] --mark value [/ mask ] ,將連線中的資料包與給定的標記值相匹配(如果指定了掩碼,則在比較之前用標記進行邏輯分析)

8 )conntrack

此模組與連線跟蹤結合時,允許訪問此資料包/連線的連線跟蹤狀態。

[!] --ctstate statelist ,Statelist是要匹配的連線狀態的逗號分隔列表。下面列出了可能的狀態。

[!] --ctproto l4proto ,第4層協議匹配(按號碼或名稱)

[!] --ctorigsrc address [/ mask ]

[!] --ctorigdst address [/ mask ]

[!] --ctreplsrc address [/ mask ]

[!] --ctrepldst address [/ mask ] ,與original/reply、source/destination地址匹配。

[!] --ctorigsrcport port

[!] --ctorigdstport port

[!] --ctreplsrcport port

[!] --ctrepldstport port ,匹配original/reply、source/destination埠(TCP/UDP/等)或GRE鍵

[ !] --ctstatus statelis ,Statuslist是要匹配的連線狀態的逗號分隔列表。下面列出了可能的狀態

[!] --ctexpire time [: time ] ,將剩餘生存期(以秒為單位)與給定值或範圍(包括)進行匹配。

--ctdir {ORIGINAL|REPLY} ,匹配按指定方向流動的資料包。如果根本沒有指定此標誌,則匹配兩個方向的資料包。

ctstate 的有效值

INVALID ,意味著資料包與已知的連線沒有關聯。

NEW ,意味著該資料包已啟動一個新連線,或與未在兩個方向上看到資料包的連線相關聯。

ESTABLISHED ,意味著該資料包與看到兩個方向的資料包的連線相關聯。

RELATED ,意味著資料包正在啟動新連線,但與現有連線相關聯,例如FTP資料傳輸或ICMP錯誤。

SNAT ,虛擬狀態,如果原始源地址與回覆目的地不同,則進行匹配。

DNAT ,虛擬狀態,如果原始目的地與應答源不同,則進行匹配。

ctstatus 的有效值

NONE ,不是下列任何一項。

EXPECTED ,這是一個預期的連線。

SEEN_REPLY ,ConnTrack在兩個方向都看到了資料包。

ASSURED ,連線項不應提前過期。

CONFIRMED ,確認連線:原始資料包已離開框。

9 dccp

[!] --source-port , --sport port [: port ]

[!] --destination-port,--dport port [: port ]

[!] --dccp-types mask ,當DCCP資料包型別為“掩碼”之一時匹配。“掩碼”是以逗號分隔的資料包型別列表。型別可以是: REQUEST、RESPONSE、DATA、ACK、DATAACK、CLOSEREQ、CLOSE、RESET、SYNC、SYNCACK、INVALID

[!] --dccp-option number ,匹配如果設定DCP選項 

10 dscp

此模組與IP報頭中TOS欄位中的6位DSCP欄位匹配。Dscp已經取代了IETF中的TOS。

[!] --dscp value ,匹配數值(十進位制或十六進位制)值[0-63]

[!] --dscp-class class ,匹配DiffServ類。此值可能是BE、EF、AFxx或CSX類中的任何一個。然後,它將被轉換為其相應的數值。

11 ecn

這允許您匹配IPv 4和TCP報頭的ECN位。ECN是RFC3168中指定的顯式擁塞通知機制。

[!] --ecn-tcp-cwr ,如果設定了TCP ECN CWR(擁塞視窗接收)位,則匹配。

[ !] --ecn-tcp-ece ,如果設定了TCP ECN ECE(ECN Echo)位,則匹配。

[!] --ecn-ip-ect num ,這與特定的IPv 4 ECT(ECN能力傳輸)相匹配。你必須在‘0’和‘3’之間指定一個數字。

12 esp

此模組與ipsec資料包的esp報頭中的spis匹配。

[!] --espspi spi [: spi ]

13 hashlimit

雜湊限制使用雜湊桶來表示一組連線的速率限制匹配(如極限匹配),使用單個iptables規則。分組可以完成perhostgroup(源和/或目標地址)和/或每個埠。它使您能夠表達“每組每個時間量子N個資料包”:

源主機上的匹配:192.168.0.0/16期間每臺主機每秒1000個資料包。

源Prot匹配:每項服務每秒100包(192.168.1.1)。

子網的匹配:10.0.0.0/8中每個/28子網每分鐘10000包。

--hashlimit-upto amount [/second|/minute|/hour|/day] ,如果速率低於或等於amount/quantum,則匹配。它被指定為一個數字,帶有可選的時間量子字尾;預設值是3/小時。

--hashlimit-above amount [/second|/minute|/hour|/day] ,如果速率大於amount/quantum,則匹配

--hashlimit-burst amount ,要匹配的資料包的最大初始數量:當未達到上述指定的限制時,該數目將被重新充電一次,最多可達到此數目;預設值為5。

--hashlimit-mode {srcip|srcport|dstip|dstport},... ,要考慮的以逗號分隔的物件列表。如果給出了“- -hash-limit-mode “選項, hashlimit 就像 limit 一樣,但是在進行雜湊內務管理時會花費很大的代價。

--hashlimit-srcmask prefix ,當使用“ --hashlimit-mode “時,所遇到的所有源地址都將根據給定的字首長度進行分組,因此建立的子網將受到雜湊限制。字首必須介於(包括)0和32之間。

--hashlimit-dstmask prefix ,類似“ --hashlimit-srcmask “,但是對於目標地址。

--hashlimit-name foo ,“/proc/net/ipt_hashlimit/foo“條目的名稱。

--hashlimit-htable-size buckets ,雜湊表的桶數。

--hashlimit-htable-max entries ,雜湊中的最大項。

--hashlimit-htable-expire msec ,在雜湊條目過期多少毫秒之後。

--hashlimit-htable-gcinterval msec ,垃圾收集間隔之間有多少毫秒。

14 helper

此模組匹配與特定連線輔助程式相關的資料包。

[!] --helper string ,匹配與指定的連線輔助程式相關的資料包。對於預設埠上與ftp會話相關的資料包,字串可以是“ftp”。對於其他埠,將-portnr附加到值,即。“ftp-2121”

15 icmp

如果指定了“ --protocol icmp ”,則可以使用此擴充套件。它提供了以下選項

[!] --icmp-type {type[/code]|typename} ,這允許指定icmp型別,它可以是數值icmp型別、型別/程式碼對,也可以是命令顯示的icmp型別名稱之一。

16 iprange

這與給定的任意範圍的ip地址匹配。

[!] --src-range from [-to] ,匹配指定範圍內的源IP。

[!] --dst-range from [-to] ,匹配指定範圍內的目標IP。

17 length

此模組將資料包的第3層有效載荷(例如第4層包)的長度與特定值或範圍相匹配。

[!] --length length [: length ]

18 limit

此模組使用令牌桶過濾器以有限的速度匹配。使用此擴充套件的規則將匹配,直到達到此限制(除非“!”使用標誌)。它可以與日誌目標結合使用,提供有限的日誌記錄。

--limit rate [/second|/minute|/hour|/day] ,最大平均匹配率:指定為數字,帶有可選的‘/秒’、‘/分鐘’、‘/小時’或‘/日’字尾;預設值為3/小時

--limit-burst number ,要匹配的資料包的最大初始數量:當未達到上述指定的限制時,此數字將被重新充電一次,最多可達到此數目;預設值為5。

19 mac

[!] --mac-source address ,匹配源MAC地址。它必須是XX:XX:XX:XX:XX:XX格式。請注意,這隻對來自乙太網裝置並進入PREROUTING、FORWARD或INPUT鏈的資料包有意義。

20 mark

此模組匹配與資料包關聯的netfilter標記欄位(可以使用下面的標記目標設定該標記)。

[!] --mark value [/ mask ] ,將資料包與給定的無符號標記值匹配(如果指定了掩碼,則在進行比較之前,該掩碼將與掩碼進行邏輯連線)

21 )multiport

此模組匹配一組源埠或目標埠。最多可指定15個埠。埠範圍(埠:埠)算作兩個埠。它只能與“ -p tcp “或” -p udp “一起使用。

[!] --source-ports , --sports port [, port |, port : port ]... ,如果源埠是給定埠之一,則匹配。旗杆運動是這個選項的方便別名。多個埠或埠範圍使用逗號分隔,埠範圍使用冒號指定。因此,53,1024:65535將匹配埠53,所有埠都是從1024到65535。

[ !] --destination-ports , --dports port [, port |, port : port ].. ,如果目標埠是給定埠之一,則匹配。標誌--dports是此選項的方便別名。

[!] --ports port [, port |, port : port ]... ,如果源埠或目標埠等於給定埠之一,則匹配。

22 owner

對於本地生成的資料包,此模組試圖匹配資料包建立者的各種特徵。此匹配僅在OUTPUT鏈和POSTROUTING鏈中有效。轉發的資料包沒有任何與其相關聯的套接字。來自核心執行緒的資料包確實有一個套接字,但通常沒有所有者。

[!] --uid-owner username

[!] --uid-owner userid [- userid ] ,如果資料包套接字的檔案結構(如果有)是給定使用者擁有的,則匹配。您還可以指定數字UID或UID範圍。

[!] --gid-owner groupname

[!] --gid-owner groupid [- groupid ] ,如果資料包套接字的檔案結構屬於給定組,則匹配。您還可以指定數字GID或GID範圍。

[!] --socket-exists ,如果資料包與套接字相關聯,則匹配。

23 physdev

該模組在橋埠輸入和輸出裝置上匹配,這些輸入和輸出裝置被奴役到橋接裝置上。此模組是支援透明橋接IP防火牆的基礎結構的一部分,僅適用於2.5.44版本以上的核心版本。

[!] --physdev-in name ,接收資料包的橋埠的名稱(僅用於INPUT、FORWARD和PREROUTING鏈的資料包)。如果介面名以“+“結尾,則以此名稱開頭的任何介面都將匹配。如果資料包沒有通過橋接裝置到達,則此資料包將與此選項不匹配,除非“!”被利用了。

[!] --physdev-out name ,要傳送資料包的橋接埠的名稱(用於FORWARD、OUTPUT和POSTROUTING鏈的資料包)。如果介面名以“+“結尾,則以此名稱開頭的任何介面都將匹配。注意,在NAT和Magle輸出鏈中,不能在橋輸出埠上匹配,但是在過濾器輸出鏈中可以匹配。如果資料包不會由網橋裝置離開,或者如果它還不知道輸出裝置將是什麼,那麼該資料包將與此選項不匹配,除非‘!’使用。

[!] --physdev-is-in ,如果資料包已通過網橋介面輸入,則匹配。

[!] --physdev-is-out ,如果資料包將通過網橋介面離開,則匹配。。

[!] --physdev-is-bridged ,如果資料包正在橋接,因此不被路由,則匹配。這僅在FORWARD鏈和POSTROUTING鏈中有用。

24 pkttype

此模組與鏈路層資料包型別匹配。

[!] --pkt-type {unicast|broadcast|multicast}

25 policy

此模組與IPsec用於處理資料包的策略相匹配。

--dir {in|out} ,用於選擇是否匹配用於解除封裝的策略或將用於封裝的策略。in在PREROUTING、INPUT、FORWARD鏈中有效,out在POSTROUTING、OUTPUT、FORWARD鏈中有效。

--pol {none|ipsec} ,如果資料包要接受ipsec處理,則匹配。

--strict ,選擇是否匹配確切的策略,或者如果策略的任何規則與給定的策略匹配,則選擇匹配。

[!] --reqid id ,匹配策略規則的reqid。可以使用setkey(8)指定REQID,使用unique:id作為級別。

[!] --spi  spi ,匹配SA的SPI。

[!] --proto {ah|esp|ipcomp} ,匹配封裝協議。

[!] --mode {tunnel|transport} ,匹配封裝模式。

[!] --tunnel-src addr [/ mask ] ,匹配隧道模式sa的源端點地址。只有和“ --mode tunnel “一起使用有效。

[!] --tunnel-dst addr [/ mask ] ,匹配隧道模式sa的目標端點地址。只有和“ --mode tunnel “一起使用有效。

--next ,啟動策略規範中的下一個元素,只有和“ --strict. “一起使用有效。

26 )quota

通過減少每個資料包的位元組計數器來實現網路配額。

--quota bytes ,配額(以位元組為單位)。

27 rateest

該速率估計器可以與RATEEST目標收集的估計費率相匹配。它支援絕對bps/pps值匹配,比較兩種速率估計量,並匹配兩種速率估計量之間的差異。

--rateest1 name ,第一比率估計器的名稱。

--rateest2 name ,第二比率估計器的名稱。

--rateest-delta ,將差異與給定的比率進行比較

--rateest1-bps value

--rateest2-bps value ,每秒比較位元組

--rateest1-pps value

--rateest2-pps value ,每秒比較包

[!] --rateest-lt ,如果速率小於給定的速率/估計量,則匹配

[!] --rateest-gt ,如果速率大於給定的速率/估計量,則匹配

[!] --rateest-eq ,如果速率等於給定的速率/估計量,則匹配

# 示例:在啟動資料連線時,可以根據可用頻寬從 FTP 伺服器通過兩行路由傳出資料連線:

# 估計出率

iptables   -t   mangle   -A  POSTROUTING -o  eth0  -j  RATEEST  --rateest-name  eth0 --rateest-interval 250ms --rateest-ewma 0.5s

iptables  -t  mangle  -A  POSTROUTING -o  ppp0  -j  RATEEST   --rateest-name   ppp0 --rateest-interval 250ms --rateest-ewma 0.5s

# 基於可用頻寬的標記

iptables  -t  mangle  -A balance -m conntrack --ctstate NEW -m helper --helper ftp –m rateest  --rateest-delta  --rateest1  eth0   --rateest-bps1   2.5mbit   --rateest-gt --rateest2 ppp0 --rateest-bps2 2mbit -j CONNMARK --set-mark 1

iptables  -t  mangle  -A balance -m conntrack --ctstate NEW -m helper --helper ftp –m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit --rateest-gt --rateest2 eth0 --rateest-bps2 2.5mbit -j CONNMARK --set-mark 2

iptables -t mangle -A balance -j CONNMARK --restore-mark

28 realm

這與路由領域匹配。路由域用於複雜的路由設定,涉及到諸如BGP這樣的動態路由協議。

[!] --realm value [/ mask ] ,匹配給定的領域號(可選掩碼)。如果不是一個數字,則值可以是“ /etc/iproute2/rt_realms ”中的命名域(在這種情況下不能使用掩碼)。

29 recent

允許您動態建立IP地址列表,然後以幾種不同的方式與該列表進行匹配。例如,您可以建立一個“壞蛋”列表,列出試圖連線到防火牆上的埠139的人,然後在不考慮這些包的情況下丟棄它們的所有未來資料包。 --set、--rcheck、--update、--remove 是相互排斥的。

--name name ,指定要用於命令的列表。如果沒有指定名稱,則將使用預設名稱。

[!] --set ,他將把資料包的源地址新增到列表中。如果源地址已經在列表中,這將更新現有條目。這將永遠返回成功(或失敗,如果傳入!)。

--rsource ,匹配/儲存最近列表中每個資料包的源地址。這是預設的

--rdest ,匹配/儲存最近列表中每個資料包的目標地址

[!] --rcheck ,檢查資料包的源地址是否當前在列表中。

[!] --update ,類似“ --rcheck ”,但如果匹配,它將更新“最後一次看到”時間戳。

[!] --remove ,檢查資料包的源地址是否當前在列表中,如果是,該地址將從列表中刪除,規則將返回true。如果找不到地址,則返回false。

--seconds seconds ,此選項必須與“ --rcheck ”或“ --update ”之一結合使用.使用時,這將縮小匹配範圍,僅當地址在列表中並在最後給定的秒內被看到時才發生。

--hitcount hits ,此選項必須與“ --rcheck ”或“ --update ”之一結合使用。使用時,這將縮小匹配範圍,僅當地址在列表中且資料包已接收到大於或等於給定值時才發生。此選項可與“ --seconds ”一起使用,以建立一個更窄的匹配,需要在特定的時間範圍內執行一定數量的命中。HitCount引數的最大值由xt_recent核心模組的“ip_pkt_list_tot”引數給出。在命令列中超過此值將導致拒絕該規則。

--rttl ,此選項只能與“ --rcheck ”或“ --update ”中的一個一起使用。當使用時,這將縮小匹配範圍,只有當地址在列表中,並且當前資料包的ttl與符合“ --set ”規則的資料包匹配時才會發生匹配。這可能是有用的,如果你有問題的人偽造他們的源地址,以便通過這個模組拒絕其他人訪問你的網站通過傳送虛假的資料包給你。

iptables -A FORWARD -m recent --name badguy --rcheck --seconds 60 -j DROP

iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name  badguy --set -j DROP

“/proc/net/xt_new/*”是關於每個列表中每個條目的地址和資訊的當前列表。可以讀取“/proc/net/xt_new/”中的每個檔案來檢視當前列表,或者使用以下命令編寫兩個檔案來修改列表:

echo +addr >/proc/net/xt_recent/DEFAULT

增加 addr 到預設的列表

echo -addr >/proc/net/xt_recent/DEFAULT

addr 從預設列表刪除

echo / >/proc/net/xt_recent/DEFAULT

舒心預設列表

模組本身接受引數,預設顯示如下:

ip_list_tot = 100 ,每個表記住的地址數

ip_pkt_list_tot = 20 ,記住的每個地址的資料包數

ip_list_hash_size = ,雜湊表大小。0意味著根據ip_list_tot(預設值:512)計算它。

ip_list_perms = 0644 ,“/proc/net/xt_recent/*”的全新啊

ip_list_uid = ,“/proc/net/xt_recent/*”的擁有者ID。

ip_list_gid = ,“/proc/net/xt_recent/*”的擁有者組ID。

30 sctp

[!] --source-port,--sport port [: port ]

[!] --destination-port,--dport  port [: port ]

[!] --chunk-types {all|any|only}  chunktype [: flags ] [...]

大寫中的標誌字母表示如果設定將匹配標誌,小寫表示匹配(如果未設定)。

Chunk types:  DATA INIT INIT_ACK SACK HEARTBEAT HEARTBEAT_ACK ABORT SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECN_ECNE ECN_CWR  SHUTDOWN_COMPLETE ASCONF ASCONF_ACK

chunk type :available flags

DATA :U B E u b e

ABORT :T t

SHUTDOWN_COMPLETE :T t

例子

iptables -A INPUT -p sctp --dport 80 -j DROP

iptables -A INPUT -p sctp --chunk-types any DATA,INIT -j DROP

iptables -A INPUT -p sctp --chunk-types any DATA:Be -j ACCEPT

31 set

該模組匹配可由ipset(8)定義的IP集。

[!] --match-set setname flag [, flag ].. ,其中flag是用逗號分隔的src或dst規範的列表,其中最多隻能有6個。

iptables -A FORWARD -m set --match-set test src,dst

將匹配資料包,對於這些資料包(如果SET型別為ipportmap),源地址和目標埠對可以在指定的集合中找到。如果指定集的集合型別為單維(例如ipmap),則該命令將匹配在指定集中可以找到源地址的資料包。

如果選項與其他擴充套件的選項不衝突,則可以將選項“ --match-set ”替換為“ --set ”。

32 socket

如果可以通過在資料包上執行套接字查詢找到開啟的套接字,則他的匹配項。

--transparent ,忽略非transparent的包。

33 state

當與連線跟蹤相結合時,此模組允許訪問此資料包的連線跟蹤狀態。

[!] --state state ,其中狀態是要匹配的連線狀態的逗號分隔列表。可能的狀態是無效的,這意味著由於某些原因無法識別資料包,其中包括記憶體不足和ICMP錯誤,這些錯誤與任何已知的連線不相對應,這意味著該資料包與一個已經在兩個方向上看到資料包的連線相關聯,新的意思是該資料包已經啟動了一個新連線,或以其他方式與沒有在兩個方向上看到資料包的連線相關聯,以及相關的意思是,該資料包正在啟動一個新連線,但與現有連線相關聯,例如FTP資料傳輸或ICMP錯誤。

34 statistic

該模組基於一定的統計條件對資料包進行匹配。它支援使用“--mode”選項設定的兩種不同的模式。

--mode mode ,設定匹配規則的匹配模式,所支援的模式為隨機模式和nth模式。

--probability p ,將隨機匹配資料包的概率從0設定為1。它只適用於隨機模式。

--every n ,每第n包匹配一包。它只適用於nth模式。

--packet p ,為nth模式設定初始計數器值(0<=p<=n-1,預設值0)

35 string

該模組通過使用某種模式匹配策略來匹配給定的字串。它需要一個Linux核心>=2.6.14。

--algo {bm|kmp} ,選擇模式匹配策略(bm=Boyer-Moore,  kmp=Knuth-Pratt- Morris)

--from offset ,設定它開始尋找匹配的偏移量。如果未通過,預設為0。

--to offset ,設定它開始尋找匹配的偏移量。如果未通過,則預設為資料包大小。

[!] --string pattern ,匹配給定的模式。

[!] --hex-string  pattern ,匹配以十六進位制表示的給定模式。

36 tcp

如果指定了“ --protocol TCP ”,則可以使用這些擴充套件。它提供了以下選項:

[!] --source-port , --sport port [: port ] ,源埠或埠範圍規範。這可以是服務名稱,也可以是埠號。如果省略第一個埠,則假定為“0”;如果省略最後一個埠,則假定為“65535”。如果第一個埠大於第二個埠,它們將被交換

[!] --destination-port , --dport port [: port ] ,目的埠或埠範圍規範。“--dport”的方便別名。

[!] --tcp-flags mask comp ,匹配指定的TCP標誌。第一個引數掩碼是我們應該檢查的標誌,寫成逗號分隔列表,第二個引數comp是必須設定的以逗號分隔的標誌列表。flag可以是 SYN ACK FIN RST URG PSH ALL NONE

iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN

這個命令只匹配了 SYN 標誌

[!] --syn ,只匹配設定了SYN位,並且清除了ACK,RST,FIN為的包。等價於“ --tcp-flags SYN,RST,ACK,FIN SYN

[!] --tcp-option number ,如果設定了tcp選項就匹配。

37 tcpmss

這與TCP標頭的TCPMSS(最大段大小)欄位匹配。您只能在TCP SYN或SYN/ACK資料包上使用這一點,因為MSS只在連線啟動時的TCP握手期間協商。

[!] --mss value [: value ] ,匹配給定的tcp mss值或範圍。

38 time

如果資料包到達時間/日期在給定範圍內,則匹配。所有選項都是可選的,但在指定的時候都是可選的。

--datestart YYYY [- MM [- DD [ Thh [: mm [: ss ]]]]]

--datestop YYYY [- MM [- DD [ Thh [: mm [: ss ]]]]] ,僅在給定時間內匹配,必須採用ISO 8601“T”表示法。可能的時間範圍是1970-01-01T00:00:00到2038-01-19T04:17:07。如果沒有指定“--datestart”或“--datestop”,則將分別預設為1970-01-01和2038-01-19。

--timestart hh : mm [: ss ]

--timestop hh : mm [: ss ] ,只有在指定的白天匹配。可能的時間範圍是00:00到23:59:59。允許前導零(例如“06:03”),並正確解釋為基數-10。

[!] --monthdays day [, day ...] ,只在一個月的指定日期匹配。可能值為1到31。請注意,在沒有第31天的月份中,指定31當然不匹配;28天或29天的2月也是如此。

[!] --weekdays day [, day ...] ,只有在給定的工作日匹配。可能的值分別是Mon、Tue、Wed、Thu、Fri、sat、Sun或1到7之間的值。您也可以使用兩個字元的變體(Mo,Tu等)。

--utc ,把給 --datestart、--datestop、--timestart、--timestop 的時間解釋為UTC。

--localtz ,把給 --datestart、--datestop、--timestart、--timestop 的時間解釋為本地時間(預設)。

匹配星期天

-m time --weekdays Sa,Su

匹配國家假日

-m time --datestart 2007-12-24 --datestop 2007-12-27

由於停止時間實際上包括在內,因此需要下列停止時間才能與新一天的第一秒鐘不匹配:

-m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59

午餐時間

-m time --timestart 12:30 --timestop 13:30

這個月的第四個星期五:

-m time --weekdays Fr --monthdays 22,23,24,25,26,27,28

39 tos

此模組匹配IPv 4報頭中的8位服務型別欄位(即包括IPv 6報頭中的“優先順序”位元)或(也包括8位)優先順序欄位。

[!] --tos  value [/ mask ] ,匹配具有給定TOS標記值的資料包。如果指定了mask,則在比較之前使用TOS標記進行邏輯分析。

[!] --tos  symbol ,在為IPv4使用tos匹配時,您可以指定一個符號名。可以通過使用“ -m tos-h ”呼叫iptables來獲得已識別的TOS名稱的列表。請注意,這意味著掩碼為0x3F,即除ECN位外的所有掩碼。

40 ttl

此模組匹配ip報頭中活動欄位的時間。

--ttl-eq ttl ,如果和給定的ttl值相等,那麼就匹配。

--ttl-gt ttl ,如果大於給定的ttl值,那麼就匹配。

--ttl-lt ttl ,如果小於給定的ttl值,那麼就匹配。

41 u32

U32 測試從資料包中提取的多達4個位元組的數量是否具有指定的值。要提取哪些內容的規範足夠通用,可以在給定的偏移量下從tcp報頭或有效負載中找到資料。

[!] --u32 tests ,該引數相當於下面描述的一種小型語言中的程式。

tests := location "=" value | tests "&&" location "=" value

value := range | value "," range

range := number | number ":" number

一個單數,n,被解釋為n:n。n:m被解釋為數的範圍>=n和<=m。     

location := number | location operator number

operator := "&" | "<<" | ">>" | "@"

操作符‘&’,‘<<’,‘>>‘和‘&&’均與C中相同。‘=’實際上是一個集合成員資格運算子,值語法描述了一個集合。‘@’操作符允許進入下一個標頭,並在下面進一步描述。目前,對測試的大小有一些人為的實現限制。

* u32 引數中“=”不超過10個,“&&”不超過9個;

* 每個值不超過10個範圍(和9個逗號);

* 每個地點不超過10個number(和9個操作符);

要描述位置的含義,請想象下面解釋它的機器。有三個暫存器:a是char*型別,最初IP報頭的地址;B和C是無符號32位整數,最初為零。指令是:

number B = number;

C = (*(A+B)<<24) + (*(A+B+1)<<16) + (*(A+B+2)<<8) + *(A+B+3)

&number C = C & number

<< number C = C << number

>> number C = C >> number

@number A = A + C;

任何對[SKB->Data,SKB->End]外部記憶體的訪問都會導致匹配失敗。否則,計算結果是C的最終值。允許使用空白,但在測試中不需要。但是,出現在其中的字元可能需要shell引用,因此將引數括在引號中是個好主意。

例子程式碼

匹配總長度 >=256 IP 資料包。 IP 報頭包含一個以位元組 2-3 為單位的總長度欄位。以及使用 0xFFFF( 給定位元組 2-3) ,並測試它是否在 [0x100 0xFFF] 範圍內。

--u32 "0 & 0xFFFF = 0x100:0xFFFF"

 

匹配 ICMP 資料包與 ICMP 型別 。首先測試它是否是 ICMP 資料包,真 IP 位元組 9( 協議 )=1

--u32 "6 & 0xFF = 1 && ...

讀取位元組 6-9 ,使用 & 丟棄位元組 6-8 ,並將結果與 1 進行比較。下一次測試它不是片段。 ( 如果是這樣的話,它可能是這樣的包的一部分,但我們不能總是說出來。 ) 注:如果您想要匹配 IP 報頭之外的任何內容,則通常需要進行此測試。最後 6 位位元組 6 和所有位元組 7 都是 當且僅當這是一個完整的資料包 ( 不是片段 ) 。或者,您可以只測試位元組 6 的最後 5 位,從而允許第一個片段。

... 4 & 0x3FFF = 0 && ...

最後一次測試:通過 IP 報頭的第一個位元組 ( 型別 ) 。這就是我們必須使用 @ 語法的地方。以 32 位字表示的 ip 報頭 (Ihl) 的長度儲存在 ip 報頭本身的位元組 的右側。

... 0 >> 22 & 0x3C @ 0 >> 24 = 0"

表示讀取位元組 0-3 >22 表示向右移動 22 位。移動 24 位將給出第一個位元組,所以只有 22 位是 4 倍,再加上幾個位元。 &3C 然後刪除右邊的兩個額外位和第一個位元組的前四位。例如,如果 IHL=5 ,則 IP 報頭長 20(4x5) 位元組。在本例中,位元組 0-1 ( 二進位制 )xxx0101 yzzzz >22 10 位值 xxx0101yy &3C 010100 @ 意味著將這個數字用作資料包中的新偏移量,並從那裡開始讀取四個位元組。這是 ICMP 有效負載的前 4 個位元組,其中 位元組是 ICMP 型別。因此,我們只需將值 24 移到右側,除去第一個位元組之外的所有位元組,並將結果與 進行比較。

 

TCP 有效負載位元組 8-12 1 2 5 8 中的任意一個。首先,我們測試資料包是否是 TCP 資料包 ( 類似於 ICMP)

--u32 "6 & 0xFF = 6 && ...

接下來,測試它不是一個片段 ( 與上面相同 )

... 0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 = 1,2,5,8"

如上面所示, 0>22&3C 計算 IP 報頭中的位元組數。 @ 使這成為資料包中的新偏移量,這是 TCP 報頭的開始。 TCP 頭的長度 ( 同樣以 32 位字表示 ) TCP 12 位元組的左半部分。 12>26&3C 以位元組計算這個長度 ( 類似於之前的 IP 報頭 ) “@” 使其成為新的偏移量,這是 TCP 有效負載的開始。最後, 8 讀取有效負載的位元組 8-12 = 檢查結果是否為 1 2 5 8 中的任何一個。

42 udp

如果指定了“ --protocol udp ”,則可以使用這些擴充套件。它提供了以下選項:

[!] --source-port,--sport  port [: port ] ,源埠或埠範圍規範。

[!] --destination-port , --dport port [: port ] ,目的埠或埠範圍規範。

43 unclean

此模組不需要任何選項,而是嘗試匹配看起來格式錯誤或不尋常的資料包。

 

4 、目標擴充套件

1 AUDIT

此目標允許為到達目標的資料包建立稽核記錄。它可以用來記錄接受、丟棄和拒絕的資料包。

--type {accept|drop|reject} ,設定審計記錄型別。

iptables -N AUDIT_DROP

iptables -A AUDIT_DROP -j AUDIT --type drop

iptables -A AUDIT_DROP -j DROP

2 CHECKSUM

這個目標允許有選擇地處理損壞的/舊的應用程式。它只能在mangle表上使用。

--checksum-fill ,計算並填寫缺少校驗和的資料包中的校驗和。如果您需要處理諸如dhcp客戶端之類的舊應用程式,這些應用程式不能很好地處理校驗和解除安裝,但不希望在裝置中禁用校驗和解除安裝,這一點尤其有用。

3 CLASSIFY

該模組允許您設定skb-> priority( 從而將資料包分類為特定的CBQ類)。

--set-class major : minor ,設定主類和次要類值。即使沒有提供0x字首,這些值也總是被解釋為十六進位制。

4 CLUSTERIP

此模組允許您配置一個簡單的節點叢集,這些節點共享特定的IP和MAC地址,而無需在其前面顯式負載均衡器。連線是靜態地分佈在此叢集中的節點之間的。

--new ,建立一個新的叢集IP。對於給定的叢集IP,始終必須在第一條規則上設定這一項。

--hashmode mode ,指定hash模式,可以是: sourceip sourceip-sourceport sourceip-sourceport-destport

--clustermac mac ,指定叢集IP MAC地址。必須是鏈路層多播地址。

--total-nodes num ,該叢集中節點總數的數目。

--local-node num ,此叢集中的本地節點號。

--hash-init rnd ,指定用於雜湊初始化的隨機種子。

5 CONNMARK

此模組設定與連線關聯的netfilter標記值。標記寬32位。

--set-xmark value [/ mask ] ,將mask定義的為歸零,value定義的位和ctmark異或。

--save-mark [ --nfmask nfmask ] [--ctmask ctmask] ,使用給定的掩碼將資料包標記(Nfmark)複製到連線標記(Ctmark)。新的nfmark值確定如下:

ctmark = (ctmark & ~ctmask) ^ (nfmark & nfmask)

例如,ctmask定義要清除哪些位,nfmask中要將哪些nfmark為和ctmark進行異或。預設為0xFFFFFFFF。

--restore-mark [ --nfmask nfmask] [--ctmask ctmask] ,只有在mangle表中使用。

--and-mark bits ,ctmark和bits進行與操作,助記符:--set-xmark 0/invbits。

--or-mark bits ,ctmark和bits進行或操作,助記符:--set-xmark bits/bits。

--xor-mark bits ,ctmark和bits進行異或操作,助記符:--set-xmark bits/0。

--set-mark value [/ mask ] ,置位連線標記。如果指定了掩碼,則只修改掩碼中設定的位。

--save-mark [ --mask mask ] ,將nfmark複製到ctmark。如果指定了掩碼,則只複製這些位。

--restore-mark [ --mask mask ] ,將cctmark複製到nfmark。如果指定了掩碼,則僅複製這些位。這在mangle表中是有效的

6 CONNSECMARK

此模組將安全標記從資料包複製到連線(如果沒有標記),從連線複製回資料包(也只有在未標記的情況下)。通常與SECMARK一起使用,它僅在mangle表中有效。

--save ,如果資料包有安全標記,如果未標記連線,請將其複製到連線中。

--restore ,如果資料包沒有安全標記,而連線有安全標記,則將安全標記從連線複製到資料包。

7 DNAT

此目標僅在 nat 表、PREROUTING和OUTPUT鏈以及僅從這些鏈呼叫的使用者定義鏈中有效。它指定應修改資料包的目標地址(並且此連線中的所有未來資料包也將被破壞),並且應該停止檢查規則。它需要以下一種選擇:

--to-destination [ ipaddr ][- ipaddr ][: port [- port ]] ,它可以指定單個新的目標IP地址、包含的IP地址範圍以及可選的埠範圍(只有在規則還指定“ -p tcp ”或“ -p udp ”時才有效)。如果未指定埠範圍,則永遠不會修改目標埠。如果未指定IP地址,則只修改目標埠。

--random ,如果使用選項“--random”,則埠對映將是隨機的(核心>=2.6.22)。

--persistent ,為每個連線提供相同的源/目標地址。這取代了同一個目標。對持久對映的支援可從2.6.29-Rc2中獲得。

8 DSCP

此目標允許在IPv 4資料包的TOS報頭中更改DSCP位的值。由於這操作一個資料包,它只能在mangle表中使用。

--set-dscp value ,將DSCP欄位設定為數字值(可以是十進位制或十六進位制)。

--set-dscp-class class ,將DSCP欄位設定為DiffServ類。

9 ECN

這個目標允許有選擇地圍繞已知的 ECN 黑洞工作。它只能在mangle表中使用。

--ecn-tcp-remove ,從TCP報頭中刪除所有ECN位。當然,它只能與“ -p tcp ”一起使用。

10 LOG

開啟匹配資料包的核心日誌記錄。當將此選項設定為規則時,Linux核心將通過核心日誌(在其中可以使用dmesg或sy d(8)讀取)列印所有匹配資料包(如大多數IP報頭欄位)上的一些資訊。這是一個“非終止目標”,即在下一個規則中繼續進行規則遍歷。因此,如果要記錄拒絕的資料包,請使用兩個具有相同匹配條件的單獨規則,首先使用目標日誌,然後刪除(或拒絕)。

--log-level level ,日誌記錄級別。

--log-prefix prefix ,字首為指定 prefix 的日誌訊息;長度可達29個字母,用於區分日誌中的訊息。

--log-tcp-sequence ,記錄TCP序列號。如果使用者可以讀取日誌,則這是一種安全風險。

--log-tcp-options ,從TCP資料包報頭log選項

--log-ip-options ,從IP資料包報頭log選項

--log-uid ,記錄生成資料包的程式的userid

11 MARK

此目標用於設定與資料包關聯的Netfilter標記值。目標只能在mangle表中使用。例如,它可以與基於fwmark的路由一起使用(需要iucte 2)。標記欄位寬32位。

--set-xmark value [/ mask ] ,將掩碼和XOR值給出的位歸零到資料包標記(“nfmark”)中。如果省略掩碼,則假定為0xFFFFFFFF。

--set-mark value [/ mask ] ,將掩碼和OR值給出的位歸零到資料包標記(“nfmark”)中。如果省略掩碼,則假定為0xFFFFFFFF。

--and-mark bits ,將nfmark和 bits 進行與操作,助記符: --set-xmark   0/invbits。

--or-mark bits ,將nfmark和 bits 進行或操作,助記符: --set-xmark   bits/bits。

--xor-mark bits ,將nfmark和 bits 進行異或操作,助記符: --set-xmark   bits/0。

12 MASQUERADE

此目標僅在NAT表中的POSTROUTING鏈中有效。它應該只用於動態分配的IP(撥號)連線:如果您有一個靜態IP地址,則應該使用SNAT目標。偽裝相當於指定一個對映到資料包將要輸出的介面的IP地址,但也會導致連線在介面下降時被遺忘。當下一個撥號不太可能具有相同的介面地址時,這是正確的行為(因此,任何已建立的連線無論如何都會丟失)。只有一個選擇:

--to-ports port [- port ] ,這指定了要使用的一系列源埠,覆蓋預設的SNAT源埠-選擇啟發式(見上文)。

--random ,隨機化源埠對映,如果使用選項-隨機,則埠對映將是隨機的(核心>=2.6.21)。

13 MIRROR

這是一個實驗演示目標,它反轉IP報頭中的源欄位和目標欄位,並重新傳輸資料包。它僅在輸入鏈、前向鏈和PREROUTING鏈以及僅從這些鏈呼叫的使用者定義鏈中有效。請注意,任何資料包過濾鏈、連線跟蹤或NAT都看不到傳出資料包,以避免迴圈和其他問題。

14 NETMAP

此目標允許您靜態地將整個地址網路對映到另一個地址網路。它只能從NAT表中的規則中使用。

--to address [/ mask ] ,要對映到的網路地址。生成的地址將以下方式構造:掩碼中的所有位都是從新的“地址”中填充的。掩碼中的所有零位都是從原始地址填充的。

15 NFLOG

此目標提供匹配資料包的日誌記錄。當為規則設定此目標時,Linux核心將資料包傳遞給載入的日誌後端以記錄資料包。這通常與nfnetlink_log作為日誌後端結合使用,後者將通過NetLink套接字將資料包多播到指定的多播組。一個或多個使用者空間程式可以訂閱組以接收分組。與日誌一樣,這是一個不終止的目標,即在下一個規則中繼續進行規則遍歷。

--nflog-group nlgroup ,資料包所在的NetLink組(1~2^32-1)(僅適用於nfnetlink_log)。預設值為0。

--nflog-prefix prefix ,一個字首字串,包含在日誌訊息中,長度可達64個字元,用於區分日誌中的訊息。

--nflog-range size ,要複製到使用者空間的位元組數(僅適用於nfnetlink_log)。nfnetlink_log例項可以指定它們自己的範圍,此選項將重寫它。

--nflog-threshold size ,在將資料包傳送到使用者空間(僅適用於nfnetlink_log)之前,要在核心中排隊的資料包數。較高的值會減少每個資料包的開銷,但會增加延遲,直到資料包到達使用者空間為止。預設值為1。

16 NFQUEUE

此目標是 QUEUE 目標的擴充套件。與 QUEUE 相反,它允許您將資料包放入任何特定佇列中,該佇列由其16位佇列號標識。它只能與核心版本2.6.14或更高版本一起使用,因為它需要nfnetlink_Queue核心支援。佇列平衡選項在Linux2.6.31中新增,佇列旁路在2.6.39中新增。

--queue-num value ,這指定要使用的佇列號。有效佇列號為0至65535。預設值為0。

--queue-balance value : value ,這指定要使用的佇列範圍。然後在給定的佇列中平衡資料包。

--queue-bypass ,預設情況下,如果在NFQUEUE上沒有使用者空間程式偵聽,那麼所有要排隊的資料包都會被丟棄。當使用此選項時,將悄悄繞過NFQUEUE規則。包將轉到下一個規則。

17 NOTRACK

此目標禁用與該規則匹配的所有資料包的連線跟蹤,只能在 raw 表中使用。

18 RATEEST

RATEEST 目標收集統計資料,執行速率估計計算,並將結果儲存起來,以便使用最優匹配進行以後的評估。

--rateest-name name ,將匹配的資料包計數到按名稱引用的池中,這是可以自由選擇的。

--rateest-interval amount {s|ms|us} ,速率測量間隔,以秒、毫秒或微秒為單位。

--rateest-ewmalog value ,速率測量平均時間常數。

19 )REDIRECT

此目標僅在NAT表、PREROUTING和輸出鏈以及僅從這些鏈呼叫的使用者定義鏈中有效。它將資料包重定向到機器本身,方法是將目標IP更改為傳入介面的主地址(本地生成的資料包對映到127.0.0.1地址)。

--to-ports port[-port] ,這將指定要使用的目的埠或埠範圍:否則,目標埠將永遠不會更改。只有配合選項“-p tcp”和“-p udp”才有用。

--random ,如果使用選項“--random”,則埠對映將是隨機的(核心>=2.6.22)

20 REJECT

這用於響應匹配的資料包傳送錯誤資料包:否則,它等同於丟棄,因此它是一個終止目標,結束規則遍歷。此目標僅在輸入、前向和輸出鏈以及使用者定義的僅從這些鏈呼叫的鏈中有效。以下選項控制返回的錯誤資料包的性質:

--reject-with type ,type可以是icmp-net-unreachable, icmp-host-unreachabl,icmp-port-unreachable,icmp-proto-unreachable,icmp-net-prohibited,icmp-host-prohibited,icmp-admin-prohibited

21 SAME

類似於 SNAT/DNAT ,取決於鏈:它接受一系列地址“--to 1.2.3.4-1.2.3.7”。為每個連線提供相同的源/目標地址。

--to ipaddr [- ipaddr ] ,要將源對映到的地址。可以為多個範圍指定不止一次。

--nodst ,在選擇新的源-ip時,不要在計算中使用目標-ip。

--random ,埠對映將強制隨機化,以避免基於埠預測的攻擊(核心>=2.6.21)。

22 SECMARK

這用於設定與資料包關聯的安全標記值,以供安全子系統(如SELinux)使用。它只在殘缺表中有效。標記寬32位。

--selctx security_context

23 SET

此模組從ip集中新增和/或刪除可由ipset(8)定義的項。

--add-set setname flag [, flag ...] ,將資料包的地址/埠新增到集合中

--del-set setname flag [, flag ...] ,從集合中刪除資料包的地址/埠

24 SNAT

此目標僅在NAT表中的POSTROUTING鏈中有效。它指定應該修改資料包的源地址(並且這個連線中的所有未來資料包也將被破壞),並且應該停止檢查規則。它需要一種選擇

--to-source ipaddr [- ipaddr ][: port [- port ]] ,它可以指定單個新的源IP地址、包含的IP地址範圍以及可選的埠範圍(只有在規則還指定-p TCP或-p UDP時才有效)。如果未指定埠範圍,則512以下的源埠將對映到512以下的其他埠:512和1023之間的埠將對映到1024以下的埠,而其他埠將對映到1024或以上埠。如有可能,不會更改埠。

--random ,如果使用了選項“ --random ”,則埠對映將被隨機化(核心>=2.6.21)。

--persistent ,為每個連線提供相同的源/目標地址。這取代了同一個目標。對持久對映的支援可從2.6.29-Rc2中獲得

25 TCPMMS

此目標允許更改TCP SYN資料包的MSS值,以控制該連線的最大大小(通常將其限制為輸出介面的MTU減去40(ipv4)或者減去60(ipv6)。當然,它只能與-p TCP一起使用。它僅在mangle表中有效。

該目標用於克服阻礙“ICMP碎片需要”或“ICMPv 6資料包太大”資料包的犯罪行為。這個問題的症狀是,Linux防火牆/路由器的所有功能都很好,但是它背後的機器永遠不能交換大資料包:Web瀏覽器連線,然後掛起沒有收到的資料;小郵件工作正常,但大型電子郵件掛著;SSH工作正常,但scp在初次握手後掛起。

解決辦法:啟用此選項並將規則新增到防火牆配置中,如

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

--set-mss value ,顯式地將MSS選項設定為指定的值。如果資料包的MSS已經低於值,則不會增加(從Linux2.6.25開始),以避免主機依賴適當的MSS出現更多問題

--clamp-mss-to-pmtu ,自動將MSS值夾到(IPv4的PATH_MTU-40;IPv 6的PATH_MTU-60)。

26 TCPOPTSTRIP

此目標將從TCP資料包中刪除TCP選項。(它實際上將以無操作代替。)因此,您需要新增“ -p tcp ”引數。

--strip-options option [, option ...] ,去掉給定的選項。這些選項可以由TCP選項號或符號名稱指定。可以通過使用“ -j TCPOPTSTRIP -h ”呼叫iptable來獲得可識別選項的列表。

27 TOS

此模組在IPv 4報頭中設定服務型別欄位(包括“優先順序”位)或在IPv 6報頭中設定優先順序欄位。注意,TOS與DSCP和ECN共享相同的位。tos目標僅在mangle表中有效。

--set-tos value [/ mask ] ,將掩碼和XOR值給出的位歸零到TOS/Priority欄位中。如果省略掩碼,則假定為0 xff。

--set-tos symbol ,在為IPv4使用TOS目標時,可以指定一個符號名。它暗示了0xFF的掩碼。可以通過使用“ -j TOS -h ”呼叫iptables來獲得已識別的TOS名稱的列表。

--and-tos bits bits 和TOS執行與操作。(助記符用於“--set-tos 0/invbits”,其中inbit是位的二進位制否定。)

--or-tos bits bits 和TOS執行或操作。

--xor-tos bits bits 和TOS執行異或操作。

28 TPROXY

此目標僅在mangle表、PREROUTING鏈和使用者定義鏈中有效,這些鏈僅從該鏈呼叫。它將資料包重定向到本地套接字,而不以任何方式更改資料包報頭。它還可以更改標記值,然後在高階路由規則中使用。它有三個選項:

--on-port port ,這指定要使用的目標埠。這是必需的選項,0表示新的目標埠與原始埠相同。這隻有在規則還指定“ -p tcp “或” -p udp “時才有效。

--on-ip address ,這指定要使用的目標地址。預設情況下,該地址是傳入介面的ip地址。這隻有在規則還指定“ -p tcp “或” -p udp “時才有效。

--tproxy-mark value [/ mask ] ,用給定的值/掩碼標記資料包。這裡的fwmark值集可以被高階路由使用。(透明代理工作所必需的:否則這些資料包將被轉發,這可能不是您想要的。)

29 TRACE

此目標標記Packes,以便核心在遍歷表、鏈、規則時記錄與資料包匹配的每條規則。(日誌記錄需要ipt_log或ip6t_log模組)。資料包以字串字首記錄:“TRACE:tablename:chainname:type:ruenum”,其中type可以是普通規則的“rule”,使用者定義的鏈末尾的隱式規則可以是“return”,內建鏈的策略可以是“policy”。

只能在raw表中使用。

 

30 TTL

這用於修改IPv 4 TTL頭欄位。TTL欄位確定資料包可以遍歷多少跳(路由器),直到超過生存時間。設定或遞增ttl欄位可能非常危險,因此應不惜任何代價加以避免。不要在離開本地網路的資料包上設定或增加值!

--ttl-set value ,設定TTL值為 value

--ttl-dec value ,減少TTL的值 value 次。

--ttl-inc value ,增加TTL的值 value 次。

 

31 ULOG

此目標提供匹配資料包的使用者空間日誌記錄。當為規則設定此目標時,Linux核心將通過NetLink套接字對此資料包進行多播。然後,一個或多個使用者空間程式可以訂閱各種多播組並接收分組。與日誌一樣,這是一個“不終止的目標”,即在下一個規則中繼續進行規則遍歷。

--ulog-nlgroup nlgroup ,這指定了將資料包傳送到的netlink組(1-32)。預設值為1

--ulog-prefix prefix ,字首為指定字首的日誌訊息;長度可達32個字元,用於區分日誌中的訊息。

--ulog-cprange size ,要複製到使用者空間的位元組數。值為0總是複製整個資料包,而不考慮其大小。預設值為0

--ulog-qthreshold size ,核心中要排隊的資料包數。例如,將此值設定為10,在核心內累加10個資料包,並將它們作為一個NetLink多部分訊息傳輸到使用者空間。預設值為1(用於向後相容性)

 

5 、例項

1 )顯示filter表的記錄 

[root@localhost ~]#  iptables -t filter –L                // 顯示指定表的記錄

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 

ACCEPT     icmp --  anywhere             anywhere                  

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 

ACCEPT     icmp -- anywhere            anywhere            

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination 

2 )禁止埠135的tcp資料包

[root@localhost ~]#  iptables -t filter -A INPUT -p tcp --dport 135 -j DROP          // 新增記錄,忽略 135 埠的 tcp 資料包

 

[root@localhost ~]#  iptables –L         // 檢視錶,已經加入規則

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 

DROP       tcp  --  anywhere             anywhere            tcp dpt:epmap 

3 )禁止目標地址訪問本機

[root@localhost ~]#  iptables -A INPUT -s 192.168.1.110 -j DROP                           // 禁止 110 地址訪問本機

[root@localhost ~]#  iptables -L |grep DROP                                                  // 檢視 filter 表,已經新增記錄

DROP       tcp  --  anywhere             anywhere            tcp dpt:epmap 

DROP       all  --  192.168.1.110        anywhere   

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29270124/viewspace-2611838/,如需轉載,請註明出處,否則將追究法律責任。

相關文章