【心得分享】FREESCO的防火牆規則設定心得報告



贊助商連結


rushoun
2005-05-24, 10:09 AM
各位PCZON網友大家好,最近看了許多網友的發表,真是太感動了,
尤其是有關於一些軟體路由器的文章,真是太精采了,小弟也來共襄盛舉,
發表一下FREESCO的一些心得,因為這方面的中文文件真的不多。
如有謬誤,歡迎網友指正,謝謝。

FREESCO防火牆規則編寫篇
前言:

為何要用linux架設防火牆?
這是蠻多人的疑問,市面上的IP分享器,多的如過江之鯽,為何我們要選擇使用linux,而且是單磁片版的linux?其實沒有一定的答案,以我個人的想法,其實是滿單純的。首先是因為有多的電腦閒置在旁邊,因為台灣的電腦真是太便宜了,升級的速度又快,我想每位電腦使用者手邊都多多少少會2部以上的電腦吧?食之無味,棄之可惜。又把一些重要的裝備都拆到新的電腦上頭,所以就電腦就意味者只剩下主機板加上軟碟機而已,可是不用他又覺得可惜,於是軟碟版的linux正好可以解決沒有硬碟的問題,還有就是瞭解一下,什麼是linux啊?

第二點使用單磁片版linux的原因,是因為很多網友都會反映,市售的IP分享器容易有當機或是效能不彰的問題,當然是一分錢一分或啊,基本上也不能太怪罪於IP分享器,因為IP分享器本身也算是一個非常小的電腦,只是它的CPU等級較低,RAM也比較小,因為成本的關係嘛!總不能賣的很貴。所以在網路流量很大時,IP分享器的小腦袋瓜就無法處理了。這個時候,擁有比較大容量記憶體的,而且CPU等級較高階的電腦,就成了我的選擇。其實市售較高階的IP分享器,也就是將這兩個條件昇級,再加上韌體加強,就成為高貴又貴的硬體伺服器了。

第三點我用單磁片版linux的原因,是因為設定安裝容易,當然,IP分享器更簡單了,但是我的重點不是在比較外在的硬體安裝,而是強調功能條件比較之下,單磁片版linux就顯得功能強,安裝又方便。又不會像一般大型的LINUX套件,如Fedora或是RedHat那樣,需要相當功力的USER才能安裝的。單磁片版linux只需要依照開機後的選項,依照自己的網路條件,一樣一樣的設定好,就可以算是一台功能相當強勁的伺服器了,特別強調是伺服器喔,以一個不完全懂linux的user來說,可以完成的簡單伺服器喔。

第四點我用單磁片版linux的原因,就是它維修容易,為何如此說呢?因為它不需要使用到硬碟,因此沒有硬碟壽命的問題,只要磁碟片不壞,它就會持續服務下去,就算因硬體故障而當機(比如電源不穩定),也只需要重新reset就可以了,因為所有的網路相關參數都放在軟碟機中,只需重新開機讀取就可以了。據我個人經驗,我的伺服器已經使用4年多了,除了電源斷電外,重來沒有當機的紀錄,只要安裝UPS,大概就沒機會當機了。安裝完畢後,可以將所有的相關週邊拔除,如鍵盤螢幕等等,我們可透過網路直接監管,最近它也加進了音效提示的功能,讓無螢幕的情形下,使用者可知道它開機是否已成功。

當然它也是有缺點的,就是體積大,因為是一部電腦。還有就是耗電問題,畢竟是一部電腦,不像IP分享器一般體積小,也較省電。有人說它的介面設定麻煩,其實我不這麼認為,因為它的設定方式,我覺得跟設定IP分享器好像差不多,而且我相信,遲早它的設定介面也會像現在的硬體防火牆那麼方便。

零零總總說了那麼多,只是個人的一點看法啦!我是一個窮人,沒法跟上外面硬體的腳步,所以這種可利用舊電腦,軟體又是免錢的,功能又強大,設定又簡單,成了我的不二首選。而且我個人的看法是,現在的CF轉IDE的介面卡愈來愈便宜,只要我將這個freesco轉到CF卡中,不就也是硬體防火牆了嗎?FREESCO也支援植入硬碟的功能,很多server也都能外掛,因為它有數量不少的package可用,有興趣的網友不妨上網查一下,很多喔!最近的版本0.34版,也有支援寬頻管理咧,等我使用過後在報告心得吧,單磁片版的喔。有些小型的社區,其實不妨用它看看,利用廢電腦就可以了。

