中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-11 18:34:44 來源:ITPUB博客 閱讀:253 作者:一生有你llx 欄目:建站服務器

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 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 eth3 -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 mark ! --mark 0xffff -j DROP

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

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

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

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

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

arptables -A INPUT -i eth2 --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   eth3  --h-length  6  -j  mangle  --mangle-mac-s 01:00:5e:00:01:02

arptables -A INPUT -i eth3 --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   

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大同市| 当雄县| 东阳市| 福泉市| 灵山县| 和硕县| 赣榆县| 无锡市| 津南区| 巴塘县| 怀远县| 鄂托克旗| 乌恰县| 新兴县| 阿尔山市| 巧家县| 鄱阳县| 墨脱县| 汶上县| 建水县| 寻甸| 佛学| 宣汉县| 明星| 兴城市| 台前县| 枝江市| 普洱| 芦山县| 桂阳县| 浠水县| 岳阳市| 山丹县| 新兴县| 洪洞县| 景宁| 城口县| 大邑县| 大同县| 犍为县| 阜南县|