天天看點

FreeBSD 内建的防火牆指令ipfw英譯漢

     ipfw 是 FreeBSD 内建的防火牆指令,我們可以用它來管理進出的網絡交通。如果防火牆伺服器是扮演着路由器 (gateway 例如上一篇中的 NAT 伺服器) 的角色,則進出的封包會被 ipfw 處理二次,而如果防火牆扮演的是橋接器 (bridge) 的角色,則封包隻會被處理一次。這個觀念關系着我們以下所要介紹的文法,有的文法并不适用于橋接器。

   另外,我們在設定防火牆時有二種模式,一種模式是預設拒絕所有聯機,再一條一條加入允許的聯機;另一種是預設接受所有聯機,加入幾條拒絕的規則。如果是非常強調安全性,應該是使用預設拒絕所有聯機,再一條一條加入我們允許的規則。

   我們會将 firewall 的設定寫在 /etc/rc.firewall 中,每一條設定都是以先入為主 (first match wins) 的方式來呈現,也就是先符合的規則 (rules) 為優先。所有進出的封包都會被這些規則過濾,是以我們會盡量減少規則的數量,以加速處理的速度。     已經習慣了用ipfw,覺得ipfw其實很不錯,但手冊上的介紹有些少,是以想弄個中文的man。但是由于本人英文和計算機都是半路出家,純屬個人愛好而自學的,是以各方面的水準都深欠火候,歡迎E文好和計算機專業的同學幫助翻譯和改正。

在翻譯中,受到“杜比立體聲”和“FinalBSD”的幫助,一起表示感謝。 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇-B d-M6y3a2c5T2Z.r9A

翻譯是一項非常枯燥的工作,為了尊重他人勞動,轉載時請注明作者:來自chinaunix的lsstarboy。email:lsstar#sina.com

,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇.o)o1~&u5@+c

  ipfw是FreeBSD下的一個使用者界面,它用來控制ipfw防火牆和流量整形。 TechWeb-技術社群,Z#e4g3d"Y8h4v,m7S+V

tech.techweb.com.cn%d'D&h"t4U&N

"B*m*U#Q#{)e8z)H%]

  ipfw的配置,也叫做規則集,它是由一系列的規則組成的,這些規則的編号是從1到65535。通過ipfw的資料包可以來自協定棧的許多各個的地方(這主要依賴于資料包的來源和目的,某些資料包很可多次經過防火牆)。資料包在通過防火牆的時候,要和防火牆規則集逐條對比。如果發現比對的規則,則執行相應規則的動作。

p7?/a2R-c3e

  在特定的規則動作和系統設定下,資料包在比對完一個規則後,可能在某些規則之後重新進入防火牆。

  一個ipfw規則集總是包含一個預設的規則(編号為65535),這個預設規則比對所有的資料包,不能修改或删除。根據核心配置的不同,這個預設規則或者是拒絕是以資料包通過,或者是允許所有資料包通過。 6b$A8t1P(f%G0c m"x,S;@

+K,m7K9V4Q*~)a$j

  如果規則集中存在一個或多個包含有keep-state(狀态保持)或limit(限制)的規則,那麼ipfw就表現為狀态保持。例如:當這種規則比對了一個資料包時,ipfw将建立一個動态規則,讓後來的,同這個資料包的位址和端口參數嚴格一緻的資料包,與這個動态規則相比對。 TechWeb-技術社群/S&r0e%L9m+S)y#M4E$J-R

%c6o4J#N/G'J3~

  這些動态規則,都有一個有限的生存期。生存期在第一次遇到check-state、keep-state或者是limit規則時被檢查。這些動态規則的典型應用,是用來保證合法的資料包在通過時開啟防火牆。檢視下面的“狀态防火牆”和“示例”章節,擷取更多關于狀态保持的資訊。 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇-J+w0D.z&u+j)g!b5s

+Z;i7u!\.L4_

  包括動态規則在内的所有規則,都有幾個相關的計數器:一個包計數器,一個位元組計數器,一個記錄計數器和一個用來提示最後比對時間的時間戳。這些計數器都可以被ipfw指令顯示和清零。 tech.techweb.com.cn3\&V7D&O$b'Z"u(?

&|"{%@,p!M8j

  可以用add指令來添加規則;可以用delete指令來删除單個或一組規則;可以用flush指令來删除所有的規則(set 31除外);可以用show和list指令來顯示包括計數器在内的資訊。最後,計數器可以被zero和resetlog指令清零。

并且,每個規則隸屬于32個不同的規則集中的一個。有一些ipfw的指令可以獨立地操作這些規則集,例如:啟動、禁止、交換規則集;把一個規則集中的所有規則移動到另一個規則集;删除一個規則集中的所有規則。這對于安裝臨時配置,或者是測試配置是非常有用的。檢視“規則的規則集”一節,擷取更多關于 set的資訊。     以下是ipfw指令可以利用的選項: 7E*L-x"}#L0M*s&U

使用 list 時,列出資料包的計數器,show指令包含這個選項。

隻顯示動作和注釋,不顯示規則體。包含-c選項。 -e3i&m#F3e#q*E,]4x

-c  進入或顯示規則時,用緊湊格式輸出。例如:在沒有任何附加意義的情況下,不顯示“ip from any to any”字元串。 tech.techweb.com.cn(L%k8O2a$f3|0i2I)r7q(|

tech.techweb.com.cn;A/L7P2T4Q+e7S!s

-d  在list時,在顯示靜态規則的同時,顯示動态規則。 3`1n0C%m+d)C8T8M

-e  在list時,如果指定了-d選項,則顯示過期的動态規則。

-f  對于有些會導緻問題的指令,不要提出确認的詢問。例如:flush指令。哪果一個程序沒有相關的tty,這個是預設被包含的選項。(譯注:沒看懂這句話的意思,好像是如果不是在tty中輸入的指令,比如在scripts中,預設是有-f的。) TechWeb-技術社群1]#q2H1e&X0^4v4D/b

-n  隻檢查指令的文法,不真正執行指令。

-N  嘗試在輸出中,解析位址和服務名。 *B&@2t1H7f$M

-q   當新增 (add)、歸零(zero)、重置日志(resetlog)或清除(flush) 時,不要顯示任何回應資訊(就像使用-f選項一樣)。這對于在腳本裡利用ipfw指令來調整防火牆規則(例如執行“sh /etc/rc.firewall”腳本)、或者是處理與一個遠端登入相關的有多條ipfw指令的,是非常有用的。同時,它防止無意間,在規則中加入或删除一個清單而導緻的錯誤。(譯注:沒看懂,好像下面是一個例子。)在正常的模式,預設核心配置下,一個flush指令會輸出一個資訊。因為所有的規則都被清除掉,這個消息又不能傳送到登入的程序中,腳本後面的規則将無法執行,是以将導緻遠端連接配接中斷。這時,隻好回到計算機前去工作了。 5h'd5w,d2P-g:d

程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇1@+[0`$V7F7r1q;|;b3G

-S 當列出一個規則的時候,顯示每條規則的規則集号。如果沒有指定這個辨別,則被禁止的規則不再顯示。 8J3Z+t8{7?%U"Z

-L3k2z7Q7G*]#O4u!n

-s [field] tech.techweb.com.cn+Q c;]&v.R5o*J3s

當顯示pipe時,按照四個計數器之一排序顯示。(對于所有的資料包、目前資料包或者是位元組數) TechWeb-技術社群6]+I"J+I1R;{7M*|%d

-t 當列出時,顯示最後比對的時間戳。(顯示用ctime()轉化後的時間) tech.techweb.com.cn'X8r!n)P/t0p8c6L

TechWeb-技術社群#m-a e%\&|;d9b

-T 當列出時,顯示最後比對的時間戳。(從新紀元到現在的秒數)。這個格式更容易被腳本處理。

