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

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 chaintarget

爲指定的鏈設置策略

-E | --rename-chain old new

重命名鏈

-h

顯示幫助信息

參數

說明

[!] –p | --protocol protocol

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

[!] –s | --sourceaddress[/mask][,…

源地址

[!] –d

--destinationaddress[/mask][,…

目標

-j | --jump

指定跳轉的目標

-g | --goto chain

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

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

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

-o | --out-interfacename

指定數據包離開的網絡接口

[!] –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-nodesnum,設置集羣中的總節點數。

[!] --cluster-local-nodenum,設置本地節點編號ID。

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

--cluster-hash-seedvalue,設置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個字符)。

--commentcomment

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

5)connbytes

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

[!] --connbytesfrom[: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-aboven,如果現有連接的數目大於n,則匹配

--connlimit-maskprefix_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目標進行設置)。

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

8)conntrack

此模塊與連接跟蹤結合時,允許訪問此數據包/連接的連接跟蹤狀態。

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

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

[!] --ctorigsrcaddress[/mask]

[!] --ctorigdstaddress[/mask]

[!] --ctreplsrcaddress[/mask]

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

[!] --ctorigsrcportport

[!] --ctorigdstportport

[!] --ctreplsrcportport

[!] --ctrepldstportport,匹配original/reply、source/destination端口(TCP/UDP/等)或GRE鍵

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

[!] --ctexpiretime[: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,--sportport[:port]

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

[!] --dccp-typesmask,當DCCP數據包類型爲“掩碼”之一時匹配。“掩碼”是以逗號分隔的數據包類型列表。類型可以是:REQUEST、RESPONSE、DATA、ACK、DATAACK、CLOSEREQ、CLOSE、RESET、SYNC、SYNCACK、INVALID。

[!] --dccp-optionnumber,匹配如果設置DCP選項

10)dscp

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

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

[!] --dscp-classclass,匹配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匹配。

[!] --espspispi[: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-uptoamount[/second|/minute|/hour|/day],如果速率低於或等於amount/quantum,則匹配。它被指定爲一個數字,帶有可選的時間量子後綴;默認值是3/小時。

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

--hashlimit-burstamount,要匹配的數據包的最大初始數量:當未達到上述指定的限制時,該數目將被重新充電一次,最多可達到此數目;默認值爲5。

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

--hashlimit-srcmaskprefix,當使用“--hashlimit-mode“時,所遇到的所有源地址都將根據給定的前綴長度進行分組,因此創建的子網將受到哈希限制。前綴必須介於(包括)0和32之間。

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

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

--hashlimit-htable-sizebuckets,哈希表的桶數。

--hashlimit-htable-maxentries,散列中的最大項。

--hashlimit-htable-expiremsec,在散列條目過期多少毫秒之後。

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

14)helper

此模塊匹配與特定連接輔助程序相關的數據包。

[!] --helperstring,匹配與指定的連接輔助程序相關的數據包。對於默認端口上與ftp會話相關的數據包,字符串可以是“ftp”。對於其他端口,將-portnr附加到值,即。“ftp-2121”

15)icmp

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

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

16)iprange

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

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

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

17)length

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

[!] --lengthlength[:length]

18)limit

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

--limitrate[/second|/minute|/hour|/day],最大平均匹配率:指定爲數字,帶有可選的‘/秒’、‘/分鐘’、‘/小時’或‘/日’後綴;默認值爲3/小時

--limit-burstnumber,要匹配的數據包的最大初始數量:當未達到上述指定的限制時,此數字將被重新充電一次,最多可達到此數目;默認值爲5。

19)mac

[!] --mac-sourceaddress,匹配源MAC地址。它必須是XX:XX:XX:XX:XX:XX格式。請注意,這隻對來自以太網設備並進入PREROUTING、FORWARD或INPUT鏈的數據包有意義。

20)mark

此模塊匹配與數據包關聯的netfilter標記字段(可以使用下面的標記目標設置該標記)。

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

21)multiport

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

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

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

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

22)owner

對於本地生成的數據包,此模塊試圖匹配數據包創建者的各種特徵。此匹配僅在OUTPUT鏈和POSTROUTING鏈中有效。轉發的數據包沒有任何與其相關聯的套接字。來自內核線程的數據包確實有一個套接字,但通常沒有所有者。

[!] --uid-ownerusername

[!] --uid-owneruserid[-userid],如果數據包套接字的文件結構(如果有)是給定用戶擁有的,則匹配。您還可以指定數字UID或UID範圍。