說明:

寫在前面:

由於本人對linux並沒有很深的研究,純粹是因為要使用這套FREESCO的緣故,所以在這種動力下,上FREESCO的官方網站討論區將一些見到的資料,做了粗淺的整理。如果有說錯的,或是觀念上有不正確的,還請各位先進不吝指正,讓大家能正確的分享我的一點使用心得。畢竟做學問這種東西,對就是對,錯就是錯,不需要去顧慮不切實際的面子問題。同時我的文章內容也是假設您已經看過我之前所發表的文章,應該已經知道FREESCO的相關設定,如果是新使用者,請看看之前的FREESCO文章吧!如果您是硬體設備商,沒有冒犯之意,本文純粹是以一個窮人使用者立場去寫的,目的是要幫助同樣情況的網友,沒時間DIY者或是金錢允許者,請選購方便快速服務又好的硬體防火牆吧,我也強力推薦這麼做。

防火牆指令概述:

我們都知道,linux本身就是一套強調網路功能強悍的OS系統,除了它本身所建立的檔案結構外,最被大家所津津樂道的,就是它在網路服務上強大功能,除了外掛的伺服系統外,本身也透過一些指令來讓使用者,可以建立屬於個人所需要的網路環境。我們常聽說某網站被入侵或被駭,一定又是防火牆有問題等等的說法,這個防火牆的構成,在linux是可由內建的指令,透過類似批次檔的方式被執行著,在linux應該說成是script檔,中文應該稱為描述檔吧?將我們所預設的防火牆規則,一行一行的寫成像程式的指令序列,交由linux系統去執行它,形成所謂的防火牆。

一般常為我們所接觸的linux防火牆指令,是iptables以及ipchains,但是FREESCO本身所使用的核心,也就是我們稱為kernel的東西,它的版本是2.0.x,與我們目前所常接觸到的linux套件,如Fedora或是Redhat的核心2.4.x或2.6.x的版本不同,因此所使用的防火牆指令也不一樣,2.0.x的kernel所用的防火牆指令是ipfwadm指令,因此我們就必須針對這個指令加以瞭解使用方法才行。

ipfwadm指令說明:

如果有操作過linux系統的網友,應該對linux的指令都會留下深刻的印象,就是它的每個指令都有許多的參數,每種參數都有其不同的意義及功能。而參數後面,可能又細分很多的選項,如此構成一條多功能的指令,有就是說一行指令,可能可以完成非常多的事情。同樣的防火牆指令也是由指令加上不同的功能參數及選項,有許多不同功能的指令列,形成最後的防火牆程式,現在將它的指令格式說明如下:

指令格式:

Usage:ipfwadm -A [direction] command [options] (accounting)
Usage:ipfwadm -F command [options] (accounting)
Usage:ipfwadm -I command [options] (accounting)
Usage:ipfwadm -O command [options] (accounting)
Usage:ipfwadm -M [-s | -l] [options] (masquerading entries)
Usage:ipfwadm -h (print this help information)

指令參數說明:

-A 指定記錄 (accounting) 之處理方式
-I 指定準備進入主機內的封包 (incoming packets) 之處理方式
-O 指定準備送往主機外的封包 (outgoing packets) 之處理方式
-F 指定封包轉送 (forwarding) 之處理方式
-M 用來進行 IP masquareding 的管理

由於對這些指令,我瞭解的並不多,而且在FREESCO中我主要是針對封包進入或出去的規則,其他的應用,小弟實在是學問不好,想要深入瞭解的網友,只好另尋相關文章介紹了。 所以我只打算介紹 -I 與 -O 參數,它們兩者都具有相同的語法。

這些參數指令(command)常用的有:

-a 在表單後面加進一個或多個處理方式
-i 在表單前面加入一個或多個處理方式
-d 從表單裡面刪除一個或多個處理方式
-l 顯示表單上面的處理方式
-f 刪除表單上面所有的處理方式
-p 指定哪些封包一定被 acceppted (a)、 denied (d) 或 rejected (r)
-c 檢查某個封包準備進入時, 其應用哪些處理方式
-h 輔助說明

