本文詳細描述了我們一直未能引起足夠重視的家用網絡安全問題,並在文中以作者的家用網絡環境為例,講述了加強家用網絡安全性的一些具體方法。
1、簡介
很長時間以來,我之所以一直沒有對我的家用網絡的安全性給予太多的關注,原因包括以下幾點:
1)撥號互聯網連接對黑客缺乏足夠的吸引力。
2)Linux比MS Windows的安全性能要好得多。我使用的Linux發行版本專門針對安全進行了優化。
3)我仿照Linux的HOWTO中的例子采取了一定的安全措施。
這也是許多的普通Linux用戶的想法,然而不幸的是,這些措施都是一廂情願的。為了在以後用上高速互聯網連接時仍然能夠免受黑客的侵擾,我認為現在就需要花費一定的時間來考慮網絡的安全問題,其結果是令人震驚的。
第一件令人震驚的事來自長期被忽略的/var/log/syslog*文件,該文件中包括了一些禁止連接的條目,其中有一條被禁止連接的FTP,但它能夠明顯地連接成功。看來,撥號用戶並沒有被黑客遺忘啊!我的家用網絡系統的安全性並非是萬無一失的,我需要在安全性上再花費一些時間。
2、系統的組成
我有一個由二台機器組成的非常簡單的網絡:工作站是一台沒有配置打印機或調制解調器、運行Win 95的PC,服務器運行的是Debian Linux 2.1(帶各種升級軟件),它運行有exim(用於本地的電子郵件和向外發送電子郵件。)、qpopper(工作站使用的POP3服務器)和samba(向工作站提供文件共享和打印功能。)等應用軟件。服務器上配置有撥號連接(ppp),通過fetchmail收取外界的電子郵件。
該局域網使用192.168.1.0-192.168.1.24之間的IP地址之一,服務器的IP地址是192.168.1.1,工作站的IP地址是192.168.1.2。服務器上的/etc/hosts和工作站上c:\windows\hosts的內容是:
127.0.0.1 localhost
192.168.1.1 heaven.my.home heaven
192.168.1.2 earth.my.home earth
這表明我的局域網使用的域名為my.home,我沒有注冊這一域名,因此只能在局域網上使用。向外發送的郵件的發件人地址必須進行轉換。
3、“不公開”的家用網絡
我對安全的概念是擁有一個“不公開”的網絡,也即該網絡不提供公用的功能,不提供WWW服務,不能使用telnet服務訪問它,甚至不能從外界收取任何信息。如果有人試圖訪問該網絡,它也不會作出什麼響應。
從概念上來說,不與互聯網連接的局域網就是一個“不公開”的網絡,也就是說,撥掉調制解調器,就能使你的網絡實現“不公開”化。但這並非我所指的“不公開”網絡,我希望在這樣的網絡上能夠使用互聯網,收發電子郵件、浏覽網站、下載文件等服務,只是不想讓黑客非法入侵我的網絡而已。
Linux通常情況下都不是一個“不公開”的網絡。缺省狀態下,Linux的安裝過程會建立各種網絡服務(象telnet、ftp、finger等),只要知道了口令,這些服務可以被任何一個人訪問。同樣,用微軟的Windows組成的家用局域網同樣也不是一個“不公開”的網絡,如果連接二台運行Win95計算機組成一個網絡,並實現文件共享,只要互聯網連接開著,全世界的所有人就都可以共享你的計算機上的文件。
可以通過各種技術實現公開網絡的安全,例如tcp偽裝、內核級的包過濾等,這些技術可以使網絡具有一定的“不公開”性,它們就象站在門口的哨兵一樣,把非法的訪問者擋在了外面,而把我們希望的客人放進來。但我不需要任何人訪問我的網絡,它是我專用的。
如果服務器可以被外界訪問,我們總是會擔心有什麼配置上的錯誤會被黑客利用。同時,服務器軟件通常也都存在可能被黑客利用的bug。盡管發現bug後,廠商會很快地推出補丁程序,但下一個bug呢?如果不讓任何人訪問網絡不是更安全嗎?
如果確實需要開通一些讓家庭之外的計算機使用的服務,就必須研究更先進的安全技術,如果僅僅想實現家用網絡的“不公開化”,就請繼續看下面的內容吧。
4、網絡安全嗎
為了測試網絡系統的安全性,可以使用Secure Design等工具從外部對網絡系統進行掃描。當我對我的網絡系統掃描後,我再次震驚了!有很多入口可供入侵我的系統:Samba、telnet、打印服務、X、電子郵件服務器、ftp、finger等。我已經采取了一些基本的措施來保證系統的安全性,因此,系統不會受到比較嚴重的外界入侵(我希望如此!)。但我考慮到,外界知道我有電子郵件服務器,就是系統在安全方面的一個缺陷。因為這些服務是供我在家用網絡上使用的,它們與外界無關。
也可以通過運行netstat -pan --inet命令自己對系統進行掃描,在掃描時使用一個較寬的xterm窗口,因為輸出中會包括比較長的內容行,在Local Address(本地地址)一列中地址為0.0.0.0的服務可以被外界發現。
5、服務器和客戶機
對用戶來說,服務器和客戶機之間的區別並非是十分明顯的。例如,如果想使用ftp服務,可以使用ftp軟件與另一台計算機連接。如果只想使用ftp完成這些任務,就只要ftp客戶端程序就可以了。如果想讓別人從你的計算機上下載文件,或向你的計算機上載文件,那就還需要ftp服務器端軟件。這與telnet非常相似,客戶端程序供自己使用,服務器端程序是讓別人使用的。服務器端和客戶端程序是完全不同的,它們有著不同的名子,例如,telnet客戶端程序的名字是/usr/bin/telnet,telnet服務器端程序的名字是/usr/sbin/in.telnetd。新手並不總是清楚這中間的區別的。在Linux安裝過程中如果系統詢問是否安裝ftp服務器,用戶會考慮自己需要使用ftp功能,就會選擇安裝。有時系統根本不問你,而自動地安裝ftp服務器。
創建不公開網絡的途徑之一是不安裝服務器軟件,只安裝客戶端軟件。但如果你的家用網絡中連接有多台計算機,這樣就會太簡單了,也許你需要在網絡中使用telnet、電子郵件服務,也就是說,你不能不使用服務器軟件。
服務器的功能是監聽,它們監聽這樣的信號:我需要你提供服務。這個信號(至少是基於TCP的服務)是一個被稱作SYN包的特殊IP數據包,它表明了需要的服務的代號。例如,telnet服務的代號是23,這些數字通常被稱作“端口號”。如果in.telnetd軟件沒有運行,就沒有軟件監聽代號為23的SYN數據包,也就是所謂的“端口23關閉了。”
所謂的“端口”是不存在的,如果服務器進行監聽,端口就是打開的,否則就是關閉的。
SYN數據包是如何進入計算機中的呢?在服務器一端,數據包可以通過三種方式進入系統:
1)從工作站過來的數據包通過以太網卡(也被稱作eth0接口)進入服務器,發給固定的IP地址192.168.1.1。
2)來自外部世界的通過ppp連接或ppp0接口進入服務器的數據包。這些數據包也有IP地址,但不是固定的。在每個對話中,ISP都會給出一個動態地址,該地址只能在該對話中使用。
3)數據包也可以來自服務器本身,其目標地址就是它本身。這種發送數據包的方式主要用在測試中,數據包的目標地址為IP地址是127.0.0.1的回送接口。名字localhost指的是回送接口,名字heaven的IP地址是192.168.1.1。(這一點很重要:名字和IP地址指的是接口,而非是計算機,盡管在日常使用中這種差別經常被模糊。)
現在的關健是服務器總是監聽帶有“它們”端口號的所有數據包,而無論它們是如何進入系統的。如果我們希望建立一個不公開的網絡,不向外界提供服務,我們必須改變這種情況。
如果所有在Linux上運行的服務器程序都有能夠指定它們監聽接口的選項,這一切就可以很方便地得到解決了。如果是這樣,就可以讓所有的服務器程序不要監聽ppp連接,也就不再需要任何安全措施了(tcpd、防火牆等)。也許在將來能夠實現這一點,但現在還沒有幾種服務器軟件能夠做到這一點(包括非常重要的exim和samba都不能。)因此,必須采取一些措施來使網絡實現不公開化。
聽從“關閉不必要的端口”的建議沒有什麼危害,也就是說,不要運行你不需要的服務器軟件。對於可以進行選擇的服務器軟件,使它們只能監聽內部的接口(eth0,如果有必要,再添加上回送接口)。“超級服務器”inetd(用於喚醒Linux系統上其他不同的服務器軟件)應該換成xinetd,它可以只監聽內部的接口。為應付其他的困難,需要安裝防火牆阻止外界的SYN數據包進入系統,它還可以防止不需要的UDP、ICMP數據包進入系統。要實現更高的安全性能,還需要采取其他的一些安全措施,其中一條是不在網絡上使用IP偽裝和轉發。
6、刪除不必要的服務
6.1 不必要的inetd服務
在Linux系統中總有一些服務是由inetd.conf啟動的。幾乎所有的Linux系統都有一個被稱作inetd的超級服務器,它的職責是同時監聽許多端口,並在需要時喚醒相應的服務。然而,它也可能喚醒用戶所不需要的服務,一些不需要的服務的例子是:
ftp服務器。我不想與外界共享任何文件,而在內部我可以使用Samba和smbfs來傳輸文件。不安裝ftp服務器不會對運行ftp客戶端軟件與外界交換文件產生任何影響。但大多數的Linux版本都會缺省地安裝ftp服務器。
portmapper和與RPC調用有關的東西。portmapper用來實現RPC,如果使用了NFS,則需要它的支持,但我在家用網絡上並不使用NFS。因此,所有inetd.conf中與portmapper和與RPC有關的內容都可以注釋掉。
finger和ident。在是否使用ident上,各種意見是見仁見智,我刪除了它,並沒有感覺到受到什麼不利的影響。
inetd.conf中的一些服務是只用於測試網絡:echo、chargen、discard、daytime、和time,最後二種服務與