IPFW

ipfw 是 FreeBSD 內(nèi)建的防火墻指令,我們可以用它來(lái)管理進(jìn)出的網(wǎng)絡(luò)交通。如果防火墻服務(wù)器是扮演著路由器 (gateway 例如上一篇中的 NAT 服務(wù)器) 的角色,則進(jìn)出的封包會(huì)被 ipfw 處理二次,而如果防火墻扮演的是橋接器 (bridge) 的角色,則封包只會(huì)被處理一次。這個(gè)觀念關(guān)系著我們以下所要介紹的語(yǔ)法,有的語(yǔ)法并不適用于橋接器。

我們會(huì)將 firewall 的設(shè)定寫(xiě)在 /etc/rc.firewall 中,每一條設(shè)定都是以先入為主 (first match wins) 的方式來(lái)呈現(xiàn),也就是先符合的規(guī)則 (rules) 為優(yōu)先。所有進(jìn)出的封包都會(huì)被這些規(guī)則過(guò)濾,因此我們會(huì)盡量減少規(guī)則的數(shù)量,以加速處理的速度。

在 kernel 中,關(guān)于防火墻的設(shè)定有下列幾條:

# 防火墻

options IPFIREWALL

# 支援 NAT

options IPDIVERT

# 下面這一行是預(yù)設(shè)允許所有封包通過(guò),如果沒(méi)有這一行,

# 就必須在 /etc/rc.firewall 中設(shè)定封包的規(guī)則。

# 這條規(guī)則內(nèi)定編號(hào)是 65535,也就是所有規(guī)則的最后一條

# 如果沒(méi)有加這一條規(guī)則,內(nèi)定就是拒絕所有封包,

# 只允許規(guī)則中允許的封包通過(guò)。

options IPFIREWALL_DEFAULT_TO_ACCEPT

# 這一行是讓你可以在 ipfw 中設(shè)定要記錄哪些封包,

# 如果沒(méi)有這一行,就算設(shè)定了要留下記錄也不會(huì)有作用。

options IPFIREWALL_VERBOSE

# 這一行是限制每一條規(guī)則所要記錄的封包數(shù)量,

# 因?yàn)橥瑯拥囊?guī)則可能有許多記錄,加上這一條可以使

# 同樣的記錄重復(fù)數(shù)減少,以避免記錄文件爆增。

options IPFIREWALL_VERBOSE_LIMIT=10

# 下面這一行是用來(lái)支援封包轉(zhuǎn)向,

# 當(dāng)你要使用 fwd 動(dòng)作時(shí)必須要有這一項(xiàng)設(shè)定。

options IPFIREWALL_FORWARD

# 如果要使用 pipe 來(lái)限制頻寬,必須加入下列選項(xiàng)以支持 dummynet。

options DUMMYNET

ipfw 也支持狀態(tài)維持 (keep-state) 的功能,就是可以讓符合設(shè)定的規(guī)則以動(dòng)態(tài)的方式來(lái)分配增加規(guī)則 (地址或連接端口) 來(lái)讓封包通過(guò)。也就是說(shuō)防火墻可以記住一個(gè)外流的封包所使用的地址及連接端口,并在接下來(lái)的幾分鐘內(nèi)允許外界響應(yīng)。這種動(dòng)態(tài)分配的規(guī)則有時(shí)間的限制,一段時(shí)間內(nèi)會(huì)檢查聯(lián)機(jī)狀態(tài),并清除記錄。

所有的規(guī)則都有計(jì)數(shù)器記錄封包的數(shù)量、位數(shù)、記錄的數(shù)量及時(shí)間等。而這些記錄可以用 ipfw 指令來(lái)顯示或清除。

在說(shuō)明 ipfw 規(guī)則的語(yǔ)法之前,我們先來(lái)看這個(gè)指令的用法。ipfw 可以使用參數(shù):

指令 說(shuō)明

ipfw add [rule] 新增一條規(guī)則。規(guī)則 (rule) 的語(yǔ)法請(qǐng)參考下一節(jié)的說(shuō)明。

ipfw delete [number] 刪除一條編號(hào)為 number 的規(guī)則。

ipfw -f flush 清除所有的規(guī)則。

ipfw zero 將計(jì)數(shù)統(tǒng)計(jì)歸零。

ipfw list 列出現(xiàn)在所有規(guī)則,可以配合下列參數(shù)使用。