常用的參數指令選項(options):

-P 指定某個表單上, 處理方式所作用到的通訊協定。這裡的通訊協定, 可以是TCP、 UDP、 ICMP 或 all ( 表示所有的通訊協定 ) 。
-S 指定封包的來源位址。 其格式為: ADDRESS[/MASK] [PORT] 舉例來說, 像這樣123.32.34.0/255.255.255.250 25 便代表從 123.32.34.0 到 123.32.34.5 的 IP 範圍。
-D 指定封包的目的位址, 其格式與 -S 相同 。
-W 指定網路介面。

當然還有許多其他的指令及選項,由於小弟我本身並沒有太多的研究,因此無法提供太多的說明解釋,請網友們見諒!

舉例說明:

我想,舉例大概是最快的方法了,可以讓大家很快的瞭解ipfwadm指令的功用。這裡的例子eth0是對外的網路介面,其他如eth1,eth2等等,都是對內部的網路介面。

範例一:

ipfwadm -O -i accept -P tcp -W eth0 -S 0/0 -D 0/0 110

這個例子的作用是設定防火牆對外允許使用POP封包,每個參數說明如下:
-O:表示這個ipfwadm指令是設定對外封包的條件。
-i:insert插入的意思,就是說現在的這個指令被插入目前整個防火牆的序列中的最前面,也就是說,目前的指令它是最先被執行的意思。如果下一個指令也有使用這個i 選項,則以最後使用i 選項的那一個ipfwadm指令被最先執行。所以,當我們事後做防火牆修正時,可以利用這個i 選項,將防火牆指令能在最前面被執行。

accept:允許的意思,就是允許這行ipfwadm指令的設定,這就表示防火牆對於只要是符合目前這一行ipfwadm當中設定條件的封包,是允許通過防火牆的的。

-P:protocol通信協定的意思,這個指令選項後面又可接tcp,udp,icmp及all參數,以本例來說是接tcp參數,有就是說允許tcp封包出去。

-W:指定介面名稱,它的後面接網路介面名稱,這個介面名稱必須是您的linux當中已經為系統所定義好的,以本例來說,eth0是我的對外網路介面。

-S:source來源之意,它的後面接IP位址,以本例來說,0/0是縮寫,應該要寫成0.0.0.0/0,/ 符號後的數字是網路遮罩,在此不做說明,請自行查閱相關的linux文章說明。也就是說這個網路介面接受0.0.0.0/0的來源IP(所有IP)封包,從eth0這個網路介面送出的意思。

-D:distination目的之意,它的後面也是接IP位址,以本例來說,0/0是縮寫,應該要寫成0.0.0.0/0,/ 符號後的數字是網路遮罩,在此不做說明,請自行查閱相關的linux文章說明。它是承接-S的參數,兩者形成來源與目的地IP條件。以本例來說,就是防火牆接受由來源為0/0的IP位址,傳送封包出去,到目的地IP位址為0/0的地方。換句話說就是防火牆內所有的位址,都可以發送port 110的tcp封包到外面的網路中。這個例子的最後面的110這個數字,就是指port 110的意思,而port 110是POP3協定所常用的通信port,就是一般我們使用outlook等離線收發信程式所使用的通信port。

整條指令的解釋就是:從防火牆的規則最前面插入(-i)一條防火牆規則,允許(accept),送出(-O),通訊協定(-P)為tcp的封包,由eth0(-W)這個網路介面所發出,且來源目的(-S)為0/0的IP位址通過,到目的地為0/0的IP的位址,並且目的地的通信port為110的封包通過防火牆。

由上面的例子,我們就可以規範防火牆進出封包的條件,過濾不必要或是不允許的封包,只通過我們所准許通過的,這樣,就可防止網路內因中毒封包竄流,造成網路癱瘓,因為許多像蠕蟲型的病毒,就都是利用對外發送大量的隨機通信port封包,造成網路癱瘓,尤其是像硬體IP分享器這類的設備,非常容易因為處理不了大量的封包而癱瘓當機。

範例二:

ipfwadm -I -i accept -P tcp -W eth0 -S 0/0 -D 0/0 110
這個例子正好是與範例一相反,它是允許相同條件的封包,進入(-I)防火牆內。

