?? ipchains參數(shù)介紹(轉(zhuǎn)).txt
字號(hào):
作者:Eazily
日期:2001-4-30 15:34:31
Ipchains 被用來安裝、維護(hù)、檢查Linux內(nèi)核的防火墻規(guī)則。規(guī)則可以分成四類:IP input鏈、IP output鏈、IP forward鏈、user defined 鏈。
一個(gè)防火墻規(guī)則指定包的格式和目標(biāo)。當(dāng)一個(gè)包進(jìn)來時(shí), 核心使用input鏈來決定它的命運(yùn)。 如果它通過了, 那么核心將決定包下一步該發(fā)往何處(這一步叫路由)。假如它是送往另一臺(tái)機(jī)器的, 核心就運(yùn)用forward鏈。如果不匹配,進(jìn)入目標(biāo)值所指定的下一條鏈,那有可能是一條user defined鏈,或者是一個(gè)特定值: ACCEPT,DENY,REJECT,MASQ,REDIRECT,RETURN。
ACCEPT意味著允許包通過,DENY 扔掉包就象沒有受到過一樣,REJECT也把包扔掉,但(假如它不是 ICMP 包)產(chǎn)生一個(gè) ICMP 回復(fù)來告訴發(fā)包者,目的地址無法到達(dá)(請注意DENY和REJECT對于ICMP包是一樣的)。
MASQ 告訴核心偽裝此包,它只對forward 鏈和user defined鏈起作用,想讓它起作用, 編譯核心時(shí)必需讓 IP Masquerading 起作用。
REDIRECT只對input鏈和user defined鏈起作用。它告訴核心把無論應(yīng)送到何處的包改送到一個(gè)本地端口. 只有 TCP 和 UDP 協(xié)議可以使用此指定. 任意用 '-j REDIRECT' 指定一個(gè)端口(名字或編號(hào))可以使送往此的包被重定向到某個(gè)特殊的端口, 即使它被標(biāo)記為送到其它端口。想讓它起作用,編譯內(nèi)核時(shí),必須讓CONFIG_IP_TRANSPARENT_PROXY起作用。
最后的一個(gè)目標(biāo)指定是 RETURN, 它跳過它下面的所有規(guī)則, 直到鏈的末尾。
任何其它的目標(biāo)指定表示一個(gè)用戶自定義的鏈。包將在那個(gè)鏈中通過. 假如那個(gè)鏈沒有決定此包的命運(yùn), 那么在那個(gè)鏈中的傳輸就完成了,包將通過當(dāng)前鏈的下一個(gè)規(guī)則。
參數(shù)說明:
-A :--append
在所選鏈的鏈尾加入一個(gè)或多個(gè)規(guī)則。有時(shí)一個(gè)單命令行能影響多個(gè)規(guī)則. 有兩種做法. 第一, 假如你設(shè)置一個(gè)能解析為多個(gè) IP 地址(使用 DNS)的主機(jī)名, ipchains 將如同你對多個(gè)地址都設(shè)置了命令一樣發(fā)生作用。假如主機(jī)名'www.foo.com'解析為三個(gè) IP 地址, 主機(jī)名'www.bar.com'解析為兩個(gè) IP 地址, 那么命令 'ipchains -A input -j reject -s www.bar.com -d www.foo.com' 將在 input 鏈中追加6條規(guī)則。-D (-I, -R) 的語法與 -A 完全相同. 當(dāng)在一個(gè)鏈中有多個(gè)相同的規(guī)則時(shí), 只有第一個(gè)被刪除。
-D,--delete
從所選鏈中刪除一或多條規(guī)則。我們可以用兩鐘方法中的任何一鐘刪除此規(guī)則. 首先如果我們知道它是鏈中的唯一規(guī)則, 我們可以使用編號(hào)刪除, 輸入:
# ipchains -D input 1
來刪除進(jìn)入鏈的編號(hào)1規(guī)則。第二條路是 -A 命令的鏡象, 但是用 -D 代替 -A. 當(dāng)你不愿意去數(shù)繁多的規(guī)則時(shí), 這是一個(gè)有用的方法. 這種情況下, 我們使用:
# ipchains -D input -s 127.0.0.1 -p icmp -j DENY
-R, --replace
在所選鏈中替換一條規(guī)則,如果源和目標(biāo)目標(biāo)名解析到多個(gè)地址,命令將失敗。
-I, --insert
以給出的規(guī)則號(hào)在所選鏈中插入一條或多條規(guī)則。如果規(guī)則號(hào)是1,插入的規(guī)則在鏈的頭部。
-L, --list
列出指定鏈的所有規(guī)則。如果沒有指定鏈,將列出所有鏈的規(guī)則。-L有三個(gè)可選項(xiàng). '-n'(數(shù)值)項(xiàng)非常有用, 它阻止 ipchains 去查找 IP 地址, 假如你的DNS沒有正確設(shè)置, 或你已經(jīng)過濾掉了 DNS 請求, 這將造成很大延時(shí)。 它還會(huì)導(dǎo)致端口用數(shù)字而不是名字被顯示出來。’-v’選項(xiàng)顯示規(guī)則的所有詳細(xì)信息,如包和字節(jié)計(jì)數(shù)器,TOS 掩碼, 接口, 和包標(biāo)記. 用其它的方法這些項(xiàng)都會(huì)被忽略。
-F, --flush
使用'-F'命令可以清除一個(gè)鏈中的所有規(guī)則。
# ipchains -F forward
假如你不指定鏈, 那么所有鏈都將被清空。
-Z, --zero
重置計(jì)數(shù)器。但有時(shí)你想在重置計(jì)數(shù)器前知道它們的值。你可以同時(shí)使用 '-L' 和 '-Z' 命令, 讀計(jì)數(shù)器的同時(shí)重置它們。不幸的是, 假如你這樣做, 你不能只操作一個(gè)鏈, 你不得不列表和清零所有的鏈。
-N, --new-chain
以給定的名字創(chuàng)建一條新的user defined鏈。不能與已有鏈同名。
-X, --delete-chain
刪除鏈必須滿足兩個(gè)條件: 它們是空的,并且不是任何規(guī)則的目標(biāo). 但你不能刪除3個(gè)內(nèi)置鏈中的任何一個(gè)。
-P, --policy
改變內(nèi)置鏈政策。
-M, --masquerading
允許觀察當(dāng)前IP偽裝的連接(與-L一起)?;蛘咴O(shè)置內(nèi)核IP 偽裝的參數(shù)(與 –S 一起)。
-S, --set tcp tcpfin udp
設(shè)置偽裝的超時(shí)值,'-S' 后跟三個(gè)以秒表示的超時(shí)值: TCP sessions, FIN 包到后的 TCP sessions, 和對于 UDP 包的。假如你不想改變這些值, 給個(gè) '0' 值即可。
默認(rèn)值在 '/usr/include/net/ip_masp.h' 文件中, 目前分別是 15分, 2分和 5分。僅允許和 -M 一起使用。
-C, -- check
有時(shí)你想知道一個(gè)確定的包進(jìn)入機(jī)器后會(huì)發(fā)生什么事情, 比如調(diào)試防火鏈時(shí)。ipchains 的 '-C' 命令提供與核心檢查真實(shí)包完全相同的程序來讓你做這件事。
你可以指定讓哪個(gè)鏈來檢測包, 把鏈的名字放在 '-C' 參數(shù)后即可。鑒于核心總是從 input, output 或 forward 鏈開始, 特許你從需要測試的鏈開始。
包的細(xì)節(jié)用與設(shè)置防火墻規(guī)則相同的語法設(shè)定。 在個(gè)別時(shí), 包的協(xié)議('-p'), 源地址('-s'), 目的地址('-d'), 和接口('-i') 必須有。假如協(xié)議是 TCP 或 UDP, 那么必須指定一個(gè)源地址和一個(gè)目的端口, 對于 ICMP 協(xié)議必須指定類型和代碼。(除非使用了 '-f' 標(biāo)志指定了一個(gè)片段規(guī)則, 在那種情況下這些選項(xiàng)是不合法的).
假如協(xié)議是 TCP (并且沒有 '-f' 標(biāo)志), 可以使用 '-y' 標(biāo)志設(shè)置包的 SYN 位。
這有一個(gè)例子, 測試一個(gè) TCP SYN 包, 它從 192.168.1.1 端口 60000 到 192.168.1.2 www 端口, 進(jìn)入 eth0 接口, 進(jìn)入 'input' 鏈. (這是一個(gè)與 WWW 建立連接的典型例子)
# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www
packet accepted
#
-h, --help
幫助。
-p, --protocol[!] protocol
用 '-p' 來指定協(xié)議。協(xié)議可以用編號(hào)(假如你知道 IP 的數(shù)字化協(xié)議值)或名字'TCP', 'UDP', 'ICMP',’ALL’(0等價(jià)與ALL),大小寫無關(guān), 'tcp' 與 'TCP' 一樣。協(xié)議名前面可以加前綴 '!',來否定它,比如: ' -p ! TCP'。
-s, --source [!] address[/mask] [!][port[:port]]
有四種方法指定源頭(-s)和目的(-d) IP 地址。最常用的方法是使用全稱,比如 'localhost' 或 'www.linuxhq.com'。第二種方法是指定 IP 地址,如 '127.0.0.1'。第三種和第四種方法是指定 IP 地址集, 比如 '199.95.207.0/24' '199.95.207.0/255.255.255.0'。這兩種方式都指定了從 192.95.207.0 到 192.95.207.255 的所有 IP 地址;'/'后的數(shù)字表示 IP 地址的哪部分(或'位')被指定。默認(rèn)是 '/32' 或 '255.255.255.255' (與所有 IP 地址匹配)。完全指定所有 IP 地址用'/0'。對于特殊的 TCP 和 UDP 協(xié)議, 還有額外的參數(shù)可以指定,即它們的端口號(hào)或端口的范圍。范圍用 ':' 表示,比如 '6000:6010',它包含從6000到6010的11個(gè)端口,如果沒有下限,默認(rèn)是0。如果沒有上限,默認(rèn)是 65535。 所以指定1024以下端口來的 TCP 連接,表示為 '-p TCP -s 0.0.0.0/0 :1023'。 端口號(hào)也可以用名字指定,如 'WWW'。端口指定也可以用'!'參數(shù)來否定它。ICMP 也可以有參數(shù),但是它沒有端口(ICMP 有類型和代碼),它們有不同的含義??梢栽?#039;-s'參數(shù)后放它們的 ICMP 名字來指定(使用 ipchains -h icmp 來列出這些名字)?;蚴褂?ICMP 類型和代碼的數(shù)字編號(hào)。類型跟在 '-s' 后。代碼跟在 '-d' 后。ICMP 名相當(dāng)長: 你只需輸入足夠長的字母能區(qū)分它們即可。
注意:目前, ICMP 名的前面不能用'!'。等價(jià)于--src。
--source-port [!] [port[:port]]
用來分開源端口范圍,等價(jià)與—sport。
-d,--destination [!] address[/mask] [!] [port[:port]]
指定目標(biāo),用法與-s相同。等價(jià)于—dst。
--destination-port [!] [port[:port]]
指定目標(biāo)端口范圍,等價(jià)于—dport。
--icmp-type [!] typename
允許指定icmp類型(使用 –h icmp 看有效的icmp類型名)??梢苑奖愕脑谥付繕?biāo)的后面使用。
-j, --jump target
指向規(guī)則的目標(biāo),例如,包匹配規(guī)則后怎么辦。目標(biāo)可以是一個(gè)user defined 鏈(非本規(guī)則所在鏈),也可以是一個(gè)可以立即決定包命運(yùn)的特定的目標(biāo)。最簡單的情況是不指定目標(biāo)。這種類型的規(guī)則(通常叫記數(shù)規(guī)則)常用來做某種類型包的簡單記數(shù)。無論規(guī)則匹配與否, 核心將繼續(xù)檢查此鏈中的下一個(gè)的規(guī)則。但規(guī)則計(jì)數(shù)器將增加。
-i, --interface [!] name
用 '-i' 參數(shù)指定接口名字。接口是包進(jìn)進(jìn)出出的物理設(shè)備。用于包進(jìn)入(包通過進(jìn)入鏈 )的接口被認(rèn)為是進(jìn)入接口, 同樣地, 用于包外出(包通過外出鏈)的接口被認(rèn)為是外出接口. 用于包中轉(zhuǎn)的接口也被認(rèn)為是外出接口。
指定一個(gè)目前不存在的接口是完全合法的。規(guī)則直到此接口工作時(shí)才起作用,這種指定是非常有用,對于 PPP 及其類似的連接。作為一個(gè)特例, 一個(gè)結(jié)尾是'+'的接口將適合所有此類接口(無論它們是否工作)。例如:設(shè)定一個(gè)規(guī)則適合所有的 PPP 連接, 可以用 -i ppp+ 來指定接口。此參數(shù)忽略時(shí),默認(rèn)符合所有接口。接口可以使用否定符'!'來匹配不是指定接口來的包。
[!] -f, --fragment
此規(guī)則指定fragmented packets的第二個(gè)和以后的分塊。因?yàn)檫@樣的分塊沒有源和目標(biāo)端口信息(或 ICMP 類型),所以它不匹配一些指定它的規(guī)則。
可以在它前面使用'!',來指定一個(gè)不適用于第二個(gè)及其后續(xù)的片段包的規(guī)則。
-b, --bidirectional
雙向模式。這個(gè)標(biāo)志使 ipchains 象你輸入命令兩次一樣工作,第二次是把 '-s' 和 '-d' 參數(shù)顛倒。
-v, --verbose
詳細(xì)輸出。它顯示出對于你的命令, ipchains 是如何響應(yīng)的. 假如你使用的命令可以影響多個(gè)規(guī)則, 它是很有用的。
-n, --numeric
數(shù)字化輸出。IP地址和端口號(hào)將以數(shù)字格式顯示。缺省顯示主機(jī)名和網(wǎng)絡(luò)名,和服務(wù)名。當(dāng)DNS不起作用時(shí),此參數(shù)及其有用。
-l, --log
對匹配包實(shí)行內(nèi)核紀(jì)錄,當(dāng)設(shè)置此參數(shù)時(shí),Linux內(nèi)核將通過printk()對于所有匹配包打印一些信息。
-o, --output [maxsize]
拷貝匹配的包到用戶空間設(shè)備。主要由開發(fā)者使用。要使用此參數(shù),編譯內(nèi)核時(shí)必須設(shè)置 CONFIG_IP_FIREWALL_NETLINK Set。
-m, --mark markvalue
標(biāo)志匹配的包。包被一個(gè)32位的無符號(hào)整數(shù)標(biāo)志。如果你不是一個(gè)內(nèi)核黑客,你不必關(guān)心這些。如果標(biāo)志值以 ‘+’ 或 ‘-‘開頭,那么這個(gè)值將會(huì)從當(dāng)前包的標(biāo)志值加或減(初始值為0)。
-t, --TOS and xormask
用于改變IP頭的TOS域。當(dāng)包匹配規(guī)則,它的TOS域首先與第一個(gè)掩碼逐位相與,結(jié)果再與第二個(gè)掩碼逐位異或,掩碼將會(huì)被指定為8位16進(jìn)制數(shù)。TOS的最低有效位必須沒有被改變。TOS域的四個(gè)位是最小延時(shí)"Minimum Delay", 最大吞吐量"Maximum Throughput", 最大可靠程度"Maximum Reliability"和最小費(fèi)用"Minimum Cost"。最常用的是把 telnet 和 ftp 的控制連接設(shè)為最小延時(shí)和把 FTP 數(shù)據(jù)設(shè)為最大吞吐量. 這樣做:
ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10
ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10
ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08
如果這些太難理解, 使用下表:
TOS Name Value Typical Uses
Minimum Delay 0x01 0x10 ftp, telnet
Maximum Throughput 0x01 0x08 ftp-data
Maximum Reliability 0x01 0x04 snmp
Minimum Cost 0x01 0x02 nntp
-x, --exact
展開數(shù)字,包和字節(jié)計(jì)數(shù)器顯示時(shí)使用后綴 'K', 'M', 'G' 來表示1000 1,000,000 和 1,000,000,000。不管數(shù)值多大, 使用 '-x' 標(biāo)志可以完全顯示它們。這個(gè)參數(shù)只可以在 –L 后使用。
[!] –y, --syn
僅僅匹配設(shè)置了SYN位,清除了ACK、FIN位的的TCP包。這些包被用來請求初始化的TCP連接,阻止從接口來的這樣的包將會(huì)阻止外來的TCP連接請求。但輸出的TCP連接請求將不受影響。這個(gè)參數(shù)僅僅當(dāng)協(xié)議類型設(shè)置為TCP時(shí)才能使用。此參數(shù)前可以使用!標(biāo)志匹配所有的非請求連接的包。
--line-numbers
在使用列表規(guī)則時(shí),在每行開頭加行號(hào),表示規(guī)則在鏈中的位置。
--no-warnings
去掉所有的警告信息。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -