防火牆可分為幾種不同的安全等級。在Linux中,由於有許多不同的防火牆軟件可供選擇,安全性可低可高,最復雜的軟件可提供幾乎無法滲透的保護能力。不過,Linux核心本身內建了一種稱作"偽裝"的簡單機制,除了最專門的黑客攻擊外,可以抵擋住絕大部分的攻擊行動。
當我們撥號接連上Internet後,我們的計算機會被賦給一個IP地址,可讓網上的其他人回傳資料到我們的計算機。黑客就是用你的IP來存取你計算機上的資料。Linux所用的"IP偽裝"法,就是把你的IP藏起來,不讓網絡上的其他人看到。有幾組IP地址是特別保留給本地網絡使用的,Internet骨干路由器並不能識別。像作者計算機的IP是192.168.1.127,但如果你把這個地址輸入到你的浏覽器中,相信什麼也收不到,這是因為Internet骨干是不認得192.168.X.X這組IP的。在其他Intranet上有數不清的計算機,也是用同樣的IP,由於你根本不能存取,當然不能侵入或破解了。
那麼,解決Internet上的安全問題,看來似乎是一件簡單的事,只要為你的計算機選一個別人無法存取的IP地址,就什麼都解決了。錯!因為當你浏覽Internet時,同樣也需要服務器將資料回傳給你,否則你在屏幕上什麼也看不到,而服務器只能將資料回傳給在Internet骨干上登記的合法IP地址。
"IP偽裝"就是用來解決此兩難困境的技術。當你有一部安裝Linux的計算機,設定要使用"IP偽裝"時,它會將內部與外部兩個網絡橋接起來,並自動解譯由內往外或由外至內的IP地址,通常這個動作稱為網絡地址轉換。
實際上的"IP偽裝"要比上述的還要復雜一些。基本上,"IP偽裝"服務器架設在兩個網絡之間。如果你用模擬的撥號調制解調器來存取Internet上的資料,這便是其中一個網絡;你的內部網絡通常會對應到一張以太網卡,這就是第二個網絡。若你使用的是DSL調制解調器或纜線調制解調器(Cable Modem),那麼系統中將會有第二張以太網卡,代替了模擬調制解調器。而Linux可以管理這些網絡的每一個IP地址,因此,如果你有一部安裝Windows的計算機(IP為192.168.1.25),位於第二個網絡上(Ethernet eth1)的話,要存取位於Internet(Ethernet eth0)上的纜線調制解調器(207.176.253.15)時,Linux的"IP偽裝"就會攔截從你的浏覽器所發出的所有TCP/IP封包,抽出原本的本地地址(192.168.1.25),再以真實地址(207.176.253.15)取代。接著,當服務器回傳資料到207.176.253.15時,Linux也會自動攔截回傳封包,並填回正確的本地地址(192.168.1.25)。
Linux可管理數台本地計算機(如Linux的"IP偽裝"示意圖中的192.168.1.25與192.168.1.34),並處理每一個封包,而不致發生混淆。作者有一部安裝SlackWare Linux的老486計算機,可同時處理由四部計算機送往纜線調制解調器的封包,而且速度不減少。
在第二版核心前,"IP偽裝"是以IP發送管理模塊(IPFWADM,IP fw adm)來管理。第二版核心雖然提供了更快、也更復雜的IPCHAINS,但仍舊提供了IPFWADM wrapper來保持向下兼容性,因此,作者在本文中會以IPFWADM為例,來解說如何設定"IP偽裝"(您可至http://metalab.unc.edu/mdw/HOWTO/IPCHAINS-HOWTO.html查詢使用IPCHAINS的方法,該頁並有"IP偽裝"更詳盡的說明)。
另外,某些應用程序如RealAudio與CU-SeeME所用的非標准封包,則需要特殊的模塊,您同樣可從上述網站得到相關信息。
作者的服務器有兩張以太網卡,在核心激活過程中,分別被設定在eth0與eth1。這兩張卡均為SN2000式無跳腳的ISA適配卡,而且絕大多數的Linux都認得這兩張卡。作者的以太網絡初始化步驟在rc.inet1中設定,指令如下:
IPADDR="207.175.253.15"
#換成您纜線調制解調器的IP地址。
NETMASK="255.255.255.0"
#換成您的網絡屏蔽。
NETWORK="207.175.253.0"
#換成您的網絡地址。
BROADCAST="207.175.253.255"
#換成您的廣播地址。
GATEWAY="207.175.253.254"
#換成您的網關地址。
#用以上的宏來設定您的纜線調制解調器以太網卡
/sbin/ifconfig eth0 ${IPADDR} broadcast $ {BROADCAST} netmask ${NETMASK}
#設定IP路由表
/sbin/route add -net ${NETWORK} netmask $ {NETMASK} eth0
#設定intranet以太網絡卡eth1,不使用宏指令
/sbin/ifconfig eth1 192.168.1.254 broadcast 192.168.1.255 netmask 255.255.255.0
/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 eth1
#接著設定IP fw adm初始化
/sbin/ipfwadm -F -p deny #拒絕以下位置之外的存取 #打開來自192.168.1.X的傳送需求
/sbin/ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0
/sbin/ipfwadm -M -s 600 30 120
就是這樣!您系統的"IP偽裝"現在應該可以正常工作了。如果您想得到更詳細的信息,可以參考上面所提到的HOWTO,或是至http://albali.aquanet.com.br/howtos/Bridge+Firewall-4.html參考MINI HOWTO。另外關於安全性更高的防火牆技術,則可在ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Firewall-HOWTO中找到資料。
半年來,56K模擬數據卡的價格突然跌降了不少。不過,大多數新的數據卡,其實是拿掉了板子上的控制用微處理器,因此會對系統的主CPU造成額外的負荷,而Linux並不支持這些"WinModem"卡。雖然Linux核心高手們,還是有能力為WinModem卡撰寫驅動程序,但他們也很明白,為了省10元美金而對系統效能造成影響,絕對不是明智之舉。
請確定您所使用的Modem卡,有跳腳可用來設定COM1、COM2、COM3與COM4,如此一來,這些數據卡才可在Linux下正常工作。您可在http://www.o2.net/~gromitkc/winmodem.html中找到與Linux兼容的數據卡的完整列表。
當作者在撰寫本篇文章時,曾花了點時間測試各種不同的數據卡。Linux支持即插即用裝置,所以我買了一塊由Amjet生產的無跳腳數據卡,才又發現另一個令人困擾的問題。
作者測試用的PC是一部老舊的486,用的是1994年版的AMI BIOS。在插上這塊即插即用數據卡後,計算機便無法開機了,畫面上出現的是"主硬盤發生故障"(Primary hard disk failure)。經檢查,發現即插即用的BIOS居然將原應保留給硬盤控制器的15號中斷,配給了數據卡。最後作者放棄了在舊計算機上使用即插即用產品,因為不值得為這些事花時間。所以,請您注意在購買數據卡之前,先看清楚是否有調整COM1到COM4的跳腳。
在作者的布告板(http://trevormarshall.com/BYTE/)上,看到有幾位朋友詢問是否可以用多條撥號線來改善Internet的上網速度。這裡最好的例子是128K ISDN,它同時運用兩條56K通道,以達到128K的速度。當ISP提供這樣的服務時,其實會配置兩條獨立的線路連到同一個IP上。
您可以看到,雖然Linux上有EQL這類模塊,可讓您在計算機上同時使用兩塊數據卡,但除非ISP對兩組撥號連線提供同一個IP,否則這兩塊數據卡也只是對送出資料有幫助而已。
如果您撥接的是一般的ISP PPP線路,那麼您會得到一個IP地址,從服務器回傳的封包才能在數百萬台計算機中找到您;而您每次撥入ISP時,都會得到一個不同的IP地址。
你的浏覽器所送出的封包中,也包含供服務器資料回傳的本地IP地址。EQL可將這些外傳的封包,分散到不同的ISP線路上,但當資料回傳時,卻只能通過一個IP地址接收,也就是浏覽器認為正在使用的那個地址。若是使用ISDN,那麼ISP會處理這個問題;一些ISP會為多組線路的撥號接入提供相應的IP地址,但價錢非常昂貴。
在追求速度時,請別忽略了Linux防火牆的效率。在作者辦公室有六位使用者通過"IP偽裝"防火牆,去存取一部56K模擬調制解調器,工作情況十分良好,只有在有人下載大文件時速度才會變慢。在您決定要加裝多條ISP撥號線之前,可以先架設一部"IP偽裝"服務器試試。Windows處理多重IP的方式並非十分有效率,而將Windows網絡與調制解調器隔開,效能的增進將會讓您驚訝不已。
簡而言之,Linux所用的"IP偽裝"法,就是把你的IP藏起來,不讓網絡上的其他人看到。