-a 使用 list 時(shí),可以列出封包統(tǒng)計(jì)的數(shù)目。

-f 不要提出確認(rèn)的詢問(wèn)。

-q 當(dāng)新增 (add)、歸零(zero)、或清除 (flush) 時(shí),不要列出任何回應(yīng)。當(dāng)使用遠(yuǎn)程登入,以 script (如 sh /etc/rc.firewall) 來(lái)修改防火墻規(guī)則時(shí),內(nèi)定會(huì)列出你修改的規(guī)則。但是當(dāng)下了 flush 之后,會(huì)立即關(guān)掉所有聯(lián)機(jī),這時(shí)候響應(yīng)的訊息無(wú)法傳達(dá)終端機(jī),而規(guī)則也將不被繼續(xù)執(zhí)行。此時(shí)唯一的方法就是回到該計(jì)算機(jī)前重新執(zhí)行了。在修改防火墻規(guī)則時(shí),最好在計(jì)算機(jī)前修改,以免因?yàn)橐粋€(gè)小錯(cuò)誤而使網(wǎng)絡(luò)聯(lián)機(jī)中斷。

-t 當(dāng)使用 list 時(shí),列出最后一個(gè)符合的時(shí)間。

-N 在輸出時(shí)嘗試解析 IP 地址及服務(wù)的名稱。

-s [field] 當(dāng)列出規(guī)則時(shí),依哪一個(gè)計(jì)數(shù)器 (封包的數(shù)量、位數(shù)、記錄的數(shù)量及時(shí)間) 來(lái)排序。

ipfw規(guī)則

我們?cè)谶^(guò)濾封包時(shí),可以依據(jù)下列的幾個(gè)封包所包含的信息來(lái)處理該封包:

接收或傳送的接口,可以使用接口名稱或地址。

方向,流入或流出。

來(lái)源或目的地的 IP 地址,也可以加上子網(wǎng)掩碼。

通訊協(xié)議,TCP,UDP,ICMP 等。

TCP flags。

IP fragment flag。

IP options。

ICMP 的類(lèi)型。

和封包相關(guān)的 socket User/group ID。

使用 IP 地址或 TCP/UDP 的端口號(hào)來(lái)做為規(guī)則可能蠻危險(xiǎn)的,因?yàn)檫@二種都有可能被以假的信息所蒙騙 (spoof)。但是這二種卻也是最常被使用的方法。

下列為 ipfw rules 的語(yǔ)法:

[number] action [log] proto from src to dist [interface_spec] [option]

使用 [ ] 包起來(lái)的表示可有可無(wú),我們一一為大家說(shuō)明它們的意義:

number:

number 是一個(gè)數(shù)字,用來(lái)定義規(guī)則的順序,因?yàn)橐?guī)則是以先入為主的方式處理,如果你將規(guī)則設(shè)定放在一個(gè)檔案中 ( 如 /etc/rc.firewall ),規(guī)則會(huì)依每一行排列的順序自動(dòng)分配編號(hào)。你也可以在規(guī)則中加上編號(hào),這樣就不需要按順序排列了。如果是在命令列中下 ipfw 指令來(lái)新增規(guī)則的話,也要指定編號(hào),這樣才能讓規(guī)則依我們的喜好排列,否則就會(huì)以指令的先后順序來(lái)排。這個(gè)編號(hào)不要重復(fù),否則結(jié)果可能不是你想要的樣子。

action:

action 表示我們這條規(guī)則所要做的事,可以用的 action 有下列幾個(gè):

命令 意義

allow 允許的規(guī)則,符合則通過(guò)。也可以使用 pass,permit, accept 等別名。

deny 拒絕通過(guò)的規(guī)則。

reject 拒絕通過(guò)的規(guī)則,符合規(guī)則的封包將被丟棄并傳回一個(gè) host unreachable 的 ICMP。

count 更新所有符合規(guī)則的計(jì)數(shù)器。

check-state 檢查封包是否符合動(dòng)態(tài)規(guī)則,如果符合則停止比對(duì)。若沒(méi)有 check-state 這條規(guī)則,動(dòng)態(tài)規(guī)則將被第一個(gè) keep-state 的規(guī)則所檢查。

divert port 將符合 divert sock 的封包轉(zhuǎn)向到指定的 port。

