歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

Linux中的防火牆


近來在各項Internet的應用已迅速席卷全球之時,「網路安全」的問題也開始引起了大多數人的關切,而基於這個問題而發展出"Firewall"(防火牆)如此的產物,利用它來防止外部網路不速之客的入侵。此文要將"Firewall"和"Linux"做一個結合,介紹各位來架設Linux的防火牆。

王國泰(KuotaiWang)

----------------------------------------------------------

  各位Linux的老朋友新朋友好久沒有在紙上相見,希望能藉這個難得的機會用短短的文章和大家多多分享這敝人的小小心得。

  自從國家資訊高速公路(NII)的推動以來,相繼的TANET、SeedNet、HiNet的苦心經營,Internet幾乎已經成為各家雜志的熱烈話題,而「加入Internet、利用Internet」也成為建立企業形象的一種方式。在一陣Internet風潮騷動之下,有人就開始擔心所謂的「網路安全」問題。因為Internet的開放,而使得所有成員的受惠,但也因為他的開放,所以更要考慮這個「網路安全」的問題。這一次咱們要談談的話題就是因為這個原因而開始的-"Firewall"(防火牆)就是基於這個「網路安全」考量之下的一個產物。

  我們可以在內部網路與外面網路連接之間,設置一個具有Firewall功能的機器,利用它來過濾這兩個網路之間相互傳輸的資料,然後透過相關軟體的設定來限制不同使用者所可以使用的網路功能。由外部網路要傳送至內部網路的資料一定要透過設置了Firewall這個機器來轉送,內部網路的資料也透過這個Firewall將資料正確的傳送位於外部網路上的目的地。身為Firewall的機器就成了網路間的轉運站。因此當「外星訪客」莅臨時,由於他的腳步僅到達Firewall,所以在最差的情形是這個「Firewall機器被摧毀了!!」,但是內部網路卻可以逃過一劫而「苟活」下來,基於犧牲小我完成大我的原則下,這樣的代價似乎是值得的。

  雖然這樣的手續似乎相當繁瑣,但是也因為如此,多多少少可以防止一些外部網路不速之客的入侵,以確保內部網路的安全。另一方面也可以限制內部網路對外部網路的通訊,做另一層網路資料流控管。當然,為了這個安全問題,我們得犧牲不少「便利」、「速度」上的享受,但是事情總是會有個彌補的方式的,這些都將會是我們所涉及的內容。

  Firewall的架設型態並非唯一的,這完全要看作業系統以及Firewall軟體的功能來看。上面的圖形就是一個最簡單的Firewall架構。在前面講了一些Firewall的字眼後,得和我們的主角"Linux"做一個結合,開始真正的跳入我們的重點-「如何利用Linux架設一個Firewall」。

將Firewall功能加入Linux核心之中

自從Linux1.2.x之後的Kernel編譯設定中,就加入CONFIG_FIREWALL的選項,由於事關幾個系統呼叫函式的功能,因此如果要將Linux設定為具有Firewall的機器,那麽就要先確定,所使用的LinuxKernel已經將Firewall功能納入了!!

  當然,最穩當的方式就是重新編譯LinuxKernel,並且將CONFIG_IP_FIREWALL設為"Yes"。還有一點需要注意的就是「架設一個最基本的LinuxFirewall時,必須要將該部LinuxMachine的IP_Forwarding功能去除」,我們利用下面的圖示來稍作解釋。所以在處理Kernel重新編譯的工作執行"makeconfig"時,請特別將下列選擇項目仔細考慮加入。

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驅動程式(如果對外來連接是利用撥接或專線時)  Ex:PPP(Point-to-point)support(CONFIG_PPP)[y]

7.個人網路卡驅動程式(用來連接內部區域網路時)  Ex:NE2000/NE1000support(CONFIG_NE2000)[y]

然後,接著執行「makedep;makeclean;makezImage」等等的編譯工作(關於詳細的Kernel重新編譯請讀者自行參考前幾期光碟月刊內的詳細說明)

(備注:在發展中的Linux1.3.x將加入另一種Firewall的功能,稱為ip_masquerade,他是將目前由外部軟體來轉送資料的方式改為由Kernel內部直接來處理,聽起來相當不錯的消息,不過都尚在發展測試階段,敬告諸位,如果要安全一點,先不要使用,帶運作穩定後在愉快用之)

  產生新的Kernel後,請將產生的zImage或vmlinuz移至根目錄(或是其他啟動目錄),然後如果你使用LILO請務必再執行「LILO」一次,更新啟動資料,然後重新啟動Linux。

  進入新的Linux後,為了確保萬一,請觀察/proc/net/snmp的內容,執行方式如下:

simon:/proc/net#catsnmp

1.→Ip:ForwardingDefaultTTLInReceivesInHdrErrors....(省略)

2.→Ip:06412000001212000000000

Icmp:InMsgsInErrorsInDestUnreachsInTimeExcds....(省略)

Icmp:00000000000000000000000000

Tcp:RtoAlgorithmRtoMinRtoMaxMaxConnActiveOpens....(省略)

Tcp:000000000000

Udp:InDatagramsNoPortsInErrorsOutDatagrams

Udp:120012

請對照1.2.行的說明與內容值,如果2.的第一個值為0,則表示IP_Forwarding的功能並未被包含於Kernel中。所以,請執行此命令來檢查是否真的將IPForwarding的功能已經被關掉了!!

設定網路位址

  在確定Linux具有Firewall的功能後,接下來要做的就是設定網路的位址,首先先處理對外的部份,既然這台Linux需要對外連線,那麽理所當然就應該會有一個經過授權的命名位址、而且是唯一的。以Internet而言這個網路位址(IPAddress)是世界唯一的,也不可以有第二個,否則會有打架的情形,所以就不需要太傷腦筋了!!不過就因為對外的位址一定要唯一的,所以在設定內部網路的位址(IPAddress)時,就得考慮周延一點,否則如果有內部機器與外部網路位址相同時,Firewall機器將可能不知道如何將資料傳至正確位置。

  下面是有些特別保留給內部網路使用的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的內部網路位址設定在這個范圍之內,這樣才不會影響到FirewallMachine在轉運資料時的錯誤。

測試網路的線路

  再來的步驟是測試網路的連線,請注意,因為這時Linux是個FirewallMachine,所以,內部網路上的機器無法直接由本身機器與外面連線,同樣的外面網路的機器也無法直接連到內部網路的機器,但是,他們都應該可以連到這台Firewall上來。

  因此,接下來我們得分別測試由這台LinuxFirewallMachine與外面網路的連線是否正常,然後在測試由內部網路上的機器與這台Linux是否可以維持正常的連線情形。

  千萬不要硬是要試著由內部網路上的機器直接去與外面的某台機器進行連線,這是理論與實際都不可能的,一來因為有了Firewall,二來內部網路上的任何機器(除了這台Firewall之外)本來就不屬於外面網路的一員(也就是沒有專屬的網路位址IPAddress)。

設定限制網路的功能

  架建Firewall的目的是在於安全的考量。雖然有了Firewall的一層阻擋,可以稍作某程度的保護,但是如果在這台Firewall上,開放所有網路的功能,那不就等於一個完全的公開,這樣似乎還不太恰當。因此,既然要達到安全控管的目的所以就要對於FirewallMachine上所提供的網路程式稍作限制。

  怎麽限制FirewallMachine上所提供的網路功能呢?你只要以root的身分修改"/etc/inet.conf"這個檔案。將你不准備直接使用於Firewall上的網路功能加上注解符號。一般來說是保存檔案傳輸、終端模擬的功能,而將與系統資訊相關的程式給關閉(systat、bootp、fingerd....)避免他人使用這些程式獲取該機器的現狀資訊。

設定ProxyServer

  因為以這樣架設起來的Firewall環境下,所有與外部網路相關的資料一定得透過這台Firewall(當然也可能不只一台)去連接。這樣子,如果要Telnet到外面網路,那就得先Telnet到FirewallMachine,然後在由此Telnet到外面,也就是說「凡事都得假手他人」,那想想,如果內部有人想玩玩WWW那不就無解的嘛?"ProxyServer"就是來協助此種問題的一個答案,下次我們就繼續來說明,如何在LinuxFirewallMachine上,建立SOCKS4.2這個ProxyServer。

  如何在內部網路的機器執行Linux、Trumpet、Netscape來透過這個架好的LinuxFirewall對外連線!!!。這樣子,先撇開安全性不提,我們就可以利用這個方式,讓好幾台機器,同時使用一個InternetIPAddress,連到國際網路上去玩耍啦!!!

(作者E-mail為[email protected]


——摘自:http://www.hope.com.tw


Copyright © Linux教程網 All Rights Reserved