申請免費試用、咨詢電話:400-8352-114
文章來源:泛普軟件
防火墻基礎
每一位Linux的新用戶都會在某種程度上開始考慮在這以新的特殊的操作系統(tǒng)上安裝防火墻系統(tǒng),最終,每個人都遇到了iptable的概念,在早期,用戶可能并不知道iptable是什么意思,甚至沒有聽到過這個術語,這一實事令人非常失望,要知道有效的iptable管理對于Linux網絡環(huán)境的安全是至關重要的。
在下文中,我將假設您曾聽說過防火墻這個詞,并且對防火墻與計算機與網絡的關系有些模糊的認識,簡而言之,防火墻提供并強制實現(xiàn)了允許與拒絕通過某些特定端口對特定網絡上的計算機進行訪問的規(guī)則,對大多數(shù)Windows用戶而言,提到防火墻時,他們往往會想到Windows防火墻、ZoneAlarm、諾頓防火墻或者他們會認為是一個“硬件防火墻”,比如很多可以從Circuit City或是Best Buy等地方買到的低廉的路由器設備。
Windows防火墻和ZoneAlarm(還有很多其他產品)有時被稱作“軟件防火墻”,事實上,它們和硬件防火墻在概念上有一些區(qū)別,從實際的角度看,它們在概念上最大的不同是其所提供的安全程度的差別。因為軟件防火墻位于本地系統(tǒng),它提供的是減弱了的安全性:當未經授權的訪問觸及到軟件防火墻時,它已經觸及了軟件防火墻所要保護的系統(tǒng),當然,這并不是說您不應該使用這樣的軟件防火墻,而是說它們僅僅是一個額外的安全層,如果使用得當,它可以提高你網絡的整體安全,但您永遠不要用軟件防火墻來替代獨立的硬件防火墻。
作為防火墻來講,Windows防火墻和ZoneAlarm的質量都很低,即使ZoneAlarm Pro版(比免費版本的要好很多,并且令人難以置信地優(yōu)于Windows XP系統(tǒng)中有著深深的漏洞的Windows防火墻)也不能算是一個強大的防火墻,諾頓防火墻在某些方面比上述的產品要好,比如它能夠提供更佳的安全性,但在某些方面又比較差,比如它難以進行配置,掩藏了它所做的工作,這比ZoneAlarm還要差(但和Windows防火墻是相同的),通常,諾頓防火墻可能會把很多東西攪在一起而沒有給用戶任何的提示,除了“哦,這可能又是諾頓搞的”。
總而言之,這些運行在Windows系統(tǒng)上的主流防火墻軟件的主要問題在于它們沒有運行在足夠低的層次來提供真正有意義的安全,還有其他一些基于Windows系統(tǒng)的防火墻軟件提供了更為基礎的防火墻功能,它們使用Windows核心Socket的API,但是Windows操作系統(tǒng)所設計和驅動的這些API提供了潛在的“泄漏”,所以即使是這些基于Windows Socket層的防火墻(比如iSafer Winsock Firewall)也可以被黑客通過聰明的辦法解決,這主要依賴于您在網絡連接中所使用的一系列硬件和驅動程序等。
最后,這些基于Windows系統(tǒng)的防火墻的問題主要在于這些位于操作系統(tǒng)上層的軟件試圖讓操作系統(tǒng)在控制網絡信息包之前放棄對這些信息的控制,這樣才可以對信息流進行有效過濾。
免費的UNIX防火墻
免費版本的UNIX擁有更好的包過濾模型,例如在Linux有netfilter項目,netfilter工作在整合了操作系統(tǒng)內核的網絡通信過濾上,負責在netfilter中實施與執(zhí)行的控制規(guī)則的管理系統(tǒng)被稱作iptable;在OpenBSD操作系統(tǒng)中也有類似的機制,被稱作pf,在iptable和pf的相互比較中,都有許多被引用過的優(yōu)點與缺點。
無論如何,iptable和pf作為防火墻系統(tǒng)來講都極其出色,盡管我沒有做過詳盡的調查,但在零售電子產品的市場中至少有一半的硬件防火墻實際上運行著嵌入了Linux內核與netfilter的系統(tǒng),有些運行著iptable,有些則運行著替代iptable的古怪的混合事物,這樣做讓所有的事情的工作方式與種不同,也許是為了阻止人們對在幕后工作的路由器于防火墻設備施加更多的控制。不管怎樣,如果您購買了路由器/防火墻設備,您就有了合理的機會運行iptable作為防火墻,即使您從沒在任何設備上安裝過Linux。
由于Linux(和其他免費版本的UNIX)的開放式與模塊化設計,與內核集成的包過濾功能比較容易實現(xiàn),并且在近幾年中得以不斷提高,因此,這促成了防火墻功能與這些操作系統(tǒng)的網絡界面之間的“聯(lián)姻”,在理論上,這基本上也提供了一個難以滲透的網絡模型。
當然,在理論上,理論和實踐是相同的,但是,在實踐中它們是不同的。在實踐中,您能從這種安全模型中獲得的安全取決于您有效定義防火墻規(guī)則以及過濾規(guī)則管理系統(tǒng)的靈活性與功能性,比如在我們討論的環(huán)境中,就是iptable。
iptable的前任被稱作ipchain,迄今為止,它是與iptable最相似的,區(qū)別在于ipchain的配置和管理要比iptable復雜一些,而且,ipchain是沒有狀態(tài)的,而iptable是有狀態(tài)的。這意味著iptable可以根據(jù)當前網絡通信的運行狀態(tài)來實施防火墻規(guī)則:例如,規(guī)則可以根據(jù)某一特定端口的數(shù)據(jù)流量來部署,而不止是簡單地封鎖這一端口。這使得iptable在確保系統(tǒng)安全方面比ipchain更加有用。更有趣的是,ZoneAlarm在很少的情況下也是有狀態(tài)的,但它的這種狀態(tài)在很大程度上是無法配置的,因此其狀態(tài)操作的好處可以被自動腳本繞過,如果寫腳本的人要知道他或她在做什么。
iptable基礎
無論您在外部使用的是哪種防火墻,對于給定的機器在適當?shù)奈恢眠M行恰當?shù)膇ptable配置總是一個好主意。根據(jù)用途的不同,每一個單獨的機器可能會有不同的包過濾需求,因此,外部防火墻設備的配置應該最大程度上允許本地系統(tǒng)去做其所需要做的事情,同時,每個單獨的機器也應該能在最大程度上拒絕其僥幸的可能,而不需犧牲其關鍵功能。
當您開始安裝一臺Linux機器的時候,它可能已經有了某些形式的iptable配置。在某些Linux的發(fā)布版本中,可能會包含好幾頁長的復雜規(guī)則,設計這些規(guī)則的目的在于讓用戶使用上百個應用軟件于服務,而用戶可能根本就不會碰它們;這就是想的太多的發(fā)布版本這些年所做的,比如Mandrake。最小化的系統(tǒng)有一個趨勢,就是將所有的設置都設為“允許”,給出了極端簡單但是本質上沒有意義的配置,這樣的配置假設用戶會對配置進行改動,這樣做其實等同與安裝了安全軟件而根本沒有進行任何設置,實際上,想的太多的方式也并沒有比不進行配置的安全方式更有效。
有一些用戶界面工具可以在更高的層面、更抽象并以更“友好”的方式來管理您的系統(tǒng)安全配置,這樣,您就不必針對單個表格的定義和規(guī)則管理命令來對iptable進行手動配置了,您可以通讀幫助頁面來完整地了解如何直接配置iptable,這只需要簡單的在命令行輸入“man iptables”即可。
另一方面,這些用戶界面的防火墻管理工具,包括了支持CLI的工具,比如Bastille,和帶有漂亮顏色與可以點擊的按鈕的GUI工具,比如KDE的Guarddog?;跒g覽器界面的服務器管理系統(tǒng)Webmin也具備iptable的管理能力。甚至有些Linux的發(fā)布版本的整個目的就是為了提供一個iptable的GUI前臺、一定的配置功能、合理健全的默認配置、路由服務配置界面的整合以及其它常用的網絡防火墻設備的功能。
我發(fā)現(xiàn)如果提供更多的相關知識可以在管理網絡與系統(tǒng)安全的iptable方面具備更好的能力,這些基礎知識的任務在于讓CLI iptable的管理更加簡單和容易,這樣您可以更好的理解這篇文章的內容。
簡單iptable管理
當您管理一臺供私人使用的電腦時,您可能要做一些以前從沒有做過的事情,它將幫助您實現(xiàn)一步一步完成的系統(tǒng),這樣事情就變得簡單和容易一些了,在您繼續(xù)學習的過程中,擁有這樣的系統(tǒng)將幫助您學習在初試設置的基礎上進行提高,也許最重要的是您要知道如果有些事情攪在一起了,如何撤銷這種損害。
由于這些原因,這篇簡要指南將集中在通過三種簡便有效的命令與一個您選擇的文本編輯器對iptable的管理。這些命令是iptables、iptables-save和iptables-restore,對于文本編輯器的選擇,我最喜歡的是vim,您可以按個人的喜好選擇。
當您開始管理一個含有很多用戶的網絡時(對于“很多”,我指的是至少超過五個用戶),您開始需要通過自動操作來減少工作量,同時減少在多個計算機上的重復操作。一個標準的iptable配置可以照原樣被部署在您網絡中所有的工作站上,這是網絡管理中很重要的一部分工作,這可以在實現(xiàn)操作環(huán)境規(guī)范中安全性與管理性的同時,減少您花在配置每一臺機器接入網絡的時間。
這還包括很多原因:標準配置的簡單部署、簡單執(zhí)行、公司安全策略的定義,以及集中式的防火墻配置測試等等。正由于這些原因,這篇指南將集中在使用iptables、iptables-save和iptables-restore命令對iptable進行管理,當然,還有一個您自己選擇的文本編輯器。
備份
當然,您所要做的第一件事情就是備份您原有的iptable配置,這樣當您今后遇到麻煩的時候就可以簡單地還原它了。備份的工作非常簡單也不需要太多思考,但需要您做出一些決定,您可以在命令行中通過“iptables –L”命令來看一下當前的iptable配置,但這一命令并沒有提供當前配置的太多的信息,如果為了今后重復使用而對現(xiàn)有配置進行備份,您需要使用iptables-save命令,輸入“iptables-save”,不需要任何參數(shù),輸出的結果將顯示netfilter在系統(tǒng)中運行時的iptable規(guī)則,這些正是我們所要存儲的數(shù)據(jù)。
您所要做出的第一個決定是在什么地方存儲您的iptable配置文件,一種選擇是在很多使用說明中所建議的:在/var/lib/iptables目錄中使用(或創(chuàng)建)一個目錄來存儲您的配置文件,另一種方法:既然在配置iptable時您是根用戶(root user),那就可以存儲在/root目錄或任何一個子目錄中。
在其他的情況下,您一定要確認您選擇的目錄路徑和文件名不會模糊不清使您會忘記它們或忘記如何找到它們。如果您將它們存儲在明為iptable的目錄中,那么將原有的iptable配置存儲為saved.cfg就足夠了,如果不是的話,您可以將它存儲為iptables.saved,如果您需要使用三個字母的擴展名,或許您可以用iptables.bak的名字。
假設您要將文件存儲在/var/lib/iptables/saved.cfg,那么您備份現(xiàn)有配置的方法如下:首先,瀏覽到該目錄(使用諸如cd /var/lib/iptables的命令),然后輸入命令iptables-save > saved.cfg。
如果您對此不熟悉的話,“>”字符是一個非常有用而且應用廣泛的外殼程序操作符,通常用于“重定向”?;旧希鼘⒚钭筮叺膬热葺敵龅街囟ㄏ虿僮鞣疫叺奈募?,還有另一個方向的重定向操作符“<”,我后面會用到它,基本上,它做的是相反的事情(如您所猜測的):它獲取重定向操作符右手邊的文件中的內容,然后發(fā)送到命令的左手邊,通過運行iptables-save > saved.cfg,您可以生成一個空文件,然后將iptables-save的輸出結果存在該文件中。
如果您感覺您需要撤銷您對iptable設置所做出的所有改變,并恢復到發(fā)布版本的初試狀態(tài)(假設這就是您弄亂這些設置之前的狀態(tài)),您可以簡單地輸入iptables-restore < saved.cfg,如果您當前工作目錄不是/var/lib/iptables ,那可以使用iptables-restore < /var/lib/iptables/saved.cfg命令。
有了這些知識的武裝,您已經具備了實現(xiàn)我所描述的iptable管理系統(tǒng)所需的大部分信息,當然我不會殘忍地讓您去完成自己的配置,畢竟從在這一刻開始將要生成最初的實現(xiàn),在后面的學習中也將越來越容易。
刷新設置
在新系統(tǒng)上備份了最初的iptable配置之后,我們要做的下一件事情就是將iptable設置刷新為:
iptables -F -t filter
iptables -F -t nat, and
iptables -F -t mangle
從技術上講,這三個命令中的第一個并不需要使用“-t filter”參數(shù),因為過濾列表是iptable命令的默認目標,但是寫清楚這個參數(shù)也不會造成損害,如果需要查找iptable配置中更多的表格,您可以參考用戶手冊中的說明。
您或許并不需要親自實施這項任務,盡管這樣做不會造成任何損害,我有時這樣做是因為我偶爾要從零開始創(chuàng)建新的iptable配置,我發(fā)現(xiàn)從零開始要比從一個模板配置開始容易些,就像我后面將要提供的例子一樣。
當然,這接下來的步驟就要使用我在應用Linux的工作中從幫助文件和其他參考資料中獲取的iptable規(guī)則的操作知識來制作一個有價值的、安全的iptable配置。您可以從接收這個免費的成果中獲益,在接下來的幾節(jié)中我將介紹這個適度安全的配置模板。(zdnet)