fwd ipaddr[,port] 將符合規(guī)則封包的去向轉(zhuǎn)向到 ipaddr,ipaddr 可以是 IP 地址或是 hostname。如果設(shè)定的 ipaddr 不是直接可以到達(dá)的地址,則會(huì)依本機(jī)即有的 routing table 來(lái)將封包送出。如果該地址是本地地址 (local address),則保留本地地址并將封包送原本指定的 IP 地址。這項(xiàng)設(shè)定通常用來(lái)和 transparent proxy 搭配使用。例如:

# ipfw add 50000 fwd 127.0.0.1,3128 tcp from \

192.168.1.0/24 to any 80

如果沒(méi)有設(shè)定 port ,則會(huì)依來(lái)源封包的 port 將封包送到指定的 IP。使用這項(xiàng)規(guī)則時(shí),必須在 kernel 中設(shè)定選項(xiàng) IPFIREWALL_FORWARD。

pipe pipe_nr 傳遞封包給 dummynet(4) "pipe",用以限制頻寬。使用本語(yǔ)法必須先在核心中加入 option DUMMYNET。請(qǐng) man ipfw 及 man dummynet。

基本語(yǔ)法是先將要設(shè)定頻寬的規(guī)則加入:

ipfw add pipe pipe_nr ....

再設(shè)定該規(guī)則的頻寬:

ipfw pipe pipe_nr config bw B delay D queue Q plr P

這里的 pipe_nr 指的是 pipe 規(guī)則編號(hào),從 1~65535;B 是指頻寬,可以表示為 bit/s、Kbit/s、Mbit/s、Bytes/s、KBytes/s、或 MBytes/s。D 是延遲多少 milliseconds (1/1000)。Q 是 queue size 的大小 (單位為 packages 或 Bytes)。P 是要隨機(jī)丟棄的封包數(shù)量。

例如我們要限制內(nèi)部網(wǎng)域的計(jì)算機(jī)對(duì)外上傳的最大頻寬是 20 KBytes:

ipfw add pipe 1 ip from 192.168.0.1/24 to any in

ipfw pipe 1 config bw 20KBytes/s

log:

如果該規(guī)則有加上 log 這個(gè)關(guān)鍵詞,則會(huì)將符合規(guī)則的封包記錄在 /var/log/security 中。前提是在核心中有設(shè)定 IPFIREWALL_VERBOSE 的選項(xiàng)。有時(shí)因?yàn)橥瑯拥姆獍啵瑫?huì)使記錄文件保有大量相同的記錄,因此我們會(huì)在核心中再設(shè)定 IPFIREWALL_VERBOSE_LIMIT 這個(gè)選項(xiàng),來(lái)限制要記錄多少相同的封包。

proto:

proto 表示 protocol,即網(wǎng)絡(luò)協(xié)議的名稱,如果使用 ip 或 all 表示所有協(xié)議??梢允褂玫倪x項(xiàng)有 ip,all,tcp,udp,icmp 等。

src 及 dist:

src 是封包來(lái)源;dist 是封包目的地。在這二個(gè)項(xiàng)目可以用的關(guān)鍵詞有 any, me, 或是以 <address/mask>[ports] 的方式明確指定地址及端口號(hào)。

若使用關(guān)鍵詞 any 表示使這條規(guī)則符合所有 ip 地址。若使用關(guān)鍵詞 me 則代表所有在本系統(tǒng)接口的 IP 地址。而使用明確指定地址的方式有下列三種:

IP 地址,指定一個(gè) IP,如 168.20.33.45。

IP/bits,如 1.2.3.4/24,表示所有從 1.2.3.0 到 1.2.3.255 的 IP 都符合規(guī)則。

IP:mask,由 IP 加上子網(wǎng)掩碼,如 1.2.3.4:255.255.240.0 表示從 1.2.0.0 到 1.2.15.255 都符合。

而在 me, any 及 指定的 ip 之后還可以再加上連接埠編號(hào) (ports),指定 port 的方法可以是直接寫(xiě)出 port ,如 23;或給定一個(gè)范圍,如 23-80;或是指定數(shù)個(gè) ports,如 23,21,80 以逗點(diǎn)隔開(kāi)?;蛘呤菍?xiě)出在 /etc/services 中所定義的名稱,如 ftp,在 services 中定義是 21,因此寫(xiě) ftp 則代表 port 21。

interface-spec:

interface-spec 表示我們所要指定的網(wǎng)絡(luò)接口及流入或流出的網(wǎng)絡(luò)封包。我們可以使用下列幾個(gè)關(guān)鍵詞的結(jié)合:

關(guān)鍵詞 意義

in 只符合流入的封包。

out 只符合流出的封包。

via ifX 封包一定要經(jīng)過(guò)接口 ifX,if 為接口的代號(hào),X 為編號(hào),如 vr0。

via if* 表示封包一定要經(jīng)過(guò)接口 ifX,if 為接口的代號(hào),而 * 則是任何編號(hào),如 vr* 代表 vr0,vr1,...。

via any 表示經(jīng)過(guò)任何界面的封包。

via ipno 表示經(jīng)過(guò) IP 為 ipno 界面的封包。

via 會(huì)使接口永遠(yuǎn)都會(huì)被檢查,如果用另一個(gè)關(guān)鍵詞 recv ,則表示只檢查接收的封包,而 xmit 則是送出的封包。這二個(gè)選項(xiàng)有時(shí)也很有用,例如要限制進(jìn)出的接口不同時(shí):

ipfw add 100 deny ip from any to any out recv vr0 xmit ed1

recv 接口可以檢查流入或流出的封包,而 xmit 接口只能檢查流出的封包。所以在上面這里一定要用 out 而不能用 in,只要有使用 xmit 就一定要使用 out。另外,如果 via 和 recv 或 xmit 一起使用是沒(méi)有效的。

有的封包可能沒(méi)有接收或傳送的接口:例如原本就由本機(jī)所送出的封包沒(méi)有接收接口,而目的是本機(jī)的封包也沒(méi)有傳送界面。

options:

我們?cè)倭谐鲆恍┏S玫?option 選項(xiàng) ,更多選項(xiàng)請(qǐng) man ipfw:

選項(xiàng)名稱 意義

keep-state 當(dāng)符合規(guī)則時(shí),ipfw 會(huì)建立一個(gè)動(dòng)態(tài)規(guī)則,內(nèi)定是讓符合規(guī)則的來(lái)源及目的地使用相同的協(xié)議時(shí)就讓封包通過(guò)。這個(gè)規(guī)則有一定的生存期限 (lift time,由 sysctl 中的變量所控制),每當(dāng)有新的封包符合規(guī)則時(shí),便用重設(shè)生存期限。

bridged 只符合 bridged 的封包。

established 只適用于 TCP 封包,當(dāng)封包中有 RST 或 ACK bits 時(shí)就符合。

uid xxx 當(dāng)使用者 uid 為 xxx 則符合該規(guī)則。例如,我們?nèi)绻拗?Anonymous FTP 的下載速度最大為 64KB/s,則可以使用:

ipfw pipe 1 config bw 512Kbit/s

ipfw add pipe 1 tcp from me to any uid 21

上列規(guī)則第一行是先建一個(gè)編號(hào)為 1 的 pipe,限制頻寬為 512 Kbit/s (也就是 64 KByte/s),接著第二條是當(dāng)使用者 uid 為 21 時(shí),從本機(jī) (me) 下載的 tcp 封包都使用編號(hào) 1 的 pipe。因?yàn)?Anonymous FTP 的使用者是 ftp,它的預(yù)設(shè) uid 為 21,所以這條規(guī)則會(huì)被套用在 Anonymous FTP user 上。

setup 只適用于 TCP 封包,當(dāng)封包中有 SYN bits 時(shí)就符合。

以上的說(shuō)明只是 man ipfw 中的一小部份。如果你想要對(duì) ipfw 更了解,例如如何使用 ipfw 來(lái)限制頻寬等,建議你 man ipfw。

不知道您看了這么多的規(guī)則是否覺(jué)得眼花繚亂,如果不了解 TCP/IP 的原理,徹底了解 ipfw 的設(shè)定還真不容易。沒(méi)關(guān)系,我們下面將舉幾個(gè)簡(jiǎn)單、常用的設(shè)定,這些范例應(yīng)該夠平常使用了。

范例

我將原本的 /etc/rc.firewall 備份成 rc.firewal.old,并將它改成下列內(nèi)容,請(qǐng)注意,這里只是范例,只供參考:

# 設(shè)定我的 IP

myip="1.2.3.4"

# 設(shè)定對(duì)外的網(wǎng)絡(luò)卡代號(hào)

outif="vr0"

# 設(shè)定對(duì)內(nèi)的網(wǎng)絡(luò)上代號(hào)

inif="vr1"

#清除所有的規(guī)則

