歡迎您光臨本站 註冊首頁

Ipchains參數完全手冊

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  Ipchains被用來安裝、維護、檢查Linux內核的防火牆規則。規則可以分成四類:IP input鏈、IP output鏈、IP forward鏈、user defined鏈。

一個防火牆規則指定包的格式和目標。當一個包進來時,核心使用input鏈來決定它的命運。如果它通過了,那麼核心將決定下一步包該發往何處(這一步叫路由)。假如它是送往另一台機器的,核心就運用forward鏈。如果不匹配,進入目標值所指定的下一條鏈,那有可能是一條user defined鏈,或者是一個特定值:ACCEPT,DENY,REJECT,MASQ,REDIRECT,RETURN。

ACCEPT意味著允許包通過,DENY 扔掉包就象沒有收到過一樣,REJECT也把包扔掉,但(假如它不是ICMP包)產生一個ICMP回復來告訴發包者,目的地址無法到達(請注意DENY和REJECT對於ICMP包是一樣的)。

MASQ告訴核心偽裝此包,它只對forward鏈和user defined鏈起作用,想讓它起作用,編譯核心時必需讓IP Masquerading起作用。

REDIRECT只對input鏈和user defined鏈起作用。它告訴核心把無論應送到何處的包改送到一個本地埠。只有TCP和UDP協議可以使用此指定。任意用「-j REDIRECT」指定一個埠(名字或編號)可以使送往此的包被重定向到某個特殊的埠,即使它被標記為送到其它埠。想讓它起作用,編譯內核時,必須讓CONFIG_IP_TRANSPARENT_PROXY起作用。

最後的一個目標指定是RETURN,它跳過它下面的所有規則,直到鏈的末尾。

任何其它的目標指定表示一個用戶自定義的鏈。包將在那個鏈中通過,假如那個鏈沒有決定此包的命運,那麼在那個鏈中的傳輸就完成了,包將通過當前鏈的下一個規則。

參數說明
-A :--append

在所選鏈的鏈尾加入一個或多個規則。有時一個單命令行能影響多個規則,有兩種做法:第一,假如你設置一個能解析為多個IP地址(使用 DNS)的主機名,ipchains將如同你對多個地址都設置了命令一樣發生作用。假如主機名「www.foo.com」解析為三個IP地址,主機名「www.bar.com」解析為兩個IP地址,那麼命令「ipchains -A input -j reject -s www.bar.com -d www.foo.com」將在input鏈中追加6條規則。-D(-I,-R)的語法與-A完全相同。當在一個鏈中有多個相同的規則時,只有第一個被刪除。

-D,--delete

從所選鏈中刪除一或多條規則。我們可以用兩鍾方法中的任何一鍾刪除此規則。首先如果我們知道它是鏈中的唯一規則,我們可以使用編號刪除,輸入:

# ipchains -D input 1

來刪除進入鏈的編號1規則。第二條路是-A命令的鏡象,但是用-D代替-A. 當你不願意去數繁多的規則時,這是一個有用的方法。這種情況下,我們使用:

# ipchains -D input -s 127.0.0.1 -p icmp -j DENY

-R,--replace

在所選鏈中替換一條規則,如果源和目標目標名解析到多個地址,命令將失敗。

-I,--insert

以給出的規則號在所選鏈中插入一條或多條規則。如果規則號是1,插入的規則在鏈的頭部。

-L,--list

列出指定鏈的所有規則。如果沒有指定鏈,將列出所有鏈的規則。-L有三個可選項:「-n」(數值)項非常有用,它阻止 ipchains 去查找IP地址,假如你的DNS沒有正確設置,或你已經過濾掉了 DNS 請求,這將造成很大延時。它還會導致埠用數字而不是名字被顯示出來。「-v」選項顯示規則的所有詳細信息,如包和位元組計數器,TOS掩碼,介面,和包標記,用其它的方法這些項都會被忽略。

-F,--flush

使用「-F」命令可以清除一個鏈中的所有規則。

# ipchains -F forward

假如你不指定鏈,那麼所有鏈都將被清空。

-Z,--zero

重置計數器。但有時你想在重置計數器前知道它們的值。你可以同時使用「-L」和「-Z」命令,讀計數器的同時重置它們。不幸的是,假如你這樣做,你不能只操作一個鏈,你不得不列表和清零所有的鏈。

-N,--new-chain

以給定的名字創建一條新的user defined鏈。不能與已有鏈同名。

-X,--delete-chain

刪除鏈必須滿足兩個條件:它們是空的,並且不是任何規則的目標. 但你不能刪除3個內置鏈中的任何一個。

-P,--policy

改變內置鏈政策。

-M,--masquerading

允許觀察當前IP偽裝的連接(與-L一起)。或者設置內核IP 偽裝的參數(與 -S 一起)。

-S,--set tcp tcpfin udp

設置偽裝的超時值,「-S」 後跟三個以秒表示的超時值: TCP sessions,FIN 包到后的TCP sessions,和對於UDP包的。假如你不想改變這些值,給個「0」值即可。

默認值在「/usr/include/net/ip_masp.h」文件中,目前分別是15分,2分和5分。僅允許和「-M」一起使用。

-C,-- check

有時你想知道一個確定的包進入機器後會發生什麼事情,比如調試防火鏈時。ipchains的「-C」命令提供與核心檢查真實包完全相同的程序來讓你做這件事。

你可以指定讓哪個鏈來檢測包,把鏈的名字放在「-C」參數后即可。鑒於核心總是從input,output或forward鏈開始,特許你從需要測試的鏈開始。

包的細節用與設置防火牆規則相同的語法設定。 在個別時,包的協議(「-p」),源地址(「-s」),目的地址(「-d」),和介面(「-i」)必須有。假如協議是TCP或UDP,那麼必須指定一個源地址和一個目的埠,對於ICMP協議必須指定類型和代碼。(除非使用了「-f」標誌指定了一個片段規則,在那種情況下這些選項是不合法的)。

假如協議是TCP(並且沒有「-f」標誌),可以使用「-y」標誌設置包的SYN位。