2B/[[email protected]~

  為了使配置更容易,規則可以寫到一個檔案裡供ipfw處理,文法規則參照大綱欄最後一行(譯注:指本文最前面的文法部分最後一行,即:“ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname”)。注意必須是絕對路徑。這個檔案會被逐行讀取并且将作為ipfw工具的參數處理。 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇/K6d5z5i(e#E(],Q;i;I1J5\

&t&o P"d9]&s.J

  作為選擇,你還可以使用-p preproc參數來使用預處理程式,其中路徑是用管道來傳入的。可以使用的預處理程式包括cpp和m4。如果preproc不是以"/"開頭,那麼将搜尋PATH裡的路徑。在使用它的時候,要謹慎,因為在很多時候,ipfw啟動時,系統檔案可能沒有挂接(比如:檔案系統是通過NFS挂接的)。一旦使用了 -p參數,所有其它的參數,都被傳送到預處理程式去等待處理。       ipfw的pipe和queue指令用來配置流量整形,你可以下面的“TRAFFIC SHAPER (DUMMYNET) CONFIGURATION”節看到看到相關内容。

 如果系統的world和核心不能保持一緻,ipfw的ABI将失效,以防你加入任何規則。這樣能保證你的順利地完成啟動過程。你可以利用ipfw臨時禁止的機會登入你的網絡,來修複你的問題。

開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇%J2y*P-W.Y3f"T:o7`

$a2V"L2d0Q-S

PACKET FLOW(資料包流程) 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇9[;C.U;o&I8^[email protected]

TechWeb-技術社群.h2U!E6| o"q0e;Q

  一個資料包在幾個核心變量的控制下,在協定棧的多個地方被防火牆檢查。這些地方和變量如下圖所示,要在頭腦中保持下圖,它對于規劃一下正确的規則集是非常重要的。

-技術社群3a&X-w!{'y%x3~#L0M5S ~!e

(O2p/W5m8u'q9s

^ 到上層 V

| | ;~+|2m/M3Z4q#t:V:u(w5x4_

+----------->-----------+ *d d%x9k2_&f0N5O1|%j

^ V

[ip(6)_input] [ip(6)_output] net.inet(6).ip(6).fw.enable=1

| | 4b4};n3x L L,P2M1S6p$?

^ V +A&_'c*I2a'i5G:E5D:P

[ether_demux] [ether_output_frame] net.link.ether.ipfw=1

| |

+-->--[bdg_forward]-->--+ net.link.bridge.ipfw=1

^ V         需要注意的是,在包通過不同棧的時候,頭會被加上或剝離,可能會導緻這些包被檢查不到。例如:當ipfw被ether_demux()調用的時候,進入的包将包括MAC頭;而當ipfw被ip_input()或者ip6_input()調用的時候,同一個資料包的MAC頭将被剝離。

  還需要注意的是:不論檢查發生在什麼地方,也不論資料包源自哪裡,每個資料包也整個規則進行對照。(譯注:是整個規則集嗎?有時候隻對照一部分的時候就中止檢查)。如果一個規則包含的一些比對模型或動作不符合某處的要求(比如:在ip_input或ip6_input處比對MAC頭),那麼比對模型将不會被比對。然而,帶有not字首操作符的比對模型,總是可以和這些資料包相比對。是以,如果有必要,在有很多地方可以選擇的時候,有能力的程式員可以為寫出的規則集選擇一個合适的位置。skipto規則在這兒是非常有用的。例如:

# packets from ether_demux or bdg_forward

ipfw add 10 skipto 1000 all from any to any layer2 in

# packets from ip_input 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇4j'L0X)^6y$A'k3s/t

ipfw add 10 skipto 2000 all from any to any not layer2 in

# packets from ip_output ;X.B8\,}"^*L-|

ipfw add 10 skipto 3000 all from any to any not layer2 out

# packets from ether_output_frame

ipfw add 10 skipto 4000 all from any to any layer2 out -i v4o/p$V+p)a9t

!z8P)A6[;F

(對,在這兒,沒有辦法差別ether_demux和bdg_forward)

(文法規則)

 通常,每個關鍵字或者參數都是作為獨立的指令行參數來提供的,前後都不能有空格。關鍵字是區分大小寫的,而參數按照它們本身的含義,可以是,也可以不是區分大小寫的。(例如,udi要區分大小寫,而hostname沒有必要區分大小寫)

  在ipfw2中,為了提高可讀性,可以在逗号後面加上一個空格。當然,你也可以把整個指令(包括參數)當作一個參數來處理(譯注:就是加上雙引号,作為一個字元串放到某個指令中)。例如,以下幾種格式效果相同: .C/_1C;k4?*K1^9G"L

ipfw -q add deny src-ip 10.0.0.0/24,127.0.0.1/8

%|.q;Y1v"\7Y#{$U,yipfw -q add deny src-ip 10.0.0.0/24, 127.0.0.1/8 (譯注:127前面有個空格) 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇 q4v$o-x:{;[

TechWeb-技術社群"r"y!w:X9c

RULE FORMAT(規則格式)

 ipfw的規則格式如下:

區(y3r#\6H#l

[rule_number] [set set_number] [prob match_probability] action

!H;d._4e._+M:kTechWeb-技術社群[log [logamount number]] [altq queue] [{tag | untag} number] body

 規則的 body 部分用來設定包過濾的資訊,具體細節如下: tech.techweb.com.cn2w)b-]%p.i0u

$W4G9R,u-j"p:F(G)q u

Layer-2 header fields 第二層頭段,什麼時候可用 TechWeb-技術社群+[6F2K#o$V

'e'i6|2A G'i&u

IPv4 and IPv6 Protocol TCP, UDP, ICMP, 協定等 TechWeb-技術社群#L4A2i#q%i%?%b

Source and dest. addresses and ports  源和目的。位址和端口

Direction 資料包的流向,見“流量整形”一節 TechWeb-技術社群2X3S;M"L8N7\2h;c

Transmit and receive interface 傳輸和接收界面,用名字或位址表示 3t.|%o9V/Q%T*V"a(e

Misc. IP header fields 組合IP頭字段,包括版本、服務類型、封包長度、唯一辨別、分段标志、生存期

IP options         IP選項字段 .S7V"m,k"e'q7s

IPv6 Extension headers IPv6擴充頭,包括分片報頭、中繼選項報頭、路由報頭、路路由選擇報頭、IP層安全服務選項、Source routing rthdr0, Mobile IPv6 rthdr2(譯注:最後兩項不知道怎麼翻譯)

統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇$Q(T.r-n4^!V't8n,h8r

IPv6 Flow-ID             IPv6的流量辨別 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇2d%W U#D*{1Z1J'{4z#M.V

&Q,p;T!T4?1W,u

Misc. TCP header fields 組合tcp頭字段,有TCP标志(syn,fin,ack,rst等)、序列号、回複号,視窗等。

~9W

TCP options              TCP的選項

ICMP types ICMP包

ICMP6 types ICMP6包 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇8~,Y+?.i I6\)C

User/group ID 本地棧所歸屬的使用者群組 tech.techweb.com.cn;I8q(}3U2O#N9s:R!~"H

Divert status 是不是源自一個divert接口(例如:natd(8))

需要注意,上面的很多資訊中,比如源MAC和IP位址、TCP/UDP端口等,是比較容易僞造的,是以隻對這些資訊進行過濾不能保證達到預期的效果。     rule_number

 每個規則都有規則号,規則号從1-65535。65535是保留的預設規則。ipfw将按規則号的順序依次檢查這些規則。可以有多個規則用同一個規則号,在這種情況下,将按照它們的添加順序依次檢查或列出。如果一個規則沒有指定規則号,核心将自動賦于一個規則号,使它成為預設規則前的最後一個規則(即小于65535)。自動添加的規則号有個步進值,在不大于65535的情況下,每次添加規則時,都自動加上這一步進值。它預設是100,對應于 net.inet.ip.fw.autoinc_step這個核心變量。

/K*n$r y

set set_number x:e"S"g8z$v2N:w9Z

  每個規則都對應于一個規則集編号,規則集編号取值為:0-31。規則集可以單獨地被禁止或啟用,是以,它對于規則集的原子操作是 TechWeb-技術社群(M"b5C$X"p"_4f(x.v9E

至關重要的。它還可以輕松地删除掉一組規則。如果一個規則沒有指定規則集編号,它預設的規則集編号就是0。規則集編号31是個特殊的規則集,它不能被禁止,也不能用ipfw的flush指令删除,它是預設規則的規則集。規則集編号31可以用ipfw delete set 31指令删除。(譯注:這在遠端調試排斥式防火牆時特别有用,防止把自己鎖在外面。)

.com.cn'h+d5S4N g!G+m

tech.techweb.com.cn*q/|9E&Y!w$O,y#k%@

 prob match_probability *]$Q:Q'y9f/h

  這個語句隻用來指定可能性(從0到1之間浮點值)。這在很多随機丢包的應用中,或者(在同dummynet聯用的情況下)模拟多路徑條件下無序包傳遞的效果中,是非常有用的。

7d

  注意:在檢查時,這個條件比其它所有條件都先被檢查,包括會有副作用的keep-state或者check-state。

J4H

 log [logamount number] *x-~"}/]&o(h5b%Z

tech.techweb.com.cn7E)_#v+|"u&Y.F+K&f0M

  當一個包比對到一個有log關鍵字的規則時,一條消息會被syslogd記錄到一個LOG_SECURITY裝置中。記錄動作隻會在同時滿足下面兩個條件時才發生:1、核心選項net.inet.ip.fw.verbose等于1(當編譯核心時帶着IPFIREWALL_VERBOSE參數時,這是預設值);2、所記錄的包數量還達不到logamount number所指定的數量。如果沒有指定logamuont,則記錄的包的上限受核心變量net.inet.ip.fw.verbose_limit的限制。在這兩種情況中,logamount取值為零時,則取消記錄數量的限制。

  當記錄數量達到上限時,可以通過重置記錄計數器或包計數器的方式再重新開始記錄。詳細情況請檢視resetlog指令。

注意:記錄的時間是在所有的包檢測條件都完成之後,并且在采取相應的動作(接受、拒絕等)之前。

A4U3]5M:g9{1E2g

tag number )y8h(B4M4u-A"z/k;b*B$s

tech.techweb.com.cn7z8e!j)D&S*R)?&X#K-q

  當一個包和一個帶有tag關鍵字的規則相比對時,一個指定的數字标簽就被附加到這個包上,數字标簽的範圍是1-65534。這個标簽作為一個内部的記号(它不會從線路上發送出去),以便後來可以區分這些資料包。這有時候非常有用,比如:提供接口之間互相信任和開啟一個基于安全的過濾。一個包可以同時有多個标簽。标簽是“頑固的”,意思就是隻要标簽被應用到某個資料包上,那麼它就一直存在,直到被明确地解除為止。這個标簽在核心中一直存在,但是一旦資料包離開核心,标簽就會消失。例如:在當把資料包發送到網絡或者發送到divert棧時,标簽就會消失。 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇'Q1p/{1x2r-n4~+s-g