在這裡要特別說明一件事,一般來說,我們都會對防火牆出去的封包,設定比較寬鬆的限制,而對封包進入防火牆的條件,設定的條件較為嚴謹。但是基於網路公德心,防止因為自己的防火牆內有人電腦中毒,而導致大量對外發送,會阻礙頻寬的封包,或是會散播病毒的程式。通常也要對防火牆送出的封包加以限制,這個限制方式通常就是利用關閉port的方式來達成。

所以,我們在設定防火牆條件時,輸入與輸出的條件都會像範例一與範例二一般,會成對的設定,如下所示:

ipfwadm -O -i accept -P tcp -W eth0 -S 0/0 -D 0/0 110
ipfwadm -I -i accept -P tcp -W eth0 -S 0/0 -D 0/0 110
也就是從防火牆進跟出的條件,是同時被設定的。一般我們在某個內部區域網路內,有時會發生有些遊戲或是程式無法使用,通常就是因為這個程式或是遊戲的通信port被封鎖所致,而封鎖這port的方式,就是範例中所設定的。這樣,大家是否對這個防火牆指令有一個進一步的瞭解了?

注意事項:

從前面的例子,我都是以單行的指令來解說的,實際上在使用時,這些指令都是由數個指令組合使用,也就是會將這些條列的指令寫成一個script檔,然後由linux系統去讀取,然後依檔案內容去執行相關的設定條件,只要是有發生網路相關的程序,系統都會使用這個防火牆規則檔,去過濾網路封包。

指令當中有一個-i參數,通常它是被利用在臨時增加防火牆規則時使用的,當我們緊急處理一些特殊狀況時,可以利用linux的文字介面,將它拿來先放在一系列防火牆指令的最前面,當我們處理完畢後,可以將這個臨時加入的規則,再寫入script中,因為沒有將它永久寫入防火牆的script中時,當linux系統重新開機後,這個臨時的規則就會消失的,因此最好是將它加入防火牆script中吧。

通常我們在設定防火牆規則時,由於是系統本身是一條一條循序執行規則的。因此,我們在設定規則時,最好的方法就是只通過符合條件的封包,其餘的一律拒絕,這樣才不會有漏失發生。同時要注意,最嚴格的條件要先設定在最前面,較寬鬆的條件要設定在後面,這樣做的原因是,防火牆的規則是逐一往下檢查的,也就是說,只要封包符合這個條件,系統就會立即做出接受或是拒絕,而不會再往下檢查下面的設定條件。因此,如果前面設定的太寬鬆已經讓封包進入,後面就算設定再嚴謹也是沒用的。所以一開始時,最好先設定過濾封包的條件,比如說先讓哪些port的封包可以通過防火牆,逐一檢查完畢後,都沒有符合的條件時,這個封包就會被拒絕忽略掉。

防火牆的設定方式一般有兩種邏輯思考方式,我們可擇一使用。一種邏輯是接受符合設定條件的封包進入,其餘的一率拒絕。另一種邏輯方式是,拒絕不符合設定條件的封包,其餘的一律接受。我所喜歡採用的是第一種方式,比較符合我自己的思維邏輯模式。

FREESCO的防火牆設定規則:前面說了這麼多的有關ipfwadm指令,主要的目的是要讓大家瞭解防火牆的運作方式,並對ipfwadm指令使用方法有個初步瞭解,現在要將它實際的套用在FREESCO中使用。

FREESCO的架構:

其實我對FREESCO的架構並不是非常的瞭解,只是就我自己所知道的加以說明,基本上,FREESCO因為是單磁片版的linux套裝,因此它就不可能像Fedora或是RedHat那樣,有十分龐大的檔案結構,因為要將整個linux放入一片只有1.44mb的磁片中,是必要減少很多的程式或是指令,檔案結構也會有所不同。

如果我們進入freesco的系統後,在命令列打入ls指令時,會看到一些目錄,這些目錄與我們平常看到的linux的目錄是有所不同的。
當我們登入freesco後大概會看到以下的提示:

[root@Freesco]

打入ls指令會看到

bin dev etc lib mnt proc sbin tmp usr var www boot wwa home pkg rc

