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