TechWeb-技術社群*R"c3L.E2M

  要檢查已經存在的标簽,可以用tagged規則選項,要删除存在的标簽,用untag關鍵字。

,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇6E8Z2\8N"y!C

  注意:既然标簽是在核心空間内一直存在的,是以它們就可以被核心的網絡子系統(使用mbuf_tags裝置)設定或者是取消,而不僅僅依靠ipfw的 tag和untag關鍵字。例如:可以存在一個netgraph(4)節點做流量分析,并且給資料包打上标簽,以供後面的防火牆進行檢查。

untag number 

TechWeb-技術社群1x![*o6e4H;U5m:N-f*h-M

  當一個資料包比對一個帶有untag關鍵字的規則時,将在這個資料包所附加的标簽中查找untag number所指定的标簽号,如果找到,則将其删除。對于資料包上的其它标簽号,則原封不動。

作系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇(U)o#^2i'h/J

altq queue(譯注:交錯隊列, Alternate Queuing,參見PF文檔)

;]!H*z%s'\2a;U9X

  當一個資料包比對了一個帶有altq關鍵字的規則時,将被附加上一個指定隊列(見altq(4))的ALTQ辨別符。注意,ALTQ标簽隻适用于從 ipfw“向外出”的資料包,而不是被防火牆拒絕或者準備到divert界面的資料包。還要注意的是,當處理資料包的時候,如果沒有足夠記憶體,那麼資料包将不會被打上标簽,是以,一個明智的做法,是使你的“預設”ALTQ隊列規則記錄下這種情況。如果有多個altq規則比對于同一個資料包,那麼隻加上第一條規則的ALTQ類别标簽。那樣做的效果是:在規則集中靠前的altq隊列規則能起到流量整形的作用,而靠後的規則隻達到過濾的效果。例如:把還有 ALTQ标簽的、check-state和keep-state規則放到規則集的後部,有提供真正的包過濾的作用。 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇3P6a&C(C%Z'g4^.\&j

  在IPFW使用altq的名字來檢查隊列之前,你必須用pfctl(8)工具來設定隊列。一旦重置ALTQ指令,那麼包含隊列辨別符的規則将過期,需要被重新讀取才能生效。過期的隊列辨別符将會産生錯誤的分類。

  所有的ALTQ系統程序都可以被ipfw的enable altq和disable altq指令啟用或關閉。ALTQ流量整形有真實規則動作,永遠附加在ALTQ标簽之後,和net.inet.ip.fw.one_pass毫無關系。 TechWeb-技術社群$[;J2];@)~#v2\&r1^-m