/sbin/ipfw -f flush

# Throw away RFC 1918 networks

$ add deny ip from 10.0.0.0/8 to any in via $

$ add deny ip from 172.16.0.0/12 to any in via $

$ add deny ip from 192.168.0.0/16 to any in via $

# 只允許內(nèi)部網(wǎng)絡(luò)對(duì) 192.168.0.1 使用 telnet 服務(wù)

/sbin/ipfw add 200 allow tcp from 192.168.0.1/24 to 192.168.0.1 telnet

# 拒絕其它人連到 port 23,并記錄嘗試聯(lián)機(jī)的機(jī)器

/sbin/ipfw add 300 deny log tcp from any to me 23

# 拒絕任何 ICMP 封包

/sbin/ipfw add 400 deny icmp from any to any

# 下面這臺(tái)機(jī)器是壞人,不讓它進(jìn)來(lái),并記錄下來(lái)

/sbin/ipfw add 1100 deny log all from 211.21.104.102 to any

# NAT 的設(shè)定

/sbin/ipfw add divert natd all from any to any via vr0

# 限制內(nèi)部網(wǎng)域?qū)ν庀螺d最大頻寬為 20KBytes/s,上傳最大頻寬為 5KBytes/s

ipfw pipe 20 config bw 20KBytes/s

ipfw add pipe 20 ip from any to 192.168.0.1/24 out

ipfw pipe 30 config bw 5KBytes/s

ipfw add pipe 30 ip from 192.168.0.1/24 to any in

# 允許本機(jī)對(duì)任何地方聯(lián)機(jī)

/sbin/ipfw add check-state

/sbin/ipfw add 2000 allow udp from $ to any keep-state

/sbin/ipfw add 2100 pass ip from $ to any

# 允許外界使用郵件服務(wù)

/sbin/ipfw add 3000 pass tcp from any to $ 25 in via $

# 不允許內(nèi)部的 IP 從外部連進(jìn)來(lái)

/sbin/ipfw add 1200 add deny ip from $/24 to any in via $

# 其它都拒絕,如果沒(méi)有在 kernel 中設(shè)定

# IPFIREWALL_DEFAULT_TO_ACCEPT 則內(nèi)定就有下列這一條

/sbin/ipfw 65535 add deny all from any to any

存盤(pán)后就可以使用 sh rc.firewall 來(lái)執(zhí)行新的規(guī)則了。如果您將規(guī)則放在 /etc/rc.firewall 中,則開(kāi)機(jī)時(shí)會(huì)自動(dòng)執(zhí)行。

一些小建議

在建立一個(gè)封包過(guò)濾的防火墻時(shí),應(yīng)該盡可能阻擋一些不必要的服務(wù)。避免開(kāi)放 port 1024 以下的 TCP 服務(wù),例如只通過(guò) SMTP 封包 (port 25) 給郵件服務(wù)器;拒絕所有 UDP 聯(lián)機(jī) (只有少部份服務(wù)如 NFS 會(huì)用到);一些只有內(nèi)部才會(huì)使用的服務(wù),如數(shù)據(jù)庫(kù)等也不必對(duì)外開(kāi)放。

另外,同樣的防火墻限制可以使用不同的語(yǔ)法來(lái)展現(xiàn),應(yīng)該要試著讓規(guī)則數(shù)量越少越好,以加快處理速度。

在更新 firewall 規(guī)則時(shí),如果規(guī)則沒(méi)有寫(xiě)好,而你又是以遠(yuǎn)程登入的方式修改規(guī)則,很可能會(huì)因此無(wú)法繼續(xù)登入。因此建議更新規(guī)則時(shí)最好在 console 前執(zhí)行,若迫不得已一定要使用遠(yuǎn)程登入,建議您執(zhí)行 /usr/share/examples/ipfw/change_rules.sh 這支程序來(lái)編輯規(guī)則:

# cd /usr/share/examples/ipfw

# sh change_rules.sh

接著會(huì)出現(xiàn)文書(shū)編輯軟件并最動(dòng)加載 /etc/rc.firewall 讓你編輯,結(jié)束離開(kāi)后,會(huì)詢問(wèn)是否要執(zhí)行更新。如果執(zhí)行新的規(guī)則后造成斷線,它會(huì)自動(dòng)加載舊的規(guī)則,讓我們可以再次聯(lián)機(jī)。

封包過(guò)濾橋接器

