iptables中文Man- -
總覽
用iptables -ADC 來(lái)指定鏈的規則,-A添加 -D刪除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通過(guò)規則的順序指定
iptables中文Man
總覽
用iptables -ADC 來(lái)指定鏈的規則,-A添加 -D刪除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通過(guò)規則的順序指定
iptables -D chain rule num[option]
刪除指定規則
iptables -[LFZ] [chain][option]
用iptables -LFZ 鏈名 [選項]
iptables -[NX] chain
用 -NX 指定鏈
iptables -P chain target[options]
指定鏈的默認目標
iptables -E old-chain-name new-chain-name
-E 舊的鏈名 新的鏈名
用新的鏈名取代舊的鏈名
說(shuō)明
Iptalbes 是用來(lái)設置、維護和檢查L(cháng)inux內核的IP包過(guò)濾規則的。
可以定義不同的表,每個(gè)表都包含幾個(gè)內部的鏈,也能包含用戶(hù)定義的鏈。每個(gè)鏈都是一個(gè)規則列表,對對應的包進(jìn)行匹配:每條規則指定應當如何處理與之相匹配的包。這被稱(chēng)作‘target‘(目標),也可以跳向同一個(gè)表內的用戶(hù)定義的鏈。
TARGETS
防火墻的規則指定所檢查包的特征,和目標。如果包不匹配,將送往該鏈中下一條規則檢查;如果匹配,那么下一條規則由目標值確定.該目標值可以是用戶(hù)定義的鏈名,或是某個(gè)專(zhuān)用值,如ACCEPT[通過(guò)], DROP[刪除], QUEUE[排隊], 或者 RETURN[返回]。
ACCEPT 表示讓這個(gè)包通過(guò)。DROP表示將這個(gè)包丟棄。QUEUE表示把這個(gè)包傳遞到用戶(hù)空間。RETURN表示停止這條鏈的匹配,到前一個(gè)鏈的規則重新開(kāi)始。如果到達了一個(gè)內建的鏈(的末端),或者遇到內建鏈的規則是RETURN,包的命運將由鏈準則指定的目標決定。
TABLES
當前有三個(gè)表(哪個(gè)表是當前表取決于內核配置選項和當前模塊)。
-t table
這個(gè)選項指定命令要操作的匹配包的表。如果內核被配置為自動(dòng)加載模塊,這時(shí)若模塊沒(méi)有加載,(系統)將嘗試(為該表)加載適合的模塊。這些表如下: filter,這是默認的表,包含了內建的鏈INPUT(處理進(jìn)入的包)、FORWORD(處理通過(guò)的包)和OUTPUT(處理本地生成的包)。nat, 這個(gè)表被查詢(xún)時(shí)表示遇到了產(chǎn)生新的連接的包,由三個(gè)內建的鏈構成:PREROUTING (修改到來(lái)的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改準備出去的包)。mangle 這個(gè)表用來(lái)對指定的包進(jìn)行修改。它有兩個(gè)內建規則:PREROUTING(修改路由之前進(jìn)入的包)和OUTPUT(修改路由之前本地的包)。
OPTIONS
這些可被iptables識別的選項可以區分不同的種類(lèi)。
COMMANDS
這些選項指定執行明確的動(dòng)作:若指令行下沒(méi)有其他規定,該行只能指定一個(gè)選項.對于長(cháng)格式的命令和選項名,所用字母長(cháng)度只要保證iptables能從其他選項中區分出該指令就行了。
-A -append
在所選擇的鏈末添加一條或更多規則。當源(地址)或者/與 目的(地址)轉換為多個(gè)地址時(shí),這條規則會(huì )加到所有可能的地址(組合)后面。
-D -delete
從所選鏈中刪除一條或更多規則。這條命令可以有兩種方法:可以把被刪除規則指定為鏈中的序號(第一條序號為1),或者指定為要匹配的規則。
-R -replace
從選中的鏈中取代一條規則。如果源(地址)或者/與 目的(地址)被轉換為多地址,該命令會(huì )失敗。規則序號從1開(kāi)始。
-I -insert
根據給出的規則序號向所選鏈中插入一條或更多規則。所以,如果規則序號為1,規則會(huì )被插入鏈的頭部。這也是不指定規則序號時(shí)的默認方式。
-L -list
顯示所選鏈的所有規則。如果沒(méi)有選擇鏈,所有鏈將被顯示。也可以和z選項一起使用,這時(shí)鏈會(huì )被自動(dòng)列出和歸零。精確輸出受其它所給參數影響。
-F -flush
清空所選鏈。這等于把所有規則一個(gè)個(gè)的刪除。
--Z -zero
把所有鏈的包及字節的計數器清空。它可以和 -L配合使用,在清空前察看計數器,請參見(jiàn)前文。
-N -new-chain
根據給出的名稱(chēng)建立一個(gè)新的用戶(hù)定義鏈。這必須保證沒(méi)有同名的鏈存在。
-X -delete-chain
刪除指定的用戶(hù)自定義鏈。這個(gè)鏈必須沒(méi)有被引用,如果被引用,在刪除之前你必須刪除或者替換與之有關(guān)的規則。如果沒(méi)有給出參數,這條命令將試著(zhù)刪除每個(gè)非內建的鏈。
-P -policy
設置鏈的目標規則。
-E -rename-chain
根據用戶(hù)給出的名字對指定鏈進(jìn)行重命名,這僅僅是修飾,對整個(gè)表的結構沒(méi)有影響。TARGETS參數給出一個(gè)合法的目標。只有非用戶(hù)自定義鏈可以使用規則,而且內建鏈和用戶(hù)自定義鏈都不能是規則的目標。
-h Help.
幫助。給出當前命令語(yǔ)法非常簡(jiǎn)短的說(shuō)明。
PARAMETERS
參數
以下參數構成規則詳述,如用于add、delete、replace、append 和 check命令。
-p -protocal [!]protocol
規則或者包檢查(待檢查包)的協(xié)議。指定協(xié)議可以是tcp、udp、icmp中的一個(gè)或者全部,也可以是數值,代表這些協(xié)議中的某一個(gè)。當然也可以使用在 /etc/protocols中定義的協(xié)議名。在協(xié)議名前加上"!"表示相反的規則。數字0相當于所有all。Protocol all會(huì )匹配所有協(xié)議,而且這是缺省時(shí)的選項。在和check命令結合時(shí),all可以不被使用。
-s -source [!] address[/mask]
指定源地址,可以是主機名、網(wǎng)絡(luò )名和清楚的IP地址。mask說(shuō)明可以是網(wǎng)絡(luò )掩碼或清楚的數字,在網(wǎng)絡(luò )掩碼的左邊指定網(wǎng)絡(luò )掩碼左邊"1"的個(gè)數,因此, mask值為24等于255.255.255.0。在指定地址前加上"!"說(shuō)明指定了相反的地址段。標志 --src 是這個(gè)選項的簡(jiǎn)寫(xiě)。
-d --destination [!] address[/mask]
指定目標地址,要獲取詳細說(shuō)明請參見(jiàn) -s標志的說(shuō)明。標志 --dst 是這個(gè)選項的簡(jiǎn)寫(xiě)。
-j --jump target
-j 目標跳轉
指定規則的目標;也就是說(shuō),如果包匹配應當做什么。目標可以是用戶(hù)自定義鏈(不是這條規則所在的),某個(gè)會(huì )立即決定包的命運的專(zhuān)用內建目標,或者一個(gè)擴展(參見(jiàn)下面的EXTENSIONS)。如果規則的這個(gè)選項被忽略,那么匹配的過(guò)程不會(huì )對包產(chǎn)生影響,不過(guò)規則的計數器會(huì )增加。
-i -in-interface [!] [name]
i -進(jìn)入的(網(wǎng)絡(luò ))接口 [!][名稱(chēng)]
這是包經(jīng)由該接口接收的可選的入口名稱(chēng),包通過(guò)該接口接收(在鏈INPUT、FORWORD和PREROUTING中進(jìn)入的包)。當在接口名前使用"!" 說(shuō)明后,指的是相反的名稱(chēng)。如果接口名后面加上"+",則所有以此接口名開(kāi)頭的接口都會(huì )被匹配。如果這個(gè)選項被忽略,會(huì )假設為"+",那么將匹配任意接口。
-o --out-interface [!][name]
-o --輸出接口[名稱(chēng)]
這是包經(jīng)由該接口送出的可選的出口名稱(chēng),包通過(guò)該口輸出(在鏈FORWARD、OUTPUT和POSTROUTING中送出的包)。當在接口名前使用"! "說(shuō)明后,指的是相反的名稱(chēng)。如果接口名后面加上"+",則所有以此接口名開(kāi)頭的接口都會(huì )被匹配。如果這個(gè)選項被忽略,會(huì )假設為"+",那么將匹配所有任意接口。
[!] -f, --fragment
[!] -f --分片
這意味著(zhù)在分片的包中,規則只詢(xún)問(wèn)第二及以后的片。自那以后由于無(wú)法判斷這種把包的源端口或目標端口(或者是ICMP類(lèi)型的),這類(lèi)包將不能匹配任何指定對他們進(jìn)行匹配的規則。如果"!"說(shuō)明用在了"-f"標志之前,表示相反的意思。
OTHER OPTIONS
其他選項
還可以指定下列附加選項:
-v --verbose
-v --詳細
詳細輸出。這個(gè)選項讓list命令顯示接口地址、規則選項(如果有)和TOS(Type of Service)掩碼。包和字節計數器也將被顯示,分別用K、M、G(前綴)表示1000、1,000,000和1,000,000,000倍(不過(guò)請參看-x標志改變它),對于添加,插入,刪除和替換命令,這會(huì )使一個(gè)或多個(gè)規則的相關(guān)詳細信息被打印。
-n --numeric
-n --數字
數字輸出。IP地址和端口會(huì )以數字的形式打印。默認情況下,程序試顯示主機名、網(wǎng)絡(luò )名或者服務(wù)(只要可用)。
-x -exact
-x -精確
擴展數字。顯示包和字節計數器的精確值,代替用K,M,G表示的約數。這個(gè)選項僅能用于 -L 命令。
--line-numbers
當列表顯示規則時(shí),在每個(gè)規則的前面加上行號,與該規則在鏈中的位置相對應。
MATCH EXTENSIONS
對應的擴展
iptables能夠使用一些與模塊匹配的擴展包。以下就是含于基本包內的擴展包,而且他們大多數都可以通過(guò)在前面加上!來(lái)表示相反的意思。
tcp
當 --protocol tcp 被指定,且其他匹配的擴展未被指定時(shí),這些擴展被裝載。它提供以下選項:
--source-port [!] [port[ort]
源端口或端口范圍指定。這可以是服務(wù)名或端口號。使用格式端口:端口也可以指定包含的(端口)范圍。如果首端口號被忽略,默認是"0",如果末端口號被忽略,默認是"65535",如果第二個(gè)端口號大于第一個(gè),那么它們會(huì )被交換。這個(gè)選項可以使用 --sport的別名。
--destionation-port [!] [port:[port]
目標端口或端口范圍指定。這個(gè)選項可以使用 --dport別名來(lái)代替。
--tcp-flags [!] mask comp
匹配指定的TCP標記。第一個(gè)參數是我們要檢查的標記,一個(gè)用逗號分開(kāi)的列表,第二個(gè)參數是用逗號分開(kāi)的標記表,是必須被設置的。標記如下:SYN ACK FIN RST URG PSH ALL NONE。因此這條命令:iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配那些SYN標記被設置而ACK、FIN和RST標記沒(méi)有設置的包。
[!] --syn
只匹配那些設置了SYN位而清除了ACK和FIN位的TCP包。這些包用于TCP連接初始化時(shí)發(fā)出請求;例如,大量的這種包進(jìn)入一個(gè)接口發(fā)生堵塞時(shí)會(huì )阻止進(jìn)入的TCP連接,而出去的TCP連接不會(huì )受到影響。這等于 --tcp-flags SYN, RST, ACK SYN。如果"--syn"前面有"!"標記,表示相反的意思。
--tcp-option [!] number
匹配設置了TCP選項的。
udp
當protocol udp 被指定,且其他匹配的擴展未被指定時(shí),這些擴展被裝載,它提供以下選項:
--source-port [!] [port:[port]
源端口或端口范圍指定。詳見(jiàn) TCP擴展的--source-port選項說(shuō)明。
--destination-port [!] [port:[port]
目標端口或端口范圍指定。詳見(jiàn) TCP擴展的--destination-port選項說(shuō)明。
icmp
當protocol icmp被指定,且其他匹配的擴展未被指定時(shí),該擴展被裝載。它提供以下選項:
--icmp-type [!] typename
這個(gè)選項允許指定ICMP類(lèi)型,可以是一個(gè)數值型的ICMP類(lèi)型,或者是某個(gè)由命令iptables -p icmp -h所顯示的ICMP類(lèi)型名。
mac
--mac-source [!] address
匹配物理地址。必須是XX:XX:XX:XX:XX這樣的格式。注意它只對來(lái)自以太設備并進(jìn)入PREROUTING、FORWORD和INPUT鏈的包有效。
limit
這個(gè)模塊匹配標志用一個(gè)標記桶過(guò)濾器一一定速度進(jìn)行匹配,它和LOG目標結合使用來(lái)給出有限的登陸數.當達到這個(gè)極限值時(shí),使用這個(gè)擴展包的規則將進(jìn)行匹配.(除非使用了"!"標記)
接上--limit rate
最大平均匹配速率:可賦的值有‘/second‘, ‘/minute‘, ‘/hour‘, or ‘/day‘這樣的單位,默認是3/hour。
--limit-burst number
待匹配包初始個(gè)數的最大值:若前面指定的極限還沒(méi)達到這個(gè)數值,則概數字加1.默認值為5
multiport
這個(gè)模塊匹配一組源端口或目標端口,最多可以指定15個(gè)端口。只能和-p tcp 或者 -p udp 連著(zhù)使用。
--source-port [port[, port]
如果源端口是其中一個(gè)給定端口則匹配
--destination-port [port[, port]
如果目標端口是其中一個(gè)給定端口則匹配
--port [port[, port]
若源端口和目的端口相等并與某個(gè)給定端口相等,則匹配。
mark
這個(gè)模塊和與netfilter過(guò)濾器標記字段匹配(就可以在下面設置為使用MARK標記)。
--mark value [/mask]
匹配那些無(wú)符號標記值的包(如果指定mask,在比較之前會(huì )給掩碼加上邏輯的標記)。
owner
此模塊試為本地生成包匹配包創(chuàng )建者的不同特征。只能用于OUTPUT鏈,而且即使這樣一些包(如ICMP ping應答)還可能沒(méi)有所有者,因此永遠不會(huì )匹配。
--uid-owner userid
如果給出有效的user id,那么匹配它的進(jìn)程產(chǎn)生的包。
--gid-owner groupid
如果給出有效的group id,那么匹配它的進(jìn)程產(chǎn)生的包。
--sid-owner seessionid
根據給出的會(huì )話(huà)組匹配該進(jìn)程產(chǎn)生的包。
state
此模塊,當與連接跟蹤結合使用時(shí),允許訪(fǎng)問(wèn)包的連接跟蹤狀態(tài)。
--state state
這里state是一個(gè)逗號分割的匹配連接狀態(tài)列表??赡艿臓顟B(tài)是:INVALID表示包是未知連接,ESTABLISHED表示是雙向傳送的連接,NEW 表示包為新的連接,否則是非雙向傳送的,而RELATED表示包由新連接開(kāi)始,但是和一個(gè)已存在的連接在一起,如FTP數據傳送,或者一個(gè)ICMP錯誤。
unclean
此模塊沒(méi)有可選項,不過(guò)它試著(zhù)匹配那些奇怪的、不常見(jiàn)的包。處在實(shí)驗中。
tos
此模塊匹配IP包首部的8位tos(服務(wù)類(lèi)型)字段(也就是說(shuō),包含在優(yōu)先位中)。
--tos tos
這個(gè)參數可以是一個(gè)標準名稱(chēng),(用iptables -m tos -h 察看該列表),或者數值。
TARGET EXTENSIONS
iptables可以使用擴展目標模塊:以下都包含在標準版中。
LOG
為匹配的包開(kāi)啟內核記錄。當在規則中設置了這一選項后,linux內核會(huì )通過(guò)printk()打印一些關(guān)于全部匹配包的信息(諸如IP包頭字段等)。
--log-level level
記錄級別(數字或參看 syslog.conf(5))。
--log-prefix prefix
在紀錄信息前加上特定的前綴:最多14個(gè)字母長(cháng),用來(lái)和記錄中其他信息區別。
--log-tcp-sequence
記錄TCP序列號。如果記錄能被用戶(hù)讀取那么這將存在安全隱患。
--log-tcp-options
記錄來(lái)自TCP包頭部的選項。
--log-ip-options
記錄來(lái)自IP包頭部的選項。
MARK
用來(lái)設置包的netfilter標記值。只適用于mangle表。
--set-mark mark
REJECT
作為對匹配的包的響應,返回一個(gè)錯誤的包:其他情況下和DROP相同。
此目標只適用于INPUT、FORWARD和OUTPUT鏈,和調用這些鏈的用戶(hù)自定義鏈。這幾個(gè)選項控制返回的錯誤包的特性:
--reject-with type
Type可以是icmp-net-unreachable、icmp-host- unreachable、icmp-port-nreachable、icmp-proto-unreachable、 icmp-net-prohibited 或者 icmp-host-prohibited,該類(lèi)型會(huì )返回相應的ICMP錯誤信息(默認是port-unreachable)。選項 echo-reply也是允許的;它只能用于指定ICMP ping包的規則中,生成ping的回應。最后,選項tcp-reset可以用于在INPUT鏈中,或自INPUT鏈調用的規則,只匹配TCP協(xié)議:將回應一個(gè)TCP RST包。
TOS
用來(lái)設置IP包的首部八位tos。只能用于mangle表。
--set-tos tos
你可以使用一個(gè)數值型的TOS 值,或者用iptables -j TOS -h 來(lái)查看有效TOS名列表。
MIRROR
這是一個(gè)試驗示范目標,可用于轉換IP首部字段中的源地址和目標地址,再傳送該包,并只適用于INPUT、FORWARD和OUTPUT鏈,以及只調用它們的用戶(hù)自定義鏈。
SNAT
這個(gè)目標只適用于nat表的POSTROUTING鏈。它規定修改包的源地址(此連接以后所有的包都會(huì )被影響),停止對規則的檢查,它包含選項:
--to-source [-][ort-port]
可以指定一個(gè)單一的新的IP地址,一個(gè)IP地址范圍,也可以附加一個(gè)端口范圍(只能在指定-p tcp 或者-p udp的規則里)。如果未指定端口范圍,源端口中512以下的(端口)會(huì )被安置為其他的512以下的端口;512到1024之間的端口會(huì )被安置為1024 以下的,其他端口會(huì )被安置為1024或以上。如果可能,端口不會(huì )被修改。
--to-destiontion [-][ort-port]
可以指定一個(gè)單一的新的IP地址,一個(gè)IP地址范圍,也可以附加一個(gè)端口范圍(只能在指定-p tcp 或者-p udp的規則里)。如果未指定端口范圍,目標端口不會(huì )被修改。
MASQUERADE
只用于nat表的POSTROUTING鏈。只能用于動(dòng)態(tài)獲取IP(撥號)連接:如果你擁有靜態(tài)IP地址,你要用SNAT。偽裝相當于給包發(fā)出時(shí)所經(jīng)過(guò)接口的IP地址設置一個(gè)映像,當接口關(guān)閉連接會(huì )終止。這是因為當下一次撥號時(shí)未必是相同的接口地址(以后所有建立的連接都將關(guān)閉)。它有一個(gè)選項:
--to-ports [-port>]
指定使用的源端口范圍,覆蓋默認的SNAT源地址選擇(見(jiàn)上面)。這個(gè)選項只適用于指定了-p tcp或者-p udp的規則。
REDIRECT
只適用于nat表的PREROUTING和OUTPUT鏈,和只調用它們的用戶(hù)自定義鏈。它修改包的目標IP地址來(lái)發(fā)送包到機器自身(本地生成的包被安置為地址127.0.0.1)。它包含一個(gè)選項:
--to-ports []
指定使用的目的端口或端口范圍:不指定的話(huà),目標端口不會(huì )被修改。只能用于指定了-p tcp 或 -p udp的規則。
DIAGNOSTICS
診斷
不同的錯誤信息會(huì )打印成標準錯誤:退出代碼0表示正確。類(lèi)似于不對的或者濫用的命令行參數錯誤會(huì )返回錯誤代碼2,其他錯誤返回代碼為1。
BUGS
臭蟲(chóng)
Check is not implemented (yet).
檢查還未完成。
COMPATIBILITY WITH IPCHAINS
與ipchains的兼容性
iptables和Rusty Russell的ipchains非常相似。主要區別是INPUT 鏈只用于進(jìn)入本地主機的包,而OUTPUT只用于自本地主機生成的包。因此每個(gè)包只經(jīng)過(guò)三個(gè)鏈的一個(gè);以前轉發(fā)的包會(huì )經(jīng)過(guò)所有三個(gè)鏈。其他主要區別是 -i 引用進(jìn)入接口;-o引用輸出接口,兩者都適用于進(jìn)入FORWARD鏈的包。當和可選擴展模塊一起使用默認過(guò)濾器表時(shí),iptables是一個(gè)純粹的包過(guò)濾器。這能大大減少以前對IP偽裝和包過(guò)濾結合使用的混淆,所以以下選項作了不同的處理:
-j MASQ
-M -S
-M -L
在iptables中有幾個(gè)不同的鏈。
iptables -A INPUT -p tcp -s x.x.x.x/x --dport 22 -j ACCEPT // 允許源地址為x.x.x.x/x的主機通過(guò)22(ssh)端口.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT // 允許80(http)端口的數據包進(jìn)入
iptables -A INPUT -p tcp --dport 110 -j ACCEPT // 允許110(pop3)端口的數據包進(jìn)入如果不加這規則,就只能通過(guò)web頁(yè)面來(lái)收信(無(wú)法用OE或Foxmail等來(lái)收)
iptables -A INPUT -p tcp --dport 25 -j ACCEPT // 允許25(smtp)端口的數據包進(jìn)入,如果不加這規則,就只能通過(guò)web頁(yè)面來(lái)發(fā)信(無(wú)法用OE或Foxmail等來(lái)發(fā))
iptables -A INPUT -p tcp --dport 21 -j ACCEPT // 允許21(ftp)端口的數據包進(jìn)入(傳數據)
iptables -A INPUT -p tcp --dport 20 -j ACCEPT // 允許20(ftp)端口的數據包進(jìn)入(執行ftp命令,如dir等)
iptables -A INPUT -p tcp --dport 53 -j ACCEPT // 允許53(dns)端口的數據包進(jìn)入(tcp)
iptables -A INPUT -p udp --dport 53 -j ACCEPT // 允許53(dns)端口的數據包進(jìn)入(udp)
iptables -A INPUT -p icmp -j ACCEPT // 允許ICMP包通過(guò)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT //利用 iptables 對連接狀態(tài)的支持
iptables -P INPUT DROP //把INPUT鏈的默認規則設置為DROP