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

iptablesnode

      iptables指令用來設置Linux內核的ip過濾規則以及管理nat功能。iptables用於在Linux內核中設置、維護和檢查IPv4數據包過濾規則表。能夠定義幾個不一樣的表。每一個表包含許多內置鏈,也可能包含用戶定義的鏈。每一個鏈都是一個規則列表,能夠匹配一組數據包。每條規則都指定如何處理匹配的數據包。這被稱爲「目標」,它多是跳轉到同一表中的用戶定義鏈。shell

     此命令的適用範圍: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 rulenumapp

     iptables [-t table]  -S  [chain [rulenum]]負載均衡

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

     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之間。

#每一個客戶端主機容許2telnet鏈接

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引用,所以將參數括在引號中是個好主意。

例子代碼

匹配總長度>=256IP數據包。IP報頭包含一個以字節2-3爲單位的總長度字段。以及使用0xFFFF(給定字節2-3),並測試它是否在[0x1000xFFF]範圍內。

--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>2210位值xxx0101yy&3C010100@意味着將這個數字用做數據包中的新偏移量,並從那裏開始讀取四個字節。這是ICMP有效負載的前4個字節,其中0字節是ICMP類型。所以,咱們只需將值24移到右側,除去第一個字節以外的全部字節,並將結果與0進行比較。

 

TCP有效負載字節8-121258中的任意一個。首先,咱們測試數據包是不是TCP數據包(相似於ICMP)

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

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

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

如上面所示,0>22&3C計算IP報頭中的字節數。@使這成爲數據包中的新偏移量,這是TCP報頭的開始。TCP頭的長度(一樣以32位字表示)TCP12字節的左半部分。12>26&3C以字節計算這個長度(相似於以前的IP報頭)「@」使其成爲新的偏移量,這是TCP有效負載的開始。最後,8讀取有效負載的字節8-12=檢查結果是否爲1258中的任何一個。

     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模式,能夠是:sourceipsourceip-sourceportsourceip-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-tosbitsbits和TOS執行與操做。(助記符用於「--set-tos 0/invbits」,其中inbit是位的二進制否認。)

     --or-tosbitsbits和TOS執行或操做。

     --xor-tosbitsbits和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   

相關文章
相關標籤/搜索