如果您有三臺(tái)機(jī)器全部都有 public IP,而您想使用其中一臺(tái)做為防火墻,在不改變另外二臺(tái)機(jī)器的設(shè)定下,我們可以使具封包過(guò)濾的橋接器來(lái)架設(shè)防火墻。只要將這臺(tái)橋接器放在另外二臺(tái)和對(duì)外網(wǎng)絡(luò)之間即可。

另外,當(dāng)我們的內(nèi)部網(wǎng)絡(luò)有不同 class 的主機(jī)時(shí),例如內(nèi)部有 140.115.2.3 及 140.115.5.6 這二臺(tái)計(jì)算機(jī)時(shí),就無(wú)法使用傳統(tǒng)的防火墻。如果要在這二臺(tái)機(jī)器連到因特網(wǎng)中途中使用防火墻,我們必須使用新的方式,也可以使用這里介紹的橋接器。

我們可以使用 FreeBSD 為橋接器,利用它來(lái)做封包過(guò)濾的動(dòng)作,而絲毫不影響內(nèi)部的主機(jī)原本的設(shè)定。為了達(dá)到這個(gè)功能,我們必需要有二張支持 promiscuous mode 的網(wǎng)絡(luò)卡,現(xiàn)在的網(wǎng)絡(luò)卡大部份都有支持。二張網(wǎng)絡(luò)卡當(dāng)中,一張需要設(shè)定 IP,另一張不需要。至于您要將 IP 設(shè)定在哪一張卡都可以,建議是設(shè)在對(duì)外的網(wǎng)絡(luò)卡上。

首先,我們必須在核心中加入關(guān)于橋接器的設(shè)定:

# 支援橋接器

options BRIDGE

# 防火墻設(shè)定

options IPFIREWALL

options IPFIREWALL_VERBOSE

# 我們這里不將防火墻預(yù)設(shè)為接收所有封包

#options IPFIREWALL_DEFAULT_TO_ACCEPT

如果您要讓橋接器具有流量控制的功能,則可以加上之前提到的選項(xiàng)「options DUMMYNET」。重新編譯核心后,在重開(kāi)機(jī)前,我們先設(shè)定一下 /etc/rc.conf:

firewall_enable="YES"

firewall_type="open"

還有一件事要做,當(dāng)在以太網(wǎng)絡(luò)上跑 IP 協(xié)議時(shí),事實(shí)上使用二種以太網(wǎng)絡(luò)協(xié)議,一個(gè)是 IP,另一個(gè)是 ARP。ARP 協(xié)定是當(dāng)機(jī)器要找出給定 IP 地址所對(duì)應(yīng)的以太網(wǎng)絡(luò)地址時(shí)使用的。ARP 并不是 IP 層的一部份,只是給 IP 應(yīng)用在以太網(wǎng)絡(luò)上運(yùn)作。標(biāo)準(zhǔn)的防火墻規(guī)則中并未加入對(duì)于 ARP 的支持,幸運(yùn)的是,高手們的在 ipfirewall 程序代碼中加入了對(duì)封包過(guò)濾橋接器的支持。如果我們?cè)?IP 地址 0.0.0.0 上建立一個(gè)特別的 UDP 規(guī)則,UDP 端口的號(hào)碼將被使用來(lái)搭配被橋接封包的以太網(wǎng)絡(luò)協(xié)議號(hào)碼,如此一來(lái),我們的橋接器就可以被設(shè)定成傳遞或拒絕非 IP 的協(xié)議。請(qǐng)?jiān)?/etc/rc.firewall 中接近文件頂端處理 lo0 的那三行之下(就是有寫(xiě) Only in rare cases do you want to change these rules 的地方)加入下面一行:

$ add allow udp from 0.0.0.0 2054 to 0.0.0.0

現(xiàn)在我們就可以重新開(kāi)機(jī)了。重開(kāi)機(jī)之后,先執(zhí)行下列指令來(lái)啟動(dòng)橋接器:

如果您使用的是 FreeBSD 4.x:

# sysctl -w net.link.ether.bridge_ipfw=1

# sysctl -w net.link.ether.bridge=1

如果您使用的是 FreeBSD 5.x:

# sysctl -w net.link.ether.bridge.ipfw=1

# sysctl -w net.link.ether.bridge.enable=1

