近來(lái)在各項(xiàng)Internet的應(yīng)用已迅速席卷全球之時(shí),「網(wǎng)路安全」的問(wèn)題也開(kāi)始引起了大多數(shù)人的關(guān)切,而基於這個(gè)問(wèn)題而發(fā)展出"Firewall"(防火墻)如此的產(chǎn)物,利用它來(lái)防止外部網(wǎng)路不速之客的入侵。此文要將"Firewall"和"Linux"做一個(gè)結(jié)合,介紹各位來(lái)架設(shè)Linux的防火墻。
各位Linux的老朋友新朋友好久沒(méi)有在紙上相見(jiàn),希望能藉這個(gè)難得的機(jī)會(huì)用短短的文章和大家多多分享這敝人的小小心得。
自從國(guó)家資訊高速公路(NII)的推動(dòng)以來(lái),相繼的TANET、SeedNet、HiNet的苦心經(jīng)營(yíng),Internet幾乎已經(jīng)成為各家雜志的熱烈話題,而「加入Internet、利用Internet」也成為建立企業(yè)形象的一種方式。在一陣Internet風(fēng)潮騷動(dòng)之下,有人就開(kāi)始擔(dān)心所謂的「網(wǎng)路安全」問(wèn)題。因?yàn)镮nternet的開(kāi)放,而使得所有成員的受惠,但也因?yàn)樗拈_(kāi)放,所以更要考慮這個(gè)「網(wǎng)路安全」的問(wèn)題。這一次咱們要談?wù)劦脑掝}就是因?yàn)檫@個(gè)原因而開(kāi)始的—"Firewall"(防火墻)就是基於這個(gè)「網(wǎng)路安全」考量之下的一個(gè)產(chǎn)物。
我們可以在內(nèi)部網(wǎng)路與外面網(wǎng)路連接之間,設(shè)置一個(gè)具有Firewall功能的機(jī)器,利用它來(lái)過(guò)濾這兩個(gè)網(wǎng)路之間相互傳輸?shù)馁Y料,然後透過(guò)相關(guān)軟體的設(shè)定來(lái)限制不同使用者所可以使用的網(wǎng)路功能。由外部網(wǎng)路要傳送至內(nèi)部網(wǎng)路的資料一定要透過(guò)設(shè)置了Firewall這個(gè)機(jī)器來(lái)轉(zhuǎn)送,內(nèi)部網(wǎng)路的資料也透過(guò)這個(gè)Firewall將資料正確的傳送位於外部網(wǎng)路上的目的地。身為Firewall的機(jī)器就成了網(wǎng)路間的轉(zhuǎn)運(yùn)站。因此當(dāng)「外星訪客」蒞臨時(shí),由於他的腳步僅到達(dá)Firewall,所以在最差的情形是這個(gè)「Firewall機(jī)器被摧毀了!!」,但是內(nèi)部網(wǎng)路卻可以逃過(guò)一劫而「茍活」下來(lái),基於犧牲小我完成大我的原則下,這樣的代價(jià)似乎是值得的。
雖然這樣的手續(xù)似乎相當(dāng)繁瑣,但是也因?yàn)槿绱耍喽嗌偕倏梢苑乐挂恍┩獠烤W(wǎng)路不速之客的入侵,以確保內(nèi)部網(wǎng)路的安全。另一方面也可以限制內(nèi)部網(wǎng)路對(duì)外部網(wǎng)路的通訊,做另一層網(wǎng)路資料流控管。當(dāng)然,為了這個(gè)安全問(wèn)題,我們得犧牲不少「便利」、「速度」上的享受,但是事情總是會(huì)有個(gè)彌補(bǔ)的方式的,這些都將會(huì)是我們所涉及的內(nèi)容。
Firewall的架設(shè)型態(tài)并非唯一的,這完全要看作業(yè)系統(tǒng)以及Firewall軟體的功能來(lái)看。上面的圖形就是一個(gè)最簡(jiǎn)單的Firewall架構(gòu)。在前面講了一些Firewall的字眼後,得和我們的主角"Linux"做一個(gè)結(jié)合,開(kāi)始真正的跳入我們的重點(diǎn)—「如何利用Linux架設(shè)一個(gè)Firewall」。
將Firewall功能加入Linux核心之中
自從Linux1.2.x之後的Kernel編譯設(shè)定中,就加入CONFIG_FIREWALL的選項(xiàng),由於事關(guān)幾個(gè)系統(tǒng)呼叫函式的功能,因此如果要將Linux設(shè)定為具有Firewall的機(jī)器,那麼就要先確定,所使用的LinuxKernel已經(jīng)將Firewall功能納入了!!
當(dāng)然,最穩(wěn)當(dāng)?shù)姆绞骄褪侵匦戮幾gLinuxKernel,并且將CONFIG_IP_FIREWALL設(shè)為"Yes"。還有一點(diǎn)需要注意的就是「架設(shè)一個(gè)最基本的LinuxFirewall時(shí),必須要將該部LinuxMachine的IP_Forwarding功能去除」,我們利用下面的圖示來(lái)稍作解釋。所以在處理Kernel重新編譯的工作執(zhí)行"makeconfig"時(shí),請(qǐng)?zhí)貏e將下列選擇項(xiàng)目仔細(xì)考慮加入。
1.NetworkSupport(CONFIG_NET)[y]
2.TCP/IPnetworking(CONFIG_INET)[y]
3.IPforwarding/gatewaying(CONFIG_IP_FORWARD)[n]
4.IPfirewalling(CONFIG_IP_FIREWALL)[y]
5.IPaccounting(CONFIG_IP_ACCT)[y]
6.SLIP或PPP驅(qū)動(dòng)程式(如果對(duì)外來(lái)連接是利用撥接或?qū)>€時(shí))
Ex:PPP(Point-to-point)support(CONFIG_PPP)[y]
7.個(gè)人網(wǎng)路卡驅(qū)動(dòng)程式(用來(lái)連接內(nèi)部區(qū)域網(wǎng)路時(shí))
Ex:NE2000/NE1000support(CONFIG_NE2000)[y]
然後,接著執(zhí)行「makedep;makeclean;makezImage」等等的編譯工作(關(guān)於詳細(xì)的Kernel重新編譯請(qǐng)讀者自行參考前幾期光碟月刊內(nèi)的詳細(xì)說(shuō)明)
(備注:在發(fā)展中的Linux1.3.x將加入另一種Firewall的功能,稱(chēng)為ip_masquerade,他是將目前由外部軟體來(lái)轉(zhuǎn)送資料的方式改為由Kernel內(nèi)部直接來(lái)處理,聽(tīng)起來(lái)相當(dāng)不錯(cuò)的消息,不過(guò)都尚在發(fā)展測(cè)試階段,敬告諸位,如果要安全一點(diǎn),先不要使用,帶運(yùn)作穩(wěn)定後在愉快用之)
產(chǎn)生新的Kernel後,請(qǐng)將產(chǎn)生的zImage或vmlinuz移至根目錄(或是其他啟動(dòng)目錄),然後如果你使用LILO請(qǐng)務(wù)必再執(zhí)行「LILO」一次,更新啟動(dòng)資料,然後重新啟動(dòng)Linux。
進(jìn)入新的Linux後,為了確保萬(wàn)一,請(qǐng)觀察/proc/net/snmp的內(nèi)容,執(zhí)行方式如下:
simon:/proc/net#catsnmp
1.→Ip:ForwardingDefaultTTLInReceivesInHdrErrors....(省略)
2.→Ip:06412000001212000000000
Icmp:InMsgsInErrorsInDestUnreachsInTimeExcds....(省略)
Icmp:00000000000000000000000000
Tcp:RtoAlgorithmRtoMinRtoMaxMaxConnActiveOpens....(省略)
Tcp:000000000000
Udp:InDatagramsNoPortsInErrorsOutDatagrams
Udp:120012
請(qǐng)對(duì)照1.2.行的說(shuō)明與內(nèi)容值,如果2.的第一個(gè)值為0,則表示IP_Forwarding的功能并未被包含於Kernel中。所以,請(qǐng)執(zhí)行此命令來(lái)檢查是否真的將IPForwarding的功能已經(jīng)被關(guān)掉了!!
設(shè)定網(wǎng)路位址
在確定Linux具有Firewall的功能後,接下來(lái)要做的就是設(shè)定網(wǎng)路的位址,首先先處理對(duì)外的部份,既然這臺(tái)Linux需要對(duì)外連線,那麼理所當(dāng)然就應(yīng)該會(huì)有一個(gè)經(jīng)過(guò)授權(quán)的命名位址、而且是唯一的。以Internet而言這個(gè)網(wǎng)路位址(IPAddress)是世界唯一的,也不可以有第二個(gè),否則會(huì)有打架的情形,所以就不需要太傷腦筋了!!不過(guò)就因?yàn)閷?duì)外的位址一定要唯一的,所以在設(shè)定內(nèi)部網(wǎng)路的位址(IPAddress)時(shí),就得考慮周延一點(diǎn),否則如果有內(nèi)部機(jī)器與外部網(wǎng)路位址相同時(shí),F(xiàn)irewall機(jī)器將可能不知道如何將資料傳至正確位置。
下面是有些特別保留給內(nèi)部網(wǎng)路使用的IPAddress范圍:
10.0.0.0-10.255.255.255
172.16.0.0-172.31.255.255
192.168.0.0-192.168.255.255
如果,有需要不妨將不存在於Internet的內(nèi)部網(wǎng)路位址設(shè)定在這個(gè)范圍之內(nèi),這樣才不會(huì)影響到FirewallMachine在轉(zhuǎn)運(yùn)資料時(shí)的錯(cuò)誤。
測(cè)試網(wǎng)路的線路
再來(lái)的步驟是測(cè)試網(wǎng)路的連線,請(qǐng)注意,因?yàn)檫@時(shí)Linux是個(gè)FirewallMachine,所以,內(nèi)部網(wǎng)路上的機(jī)器無(wú)法直接由本身機(jī)器與外面連線,同樣的外面網(wǎng)路的機(jī)器也無(wú)法直接連到內(nèi)部網(wǎng)路的機(jī)器,但是,他們都應(yīng)該可以連到這臺(tái)Firewall上來(lái)。
因此,接下來(lái)我們得分別測(cè)試由這臺(tái)LinuxFirewallMachine與外面網(wǎng)路的連線是否正常,然後在測(cè)試由內(nèi)部網(wǎng)路上的機(jī)器與這臺(tái)Linux是否可以維持正常的連線情形。
千萬(wàn)不要硬是要試著由內(nèi)部網(wǎng)路上的機(jī)器直接去與外面的某臺(tái)機(jī)器進(jìn)行連線,這是理論與實(shí)際都不可能的,一來(lái)因?yàn)橛辛薋irewall,二來(lái)內(nèi)部網(wǎng)路上的任何機(jī)器(除了這臺(tái)Firewall之外)本來(lái)就不屬於外面網(wǎng)路的一員(也就是沒(méi)有專(zhuān)屬的網(wǎng)路位址IPAddress)。
設(shè)定限制網(wǎng)路的功能
架建Firewall的目的是在於安全的考量。雖然有了Firewall的一層阻擋,可以稍作某程度的保護(hù),但是如果在這臺(tái)Firewall上,開(kāi)放所有網(wǎng)路的功能,那不就等於一個(gè)完全的公開(kāi),這樣似乎還不太恰當(dāng)。因此,既然要達(dá)到安全控管的目的所以就要對(duì)於FirewallMachine上所提供的網(wǎng)路程式稍作限制。
怎麼限制FirewallMachine上所提供的網(wǎng)路功能呢?你只要以root的身分修改"/etc/inet.conf"這個(gè)檔案。將你不準(zhǔn)備直接使用於Firewall上的網(wǎng)路功能加上注解符號(hào)。一般來(lái)說(shuō)是保存檔案?jìng)鬏敗⒔K端模擬的功能,而將與系統(tǒng)資訊相關(guān)的程式給關(guān)閉(systat、bootp、fingerd....)避免他人使用這些程式獲取該機(jī)器的現(xiàn)狀資訊。
設(shè)定ProxyServer
因?yàn)橐赃@樣架設(shè)起來(lái)的Firewall環(huán)境下,所有與外部網(wǎng)路相關(guān)的資料一定得透過(guò)這臺(tái)Firewall(當(dāng)然也可能不只一臺(tái))去連接。這樣子,如果要Telnet到外面網(wǎng)路,那就得先Telnet到FirewallMachine,然後在由此Telnet到外面,也就是說(shuō)「凡事都得假手他人」,那想想,如果內(nèi)部有人想玩玩WWW那不就無(wú)解的嘛?"ProxyServer"就是來(lái)協(xié)助此種問(wèn)題的一個(gè)答案,下次我們就繼續(xù)來(lái)說(shuō)明,如何在LinuxFirewallMachine上,建立SOCKS4.2這個(gè)ProxyServer。
如何在內(nèi)部網(wǎng)路的機(jī)器執(zhí)行Linux、Trumpet、Netscape來(lái)透過(guò)這個(gè)架好的LinuxFirewall對(duì)外連線!!!。這樣子,先撇開(kāi)安全性不提,我們就可以利用這個(gè)方式,讓好幾臺(tái)機(jī)器,同時(shí)使用一個(gè)InternetIPAddress,連到國(guó)際網(wǎng)路上去玩耍啦!!!