RULE ACTIONS(規則動作) TechWeb-技術社群-K:D#c3s6U6b1e

:V+E:H,B3~

  一個規則可以和下面動作中的一個或多個相關聯,如果資料包比對了規則體,那麼這些動作将被執行。

allow | accept | pass | permit 允許比對規則的資料包通過,規則搜尋中止。

check-state 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇4M!o,z%K$U+y

  将資料包和動态規則集裡的規則進行對照。如果找到,則執行産生這條動态規則的那個規則相關聯的動作,如果沒找到,則進行下一條規則。check- state沒有規則體。如果在規則集裡沒有找到check-state,則在第一次出現keep-state或者limit規則時,檢查動态規則集。 tech.techweb.com.cn.y(X3t5q8a#` s

count     更新和本條規則相比對的所有資料包的計數器。繼續進行下一條搜尋。

deny | drop 抛棄和本條規則相比對的資料包。搜尋中止。 TechWeb-技術社群"Z;Y9w y$s/Y"w

TechWeb-技術社群6r%c&N'a/^7z(?(D9o1\

divert port 把和本條規則相比對的資料包轉向到divert(4)棧所綁定的端口。搜尋中止。

B

  fwd | forward ipaddr | tablearg[,port] 

   修改比對資料包的下一跳位址,有可能是一個IP位址,也有可能是一個主機名。當使用tablearg關鍵字時,下一跳位址可以不是一個明确的位址,它可以從最後的資料包檢查表中擷取。如果比對本規則,搜尋中止。 TechWeb-技術社群'H4W%P+R ]3@/Y&C6X

(譯注:tablearg是FreeBSD7.0的ipfw新增功能,它可以使查表的結果作為規則的一部分來使用,可以用來優化一些規則集,或實作基于政策的路由,在使用時,要配合table指令使用。)

 如果指定的ipaddr是一個本地位址,所比對資料包将被傳遞到本地機器的相應端口(如果在規則中沒有指定端口,則是資料包中的端口号)。如果ipaddr不是一個本地位址,那麼端口号(如果指定的話)将被忽略,資料包将會根據本機的路由表被轉發到遠端位址。 tech.techweb.com.cn"G0a#u7[8S2Z

 一個fwd規則不會和一個二層的資料包(用ether_input,ether_output或者bridged接受)相比對。fwd不會修改資料包中的任何資料,特别是目的位址。是以,除非在目的系統中有相應的規則接受這些資料包,否則,被轉發到目的系統的資料包将被拒絕。對于被轉發到本地的資料包,将把本地位址作為它的原始目的位址。這将使netstat(1)看起來有些古怪,但是,對于透明代理伺服器來說,卻是有用的。

 要使用fwd,必須在核心中使用IPFIREWALL_FORWARD選項,并重新編譯核心。 8Q(z-X%M8m8~,^&J,g

nat nat_nr $v.\.Z.}*a5q

Pass packet to a nat instance (for network address translation,

address redirect, etc.): see the NETWORK ADDRESS TRANSLATION 5\7C ~(y9U-w,L(p3?8t(_ L4i

(NAT) Section for further information. 5v'H5o#w(d5D1D7N

1I6T/J8M1C8T2H&y*}1N(T

  将資料包傳送到一個nat界面(用來做位址轉換或位址重定向等):詳細資訊,請檢視NETWORK ADDRESS TRANSLATION (NAT)一節。

pipe pipe_nr

y1Q;{,r6\

  将資料包傳送到一個dummynet(4)的“管道”(用來實作流量整形,延遲等)。詳細資訊請檢視TRAFFIC SHAPER (DUMMYNET) CONFIGURATION一節。如果比對,則搜尋中止。但是,在離開管道的時候,并且核心變量net.inet.ip.fw.one_pass沒有設定,資料包将被送回到防火牆的下一條規則。 1w!Z)] W9J5D1Q3[

Q4G0Y-P-a;`,A-@

queue queue_nr

 将資料包傳送到一個dummynet(4)的“隊列”(用WF2Q+實作流量整形)

reject (Deprecated). '[8u)c2a4U

  不可到達的同義詞。

reset tech.techweb.com.cn&R&A0v7G)W;n,{*M2O7H4l

tech.techweb.com.cn8i3k7{4f%a0W#m*_

  丢掉和本規則相比對的資料包,如果是一個TCP資料包,則發送一個重置(RST)消息。搜尋中止。 tech.techweb.com.cn7_+o0n9i+@%G

reset6 tech.techweb.com.cn,I;{3H*z3o

 丢掉和本規則相比對的資料包,如果是一個TCP資料包,則發送一個重置(RST)消息。搜尋中止。

skipto number

s

  跳到指定的規則,忽略掉比指定規則号小的規則。搜尋從指定的規則号繼續。

tee port

  将相比對的資料包複制一份到divert(4)所綁定的端口。搜尋繼續。

unreach code tech.techweb.com.cn;m(c$]$u(j,v3? L7L

TechWeb-技術社群!Y(X"I'L!`

  丢棄和本規則相比對的包,并且嘗試發送一條編号為指定編号的不可到達的ICMP消息。編号範圍是0-255,或者使用下列别名之一:net, host, protocol, port, needfrag, srcfail, net-unknown,host-unknown, isolated,net-prohib, host-prohib, tosnet, toshost, filter-prohib,host-precedence or precedence-cutoff。搜尋中止。

unreach6 code

  丢棄和本規則相比對的包,并且嘗試發送一條編号為指定編号的不可到達的ICMPv6消息。編号為0,1,3,4或者是下列别名之一:no-route, admin-prohib, address or port。搜尋中止。 &p&]-S(v#M,d2w

netgraph cookie TechWeb-技術社群-r0b+d.Q4A-q

;B0f4C f(z2m&B6].v!P:@*C

  使用指定的cookie把資料包轉向到netgraph。搜尋中止。如果稍後資料包衆netgraph傳回,則受核心變量net.inet.ip.fw.one_pass的影響,或者被接受,或者從下一條規則繼續。 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇7U,G1x6O'J+H)T a

程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇!j3n&?9F)H w/i!^

ngtee cookie

,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇/o({0y8|;p3i2d:I,@&U

  将資料包複制一份,轉發到netgraph,原始的資料包則受net.inet.ip.fw.one_pass的影響,或者被接受,或者從下一條規則繼續。檢視ng_ipfw(4)可以擷取更多關于netgraph和ngtee動作的資訊。   RULE BODY(規則體)

  TechWeb-技術社群*u5x4i*R"v!A

  規則體包括零個或多個比對模式(比如指定源和目的的位址或端口,協定選項,進入和流出的界面等。),這些比對模式必須按順序對資料包進行識别。通常,比對模式之間用一個隐含的“和”操作連接配接,比如:所有規則中的模型都必須去和資料包進行比對。單個的模型可以使用“not”操作符作為字首,用來表示相反的比對結果,就象在下例中:

 ipfw add 100 allow ip from not 1.2.3.4 to any tech.techweb.com.cn#~0i2z,m2O)[

程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇0O!n"s)T5T&J$D;h

  特别的,當用來表示二選一的“或”模型時,可以使用一對小括号“()”或一對大括号“{}”括起來的“or”操作符,比如:

 ipfw add 100 allow ip from { x or not y or z } to any

 隻允許有一級小括号。特别提示:大多數shell中,小括号和大括号都有特殊的意義,是以,為了防止被shell誤解,強烈建議在小括号和大括号前加上反斜杠“\”。 $g/{6r8_;{.w*[3X)w

TechWeb-技術社群;a9g M'b6q+E2A%|

  規則體中,至少要包含一個源位址和目的位址的語句。"any"關鍵字可以用在多種地方,用來表明源或目标可以是任意的。 TechWeb-技術社群1x(e%n3`8n7U"r

程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇.l"D*C-`-`8j$@

  規則體的格式如下:

 [proto from src to dst] [options]

 第一個部分(proto from src to dst)用來和早期版本的FreeBSD相相容。在新的FreeBSD版本中,所有的比對模型(包括MAC頭,IP協定,位址和端口)都可以在options裡指定。   各規則字段的含義如下:

  proto: protocol | { protocol or ... }  

 protocol:[not] protocol-name | protocol-number +b+q2G D#n-J$S

    

  一個IP協定可以用序号或名稱(在/etc/protocols裡可以檢視完整的名稱清單),或者是下面的關鍵字之一: 1q2n%}(I&v5m

     $["[-C'g5z/z#a

    ip4 | ipv4    和IPv4資料包相比對

    ip6 | ipv6 和IPv6資料包相比對

    ip | all 和所有資料包相比對

   ipv6在proto選項中,将被作為内部協定。并且,ipv4在prto選項中是不适用的。 5S3H"e-g#^#l1^/H,y0_

TechWeb-技術社群;F!R:Q2g-G4H4F!I/V)Y2K&~

    { protocol or ... } 格式的“或”的功能隻是友善使用,不提倡這種做法。

  src and dst: {addr | {addr or ... }} [[not] ports]

   一個位址(或者一個清單,見後),可以使用ports修飾符。 #N1t-o:|/\(M$T"v

4c k+y R&u/t'i6L:k.L

    第二種格式(用or連接配接起來的多個位址)隻是友善使用,卻不提倡這種做法。 程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇)S;n&U:k7p,P-F+B

  addr: [not] {any | me | me6 | table(number[,value]) | addr-list | addr-set}

any 比對任意位址

me 比對系統中所有設定的IP位址。

me6 比對系統中所有設定的IPv6位址。位址清單是在分析資料包的時候才被列出的。

com.cn3b5[(a1A8d;q$Y

table(number[,value]) /}6i9? ^4?4s2})V%\:Y

如果一個資料包在表序号為number的表中存在相應的條目,則比對。如果指定了一個可選的32位無符号數value,則條目序号為value的資料包才被比對。檢視LOOKUP TABLES一節,可以擷取更多資訊。

addr-list: ip-addr[,addr-list]

#a,b

ip-addr: 一個主機或者一段位址,可以采用下列格式: TechWeb-技術社群1j-c4U2d,h9W

tech.techweb.com.cn-t6t,\'w t-_7Z*C5R"b

numeric-ip | hostname

techweb.com.cn4u8T#u!E5M.\*C

 比對單個IPv4位址,可以采用點分四組格式或主機名。當采用主機的時候,在添加規則的時候将被解析為相應的IP。 +p.B'X0](_*P;?#u

l;E#c5C2}!\

 比對于指定的基位址addr(可以是單個IP位址、網絡位址或者是主機名)和掩碼位masklen。例如:1.2.3.4/25或1.2.3.0/25 比對于從1.2.3.0到1.2.3.127的IP位址。 2M/j9{2z'w&h%u7c'G

程式開發,作業系統,伺服器,源碼下載下傳,Linux,Unix,BSD,PHP,Apach,asp,下載下傳,源碼,黑客,安全,技術社群,技術論壇7A'` ^2i4P3\%O"I

addr:mask

 比對于指定的基位址addr(可以是單個位址、網絡位址或主機名)和指定的子網路遮罩mask,用點分四組表示法。例如:1.2.3.4: 255.0.255.0或者1.0.3.0:255.0.255.0比對于1.*.3.*。隻建議在非連續的子網路遮罩中使用這種格式,對于連續的子網路遮罩,請使用addr/masklen格式,它的格式更緊湊,也不容易出錯。     <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script> 閱讀(812) | 評論(0) | 轉發(0) | 0

上一篇:中國陶瓷、衛浴部分知名品牌名單

下一篇:真假火車票鑒定

相關熱門文章

  • OpenBSD系統的檔案布局[轉]...
  • 送給FreeBSD和UNIX的初學者...
  • [原創]OpenBSD Current版本更...
  • [原創]OpenBSD Current版本更...
  • nginx支援泛域名支援的方法...
  • 請教想查12個月的資料條數,看...
  • new/delete 和malloc/free 有...
  • ubuntu下hadoop環境的搭建...
  • 求助:如何用Linux架設ISATAP...
  • redhat圖形界面不出先登入界面...

給主人留下些什麼吧!~~ 評論熱議

bsd