現(xiàn)在我們可以將機(jī)器放在內(nèi)外二個(gè)網(wǎng)域之間了。因?yàn)槲覀冎霸?/etc/rc.conf 中,設(shè)定防火墻完全打開(kāi),不阻擋任何封包,所以放在二個(gè)網(wǎng)域之間時(shí),運(yùn)作應(yīng)該沒(méi)有問(wèn)題。我們之前只設(shè)了一張網(wǎng)絡(luò)上的 IP,而在執(zhí)行了上述的指令之后,第二張網(wǎng)絡(luò)卡便開(kāi)始運(yùn)作。

下一步就是將我們啟動(dòng)橋接器的指令放在 /etc/rc.local 中,讓系統(tǒng)在開(kāi)機(jī)時(shí)自動(dòng)執(zhí)行?;蛘撸覀兛梢栽?/etc/sysctl.conf 中加入下面二行:

# 如果您使用的是 FreeBSD 4.x

net.link.ether.bridge_ipfw=1

net.link.ether.bridge=1

# 如果您使用的是 FreeBSD 5.2 以后的版本

net.link.ether.bridge.enable=1

net.link.ether.bridge.ipfw=1

接下來(lái)我們就可以依自己的需求在 /etc/rc.firewall 文件的最后面加上我們自己想要的防火墻規(guī)則了。以下是一個(gè)簡(jiǎn)單的設(shè)定規(guī)則,假設(shè)橋接器的 IP 是 140.115.75.137,內(nèi)部有二臺(tái)主機(jī),一臺(tái)提供網(wǎng)頁(yè)服務(wù),一臺(tái)是 BBS:

us_ip=140.115.75.137

basrv_ip=140.115.3.4

bbs_ip=140.115.5.6

oif=fxp0

iif=fxp1

ipfw="/sbin/ipfw"

# Things that we've kept state on before get to go through in a hurry.

$ 1000 add check-state

# Throw away RFC 1918 networks

$ 1100 add deny ip from 10.0.0.0/8 to any in via $

$ 1200 add deny log ip from 172.16.0.0/12 to any in via $

$ 1300 add deny log ip from 192.68.0.0/16 to any in via $

# 允許橋接器本身所有想做的聯(lián)機(jī) (keep state if UDP)

$ 1400 add pass udp from $ to any keep-state

$ 1500 add pass ip from $ to any

# 允許內(nèi)部網(wǎng)絡(luò)任何想做的聯(lián)機(jī) (keep state if UDP)

$ 1600 add pass udp from any to any in via $ keep-state

$ 1700 add pass ip from any to any in via $

# 允許任何的 ICMP 聯(lián)機(jī)

$ 1800 add pass icmp from any to any

# 不允許使用 port 888 聯(lián)機(jī)

$ 2000 add deny log tcp from any to $ 888

# TCP section

# 任何地方都可以建立 TCP 聯(lián)機(jī)

$ 3000 add pass tcp from any to any via $

# Pass the "quarantine" range.

$ 3100 add pass tcp from any to any 49152-65535 in via $

# Pass ident probes. It's better than waiting for them to timeout

$ 3200 add pass tcp from any to any 113 in via $

# Pass SSH.

$ 3300 add pass tcp from any to any 22 in via $

# Pass DNS. 當(dāng)內(nèi)部網(wǎng)絡(luò)有名稱服務(wù)器時(shí)才需要

#$ add pass tcp from any to any 53 in via $

# 只傳遞 SMTP 給郵件服務(wù)器

$ 3400 add pass tcp from any to $ 25 in via $

$ 3500 add pass tcp from any to $ 25 in via $

# UDP section

# Pass the "quarantine" range.

$ 4000 add pass udp from any to any 49152-65535 in via $

# Pass DNS. 當(dāng)內(nèi)部網(wǎng)絡(luò)有名稱服務(wù)器時(shí)才需要

#$ 4100 add pass udp from any to any 53 in via $

# 其它的都拒絕

$ 60000 add deny ip from any to any

IPFW造價(jià)信息

市場(chǎng)價(jià) 信息價(jià) 詢價(jià)
材料名稱 規(guī)格/型號(hào) 市場(chǎng)價(jià)
(除稅)
工程建議價(jià)
(除稅)
行情 品牌 單位 稅率 供應(yīng)商 報(bào)價(jià)日期
暫無(wú)數(shù)據(jù)
材料名稱 規(guī)格/型號(hào) 除稅
信息價(jià)
含稅
信息價(jià)
行情 品牌 單位 稅率 地區(qū)/時(shí)間
暫無(wú)數(shù)據(jù)
材料名稱 規(guī)格/需求量 報(bào)價(jià)數(shù) 最新報(bào)價(jià)
(元)
供應(yīng)商 報(bào)價(jià)地區(qū) 最新報(bào)價(jià)時(shí)間
暫無(wú)數(shù)據(jù)

另外,我們?cè)谠O(shè)定防火墻時(shí)有二種模式,一種模式是預(yù)設(shè)拒絕所有聯(lián)機(jī),再一條一條加入允許的聯(lián)機(jī);另一種是預(yù)設(shè)接受所有聯(lián)機(jī),加入幾條拒絕的規(guī)則。如果是非常強(qiáng)調(diào)安全性,應(yīng)該是使用預(yù)設(shè)拒絕所有聯(lián)機(jī),再一條一條加入我們?cè)试S的規(guī)則。

IPFW常見(jiàn)問(wèn)題

IPFW文獻(xiàn)

用IPFW為匯文服務(wù)器定制透明網(wǎng)橋防火墻 用IPFW為匯文服務(wù)器定制透明網(wǎng)橋防火墻

格式:pdf

大?。?span id="ptm1mxn" class="single-tag-height">432KB

頁(yè)數(shù): 未知

評(píng)分: 4.6

基于匯文服務(wù)器的網(wǎng)絡(luò)環(huán)境特點(diǎn),運(yùn)用IPFW制作一個(gè)透明網(wǎng)橋防火墻,對(duì)其動(dòng)態(tài)規(guī)則進(jìn)行分析,作出一個(gè)適合數(shù)據(jù)庫(kù)長(zhǎng)連接的規(guī)則集.另外,對(duì)oracle數(shù)據(jù)庫(kù)的端口復(fù)用及連接保活進(jìn)行了較為深入地探討.實(shí)踐表明:透明網(wǎng)橋式接入點(diǎn)具有隱蔽性,可避免多種攻擊,可避開(kāi)一般3層防火墻的NAT帶給oracle應(yīng)用程序的局限性.

立即下載
IPFW相關(guān)推薦
  • 相關(guān)百科
  • 相關(guān)知識(shí)
  • 相關(guān)專(zhuān)欄

最新詞條

安徽省政采項(xiàng)目管理咨詢有限公司 數(shù)字景楓科技發(fā)展(南京)有限公司 懷化市人民政府電子政務(wù)管理辦公室 河北省高速公路京德臨時(shí)籌建處 中石化華東石油工程有限公司工程技術(shù)分公司 手持無(wú)線POS機(jī) 廣東合正采購(gòu)招標(biāo)有限公司 上海城建信息科技有限公司 甘肅鑫禾國(guó)際招標(biāo)有限公司 燒結(jié)金屬材料 齒輪計(jì)量泵 廣州采陽(yáng)招標(biāo)代理有限公司河源分公司 高鋁碳化硅磚 博洛尼智能科技(青島)有限公司 燒結(jié)剛玉磚 深圳市東海國(guó)際招標(biāo)有限公司 搭建香蕉育苗大棚 SF計(jì)量單位 福建省中億通招標(biāo)咨詢有限公司 泛海三江 威海鼠尾草 Excel 數(shù)據(jù)處理與分析應(yīng)用大全 廣東國(guó)咨招標(biāo)有限公司 甘肅中泰博瑞工程項(xiàng)目管理咨詢有限公司 山東創(chuàng)盈項(xiàng)目管理有限公司 當(dāng)代建筑大師 廣西北纜電纜有限公司 拆邊機(jī) 大山檳榔 上海地鐵維護(hù)保障有限公司通號(hào)分公司 甘肅中維國(guó)際招標(biāo)有限公司 舌花雛菊 湖北鑫宇陽(yáng)光工程咨詢有限公司 GB8163標(biāo)準(zhǔn)無(wú)縫鋼管 中國(guó)石油煉化工程建設(shè)項(xiàng)目部 華潤(rùn)燃?xì)猓ㄉ虾#┯邢薰? 韶關(guān)市優(yōu)采招標(biāo)代理有限公司 莎草目 建設(shè)部關(guān)于開(kāi)展城市規(guī)劃動(dòng)態(tài)監(jiān)測(cè)工作的通知 電梯平層準(zhǔn)確度 廣州利好來(lái)電氣有限公司 四川中澤盛世招標(biāo)代理有限公司