[!] --gid-ownergroupname

[!] --gid-ownergroupid[-groupid],如果數據包套接字的文件結構屬於給定組,則匹配。您還可以指定數字GID或GID範圍。

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

23)physdev

該模塊在橋端口輸入和輸出設備上匹配,這些輸入和輸出設備被奴役到橋接設備上。此模塊是支持透明橋接IP防火牆的基礎結構的一部分,僅適用於2.5.44版本以上的內核版本。

[!] --physdev-inname,接收數據包的橋端口的名稱(僅用於INPUT、FORWARD和PREROUTING鏈的數據包)。如果接口名以“+“結尾,則以此名稱開頭的任何接口都將匹配。如果數據包沒有通過橋接設備到達,則此數據包將與此選項不匹配,除非“!”被利用了。

[!] --physdev-outname,要發送數據包的橋接端口的名稱(用於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,選擇是否匹配確切的策略,或者如果策略的任何規則與給定的策略匹配,則選擇匹配。

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

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

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

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

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

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

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

26)quota

通過減少每個數據包的字節計數器來實現網絡配額。

--quotabytes,配額(以字節爲單位)。

27)rateest

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

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

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

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

--rateest1-bpsvalue,

--rateest2-bpsvalue,每秒比較字節

--rateest1-ppsvalue,

--rateest2-ppsvalue,每秒比較包

[!] --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這樣的動態路由協議。

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

29)recent

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

--namename,指定要用於命令的列表。如果沒有指定名稱,則將使用默認名稱。

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

--rsource,匹配/保存最近列表中每個數據包的源地址。這是默認的

--rdest,匹配/保存最近列表中每個數據包的目標地址

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

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

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

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

--hitcounthits,此選項必須與“--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,散列表大小。0意味着根據ip_list_tot(默認值:512)計算它。

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

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

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

30)sctp

[!] --source-port,--sportport[: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-setsetnameflag[,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

當與連接跟蹤相結合時,此模塊允許訪問此數據包的連接跟蹤狀態。

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

34)statistic

該模塊基於一定的統計條件對數據包進行匹配。它支持使用“--mode”選項設置的兩種不同的模式。

--modemode,設置匹配規則的匹配模式,所支持的模式爲隨機模式和nth模式。

--probabilityp,將隨機匹配數據包的概率從0設置爲1。它只適用於隨機模式。

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

--packetp,爲nth模式設置初始計數器值(0<=p<=n-1,默認值0)

35)string

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

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

--fromoffset,設置它開始尋找匹配的偏移量。如果未通過,默認爲0。

--tooffset,設置它開始尋找匹配的偏移量。如果未通過,則默認爲數據包大小。

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

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

36)tcp

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

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

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

[!] --tcp-flagsmaskcomp,匹配指定的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-optionnumber,如果設置了tcp選項就匹配。

37)tcpmss

這與TCP標頭的TCPMSS(最大段大小)字段匹配。您只能在TCP SYN或SYN/ACK數據包上使用這一點,因爲MSS只在連接啓動時的TCP握手期間協商。

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

38)time

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

--datestartYYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--datestopYYYY[-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。

--timestarthh:mm[:ss]

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

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

[!] --weekdaysday[,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-eqttl,如果和給定的ttl值相等,那麼就匹配。

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

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

41)u32

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

[!] --u32tests,該參數相當於下面描述的一種小型語言中的程序。

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類型0。首先測試它是否是ICMP數據包,真IP字節9(協議)=1

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

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

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

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

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

前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個字節,其中0字節是ICMP類型。因此,我們只需將值24移到右側,除去第一個字節之外的所有字節,並將結果與0進行比較。

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,--dportport[: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-classmajor:minor,設置主類和次要類值。即使沒有提供0x前綴,這些值也總是被解釋爲十六進制。

4)CLUSTERIP

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

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

--hashmodemode,指定hash模式,可以是:sourceip,sourceip-sourceport,sourceip-sourceport-destport。

--clustermacmac,指定集羣IP MAC地址。必須是鏈路層多播地址。

--total-nodesnum,該集羣中節點總數的數目。

--local-nodenum,此集羣中的本地節點號。

--hash-initrnd,指定用於哈希初始化的隨機種子。

5)CONNMARK

此模塊設置與連接關聯的netfilter標記值。標記寬32位。

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

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

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

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

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

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

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

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

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

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