這有一個例子,測試一個TCP SYN包,它從192.168.1.1埠60000到192.168.1.2 www埠,進入eth0介面,進入「input」鏈。(這是一個與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」來指定協議。協議可以用編號(假如你知道 IP 的數字化協議值)或名字「TCP」,「UDP」,「ICMP」,「ALL」(0等價與ALL),大小寫無關,「tcp」與「TCP」一樣。協議名前面可以加前綴「!」,來否定它,比如:「-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地址;「/」后的數字錶示 IP 地址的哪部分(或「位」)被指定。默認是「/32」或「255.255.255.255」(與所有IP地址匹配)。完全指定所有IP地址用「/0」。對於特殊的TCP和UDP協議,還有額外的參數可以指定,即它們的埠號或埠的範圍。範圍用「:」表示,比如「6000:6010」,它包含從6000到6010的11個埠,如果沒有下限,默認是0。如果沒有上限,默認是65535。 所以指定1024以下埠來的 TCP 連接,表示為「-p TCP -s 0.0.0.0/0 :1023」。埠號也可以用名字指定,如「WWW」。埠指定也可以用「!」參數來否定它。ICMP也可以有參數,但是它沒有埠(ICMP 有類型和代碼),它們有不同的含義。可以在「-s」參數後放它們的 ICMP 名字來指定(使用 ipchains -h icmp 來列出這些名字)。或使用 ICMP 類型和代碼的數字編號。類型跟在「-s」后。代碼跟在「-d」后。ICMP名相當長:你只需輸入足夠長的字母能區分它們即可。

注意:目前,ICMP 名的前面不能用「!」。等價於--src。

--source-port [!] [port[:port]]

用來分開源埠範圍,等價與-sport。

-d,--destination [!] address[/mask] [!] [port[:port]]

指定目標,用法與-s相同。等價於-dst。

--destination-port [!] [port[:port]]

指定目標埠範圍,等價於-dport。

--icmp-type [!] typename

允許指定icmp類型(使用 -h icmp 看有效的icmp類型名)。可以方便的在指定目標的後面使用。

-j,--jump target

指向規則的目標,例如,包匹配規則后怎麼辦。目標可以是一個user defined 鏈(非本規則所在鏈),也可以是一個可以立即決定包命運的特定的目標。最簡單的情況是不指定目標。這種類型的規則(通常叫記數規則)常用來做某種類型包的簡單記數。無論規則匹配與否,核心將繼續檢查此鏈中的下一個的規則。但規則計數器將增加。

-i,--interface [!] name

用「-i」參數指定介面名字。介面是包進進出出的物理設備。用於包進入(包通過進入鏈 )的介面被認為是進入介面,同樣地,用於包外出(包通過外出鏈)的介面被認為是外出介面。用於包中轉的介面也被認為是外出介面。

指定一個目前不存在的介面是完全合法的。規則直到此介面工作時才起作用,這種指定是非常有用,對於PPP及其類似的連接。作為一個特例,一個結尾是「+」的介面將適合所有此類介面(無論它們是否工作)。例如:設定一個規則適合所有的PPP連接,可以用「-i ppp+」來指定介面。此參數忽略時,默認符合所有介面。介面可以使用否定符「!」來匹配不是指定介面來的包。

[!] -f,--fragment

此規則指定fragmented packets的第二個和以後的分塊。因為這樣的分塊沒有源和目標埠信息(或ICMP類型),所以它不匹配一些指定它的規則。

可以在它前面使用「!」,來指定一個不適用於第二個及其後續的片段包的規則。

-b,--bidirectional

雙向模式。這個標誌使 ipchains 象你輸入命令兩次一樣工作,第二次是把「-s」和「-d」參數顛倒。

-v,--verbose

詳細輸出。它顯示出對於你的命令,ipchains 是如何響應的。假如你使用的命令可以影響多個規則,它是很有用的。

-n,--numeric

數字化輸出。IP地址和埠號將以數字格式顯示。預設顯示主機名和網路名,和服務名。當DNS不起作用時,此參數及其有用。

-l,--log

對匹配包實行內核紀錄,當設置此參數時,Linux內核將通過printk()對於所有匹配包列印一些信息。

-o,--output [maxsize]

拷貝匹配的包到用戶空間設備。主要由開發者使用。要使用此參數,編譯內核時必須設置 CONFIG_IP_FIREWALL_NETLINK Set。

-m,--mark markvalue

標誌匹配的包。包被一個32位的無符號整數標誌。如果你不是一個內核黑客,你不必關心這些。如果標誌值以「+」或「-」開頭,那麼這個值將會從當前包的標誌值加或減(初始值為0)。

-t,--TOS and xormask

用於改變IP頭的TOS域。當包匹配規則,它的TOS域首先與第一個掩碼逐位相與,結果再與第二個掩碼逐位異或,掩碼將會被指定為8位16進位數。TOS的最低有效位必須沒有被改變。TOS域的四個位是最小延時「Minimum Delay」,最大吞吐量「Maximum Throughput」,最大可靠程度「Maximum Reliability」和最小費用「Minimum Cost」。最常用的是把 telnet 和 ftp 的控制連接設為最小延時和把FTP數據設為最大吞吐量。這樣做:

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

展開數字,包和位元組計數器顯示時使用後綴「K」,「M」,「G」來表示1000 1,000,000和1,000,000,000。不管數值多大,使用「-x」標誌可以完全顯示它們。這個參數只可以在「-L」后使用。

[!] -y,--syn

僅僅匹配設置了SYN位,清除了ACK、FIN位的的TCP包。這些包被用來請求初始化的TCP連接,阻止從介面來的這樣的包將會阻止外來的TCP連接請求。但輸出的TCP連接請求將不受影響。這個參數僅僅當協議類型設置為TCP時才能使用。此參數前可以使用!標誌匹配所有的非請求連接的包。

--line-numbers

在使用列表規則時,在每行開頭加行號,表示規則在鏈中的位置。

--no-warnings

去掉所有的警告信息。



[火星人 ] Ipchains參數完全手冊已經有308次圍觀

http://coctec.com/docs/security/show-post-72791.html