以上這些目錄,就是freesco的大致架構,可是我必須提醒各位,我們所看到的目錄有的只是freesco在記憶體中所建立的臨時目錄,並不一定是真實在磁碟片中的檔案目錄,因此,我們有些資料在更改時,必須將它真正的寫入磁片中,才算是更改完成。而如果用mnt等指令觀察freesco磁片時,我們看到的都是一些壓縮檔案,這些檔案必須載入到記憶體中後,才被解開執行的,因此要回寫資料到磁片中,必須依照freesco的規定程序去寫入的。對於這點,小弟也沒有真正的深入研究,但是防火牆規則修改的部分,是實際真的被寫入磁片中的。

防火牆規則的檔案位置:

如果我們進入freesco的指令模式後,可以下cd /rc指令進入rc子目錄中,下ls指令後可看到其中有一個rc_user的檔案,這時打edit rc_user指令後,應該就會進入編輯模式,edit 是freesco內的一個簡易編輯程式,至於rc_user這個檔的內容,如下所列:

#!/bin/sh
#
case "$1" in
boot) # Setup devices.
##

##
;;
start) echo -n "Starting rc_user... "
# Use the fork command on programs which normally stay
# in the foreground.
##

##
=
;;
stop) echo -n "Stopping rc_user... "
# Stop your programs.
##

##
=
;;
restart) rc_user stop; rc_user start
;;
firewall)
# $INET always represents the Internet interface.
# Rules here come before standard system rules.
# ipfwadm -I -i deny -P tcp -W $INET -D 0/0 22 -o
##
(.....就是這個區塊......)
##
;;
newip) # Execute commands when the router gets a new external IP
##

##
;;
status) # Add commands that print out your service(s) status.
##

##
;;
esac

請注意firewall)這一行,有#字號的為註解行,不會被linux執行,從註解當中我們就可以知道,從firewall)這一行一直到下一個;;符號之間,就是放置防火牆指令的位置,也就是說只要我們將類似範例一之類的程式,放在這個區塊中就可以了。

還有要注意的就是,freesco本身就已經內建了相關的防火牆規則,因為他原本就是一個router兼防火牆,因此我們要外加一些防火牆規則時,都要寫在這個區塊,而且最好是使用-i 指令選項,將這些外加的防火牆規則,加在整個防火牆規則之前先執行,如果這邊的區塊不寫任何規則,則freesco會依內定的防火牆規則運作,也就是我們以web介面登入freesco系統時所看到的畫面左邊,NetWork訊息內容中----- ipfwadm -I -lne -----這一區塊中的規則。各位可以看到freesco都只是針對Input的部分定義,沒有對Output的部分定義,如果我們要規劃自己的防火牆,就要用這個rc_user檔案內容下手。比如說我們要檔4662port的封包,或是一些不明的中毒封包,就是將規則建立寫好就行了。我的做法前面有說過,因為基於有問題的封包太多,所以就是採用除了允許的封包通過外,其餘的一律拒絕。

當您編輯完rc_user檔案後,記得要先將目前編輯好的檔案存檔,按下ALT+S鍵存檔,ALT+X鍵離開edit編輯程式,然後執行rc_masq restart後,就可以啟動這個新設定好的防火牆規則了。如果實驗後有問題,再重複之前的修改動作即可。

以上是我個人使用freesco的一些心得,僅提出來供網友參考,希望能對象我一樣,沒錢買高階的router,可是又要使用一些高階的功能時,這種簡易版的linux,可以說是非常棒的一種選擇。

實際例子:

其實當初我會使用freesco這套linux作為我的防火牆,純粹是個巧合,因為對於windows的不信任,以及病毒橫行,原本是用一般的windows程式作為防火牆,但是都覺得效果有限,一直到接觸linux這種系統,而且又在一些論壇上有人討論迷你版本的單磁片linux系統,就開始注意它,並且實際的加以使用。