--restore-mark[--maskmask],將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-dscpvalue,將DSCP字段設置爲數字值(可以是十進制或十六進制)。

--set-dscp-classclass,將DSCP字段設置爲DiffServ類。

9)ECN

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

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

10)LOG

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

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

--log-prefixprefix,前綴爲指定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-xmarkvalue[/mask],將掩碼和XOR值給出的位歸零到數據包標記(“nfmark”)中。如果省略掩碼,則假定爲0xFFFFFFFF。

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

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

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

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

12)MASQUERADE

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

--to-portsport[-port],這指定了要使用的一系列源端口,覆蓋默認的SNAT源端口-選擇啓發式(見上文)。

--random,隨機化源端口映射,如果使用選項-隨機,則端口映射將是隨機的(內核>=2.6.21)。

13)MIRROR

這是一個實驗演示目標,它反轉IP報頭中的源字段和目標字段,並重新傳輸數據包。它僅在輸入鏈、前向鏈和PREROUTING鏈以及僅從這些鏈調用的用戶定義鏈中有效。請注意,任何數據包過濾鏈、連接跟蹤或NAT都看不到傳出數據包,以避免循環和其他問題。

14)NETMAP

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

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

15)NFLOG

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

--nflog-groupnlgroup,數據包所在的NetLink組(1~2^32-1)(僅適用於nfnetlink_log)。默認值爲0。

--nflog-prefixprefix,一個前綴字符串,包含在日誌消息中,長度可達64個字符,用於區分日誌中的消息。

--nflog-rangesize,要複製到用戶空間的字節數(僅適用於nfnetlink_log)。nfnetlink_log實例可以指定它們自己的範圍,此選項將重寫它。

--nflog-thresholdsize,在將數據包發送到用戶空間(僅適用於nfnetlink_log)之前,要在內核中排隊的數據包數。較高的值會減少每個數據包的開銷,但會增加延遲,直到數據包到達用戶空間爲止。默認值爲1。

16)NFQUEUE

此目標是QUEUE目標的擴展。與QUEUE相反,它允許您將數據包放入任何特定隊列中,該隊列由其16位隊列號標識。它只能與內核版本2.6.14或更高版本一起使用,因爲它需要nfnetlink_Queue內核支持。隊列平衡選項在Linux2.6.31中添加,隊列旁路在2.6.39中添加。

--queue-numvalue,這指定要使用的隊列號。有效隊列號爲0至65535。默認值爲0。

--queue-balancevalue:value,這指定要使用的隊列範圍。然後在給定的隊列中平衡數據包。

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

17)NOTRACK

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

18)RATEEST

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

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

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

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

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-withtype,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”。爲每個連接提供相同的源/目標地址。

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

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

--random,端口映射將強制隨機化,以避免基於端口預測的***(內核>=2.6.21)。

22)SECMARK

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

--selctxsecurity_context

23)SET

此模塊從ip集中添加和/或刪除可由ipset(8)定義的項。

--add-setsetnameflag[,flag...],將數據包的地址/端口添加到集合中

--del-setsetnameflag[,flag...],從集合中刪除數據包的地址/端口

24)SNAT

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

--to-sourceipaddr[-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-mssvalue,顯式地將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-optionsoption[,option...],去掉給定的選項。這些選項可以由TCP選項號或符號名稱指定。可以通過使用“-j TCPOPTSTRIP -h”調用iptable來獲得可識別選項的列表。

27)TOS

此模塊在IPv 4報頭中設置服務類型字段(包括“優先級”位)或在IPv 6報頭中設置優先級字段。注意,TOS與DSCP和ECN共享相同的位。tos目標僅在mangle表中有效。

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

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

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

--or-tosbits,bits和TOS執行或操作。

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

28)TPROXY

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

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

--on-ipaddress,這指定要使用的目標地址。默認情況下,該地址是傳入接口的ip地址。這只有在規則還指定“-p tcp“或”-p udp“時纔有效。

--tproxy-markvalue[/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-setvalue,設置TTL值爲value。

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

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

31)ULOG

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

--ulog-nlgroupnlgroup,這指定了將數據包發送到的netlink組(1-32)。默認值爲1

--ulog-prefixprefix,前綴爲指定前綴的日誌消息;長度可達32個字符,用於區分日誌中的消息。

--ulog-cprangesize,要複製到用戶空間的字節數。值爲0總是複製整個數據包,而不考慮其大小。默認值爲0

--ulog-qthresholdsize,內核中要排隊的數據包數。例如,將此值設置爲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

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