剛開始時,資料的尋找真的是有夠困難,因為中文的文獻資料實在太少了,只好硬著頭皮看英文的文件了,我敢說,就算是我這篇FREESCO的內容,恐怕也是獨一無二的內容吧?接下來的使用都是用在單機條件下,頂多是2~3部電腦的環境,這樣的單存環境,實在很難看出freesco的優點在哪裡。直到最近2年,我們的社區大樓,因為將原本的NT伺服器電腦拿去作為監控用途,它原本是作為社區網路作為DHCP網路伺服器使用,因此管委會就拿了一部IP分享器當頭端,所以,問題從此開始,又由於我們當時的主委是大樓當中的電腦公司老闆,它們的思維都是以硬體來解決,並不會從問題的根本去著手,於是乎硬體越來越高階,可是問題卻沒有任何改進,只是三天兩頭就是網路掛掉,住戶不斷的抱怨,可是問題始終沒有改善。

由於主委的關係,我不便出面擋人財路,更何況他們是電腦公司,養了一批技術人員,我更不便出面了,這樣會讓主委跟他們的工程人員很難看的,因為我根本不是資訊相關方面的專業人士。直到委員任期屆滿,下一任的主委請我幫忙是否能解決這個問題,我當然是希望能讓網路通啊,已經忍耐網路塞車斷線等等的問題很久了,於是接下了這個任務,先捐出自己的一部舊電腦,P-200等級的+32mRAM,網路卡及軟碟機由管委會出錢。也正好讓我的freesco小試一下牛刀,在大約50部電腦上網的環境下,看看是否能穩定的提供服務。

剛開始時,在不加任何設定防火牆規則下,使用FREESCO內定的防火牆規則,看看整個freesco的表現如何?說實在的,初期的運作真的是不太順利,因為當機連連,剛開始一直都找不到原因,直到與同事研究時,才猛然想到,有沒有可能是電源的問題,經過檢查瞭解,才知道原本網路設備用的UPS已經運作很多年了,經過更換後,當機的問題終於獲得解決,住戶們都得以順利上網。可是在這個可以上網的同時,我經由freesco的log檔案中發現了一些奇怪的現象,就是同一個IP位址的連線數量多的驚人,我第一個反應就是有人中毒了!這可以解釋之前以硬體防火牆運作時,為何當機連連的原因了。由於在一秒的時間內就從一個單一IP位址發出千百筆的封包,而且都是隨機的通信port封包,礙於我們的網路環境是採取DHCP方式配發IP,也不太可能採用固定配發的方式,要找出中毒者是相當困難的。當初的主委最後竟然就是採取固定IP配發,在住戶登記同時,分配IP位址以及對住戶進行掃毒,同時還貼公告掃毒要收費200元,沒有登記配發IP位址的住戶,就沒辦法上網了,真是讓我對商人的做法無言以對......。

由於有人的電腦中毒,找出病毒源恐怕又是一件艱鉅的工程,於是我決定採取限制通信port封包的方式,設定防火牆的規則,讓一些常用的port開放,其餘的通通拒絕,於是中毒的封包再也不會干擾我們的網路了,因為它再也出不去了。而且因為將通信port關閉的關係,一些高loading的住戶就自動會自首了。最近又由於BT等P2P的軟體盛行,也造成網路不少負擔,有些住戶又會下載kuro的東西,因此基於公平原則,訂定了網路使用規範,社區網路僅可用於一般上網使用,高負載的下載行為是被禁止的,因此我們關閉了某些下載用的port,僅開放FTP功能,其他大家常用的MSN,YAHOO MESSENGER都是開放的,對於一些遊戲使用port,只要不會佔用太大的頻寬,只要住戶反映,都會予以開放,當然都是在監控當中的,如有異常就會予以關閉。

一直啟用到今天,已經一年有餘了,除了前幾天的台電電力檢修,造成斷電外,這一年來freesco都很穩定的為我們社區在運作服務中,也已經順利的渡過了兩屆管委會。

我們社區的防火牆設定範例:

還在編寫建構中.......完成後再貼出吧!
分享是進步的原動力,希望大家不要藏私,將心得多多的分享吧。

贊助商連結


Spen
2005-05-24, 11:50 AM
這篇文章堪稱精華了.連原理及設定都非常詳細.感謝對中文文件多一份貢獻.

rushoun
2005-05-24, 03:33 PM
不知道有沒有哪位先進有安裝freesco的pkg的經驗,可以發個心得分享一下好嗎?

yub_net
2006-01-09, 09:36 PM
下载freesco的外挂后怎么装?