




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-*A.—X-
刖5
概述
這是一篇以介紹在Linux操作系統(tǒng)平臺(tái)上構(gòu)建防火墻系統(tǒng)^”網(wǎng)怔陰性⑹⑸為主的科技文檔,旨在幫助使用
者在較短的忖間內(nèi)掌握管理和配置要領(lǐng),為企業(yè)的網(wǎng)絡(luò)安全提供相關(guān)的安全保障。
本文是《Linux安全應(yīng)用一一構(gòu)建以防火墻為核心的安全管理系統(tǒng)》一文的姐妹篇,如果把那篇文章看成
是Whalisil?那么,本文則以技術(shù)細(xì)節(jié)為主,即Howl。d。?關(guān)于為什么要使用基于Linux操作系統(tǒng)平臺(tái)的
防火墻系統(tǒng)的原因,
本文共分為兩部分,第一部分具體介紹了Nclfiltcr/Iptablcs的運(yùn)行機(jī)制和配置管理方法,這是全文中最核心
的一部分。第二部分給出了一些具體的范例腳本供系統(tǒng)管理員參考。
鑒于筆者水平有限,文中有錯(cuò)誤的地方望不吝踢教。
適用對(duì)象
本文首先是為各個(gè)企業(yè)的網(wǎng)絡(luò)系統(tǒng)管理員撰寫(xiě)的,無(wú)論是那些已經(jīng)使用了基于Netfilter/Iptables防火墻系統(tǒng)
的企業(yè),還是那些支準(zhǔn)缶使用它的企業(yè),本文的內(nèi)容都非常適合為東統(tǒng)管理員們提供參
對(duì)于那些Linux的個(gè)人用戶和愛(ài)好者,本文也不失為一篇相當(dāng)有價(jià)值的參考文檔,其中,相當(dāng)一部分內(nèi)容
深入淺出的講解能幫助讀者很快的理解和掌握Netfilter/Iptables的精輸。
對(duì)于希望通過(guò)本文了解Netfilter/Iptables的讀者,應(yīng)至少具備一定的Linux操作系統(tǒng)的應(yīng)用基礎(chǔ),比如文件
操作、網(wǎng)絡(luò)配置操作等,當(dāng)然,如果使用者還具備一定的編譯核心的能力那是在好不過(guò)的了。
為了更好的配置防火墻系統(tǒng),使用才除了掌握Netfilter/Iptables本身的配置管理技巧外,掌握一定的TCP/IP
網(wǎng)絡(luò)知識(shí)也是必須的,比如在缺省情況下,應(yīng)該知道SMTP《SimpleMailTransferProiocol)協(xié)議使用TCP25
端口做為其對(duì)外提供服務(wù)的端口,F(xiàn)TP(FileTransferProtocol)協(xié)議在建立連接的整個(gè)過(guò)程中,會(huì)與客戶端
建立兩條連接,一條是用戶傳輸數(shù)據(jù)的,另一條則是用戶控制傳輸?shù)?
資源列表
Netfilter/Iptables的官方網(wǎng)站:
在Nctfiltcr的官方網(wǎng)站,用戶能夠下載Ipiablcs的最新的源代碼,Iptablcs的使用說(shuō)明文檔,FAO和MailList,
這個(gè)站點(diǎn)是布,關(guān)Netfilter/Iptables最權(quán)威、最全面的地方,在這里,你幾乎能夠找到和Netfilter/iptables相關(guān)
的所有幫助和技術(shù)支持。
術(shù)語(yǔ)
文中包含了一些術(shù)語(yǔ)?,也許讀者對(duì)其中的一部分似曾相識(shí),但又并不完全理解其正確的含義,或者和其他
相關(guān)安全產(chǎn)品的概念混滔了。這里有i些解釋,并說(shuō)明了本文中如何使用它們。
DNAT-DestinationNetworkAddressTranslation目的網(wǎng)絡(luò)地址轉(zhuǎn)換。DNAT是一種改變數(shù)據(jù)包目的IP地址
的技術(shù),這種技術(shù)經(jīng)常用于將內(nèi)部網(wǎng)絡(luò)(RFC19I8定義的地址段)的服務(wù)冊(cè)通過(guò)公有的可路由IP地址發(fā)布
到Internet匕通過(guò)對(duì)同一個(gè)IP地址分配不同的端口,來(lái)決定數(shù)據(jù)的流向。
SNAT-SourceNetworkAddressTranslation源網(wǎng)絡(luò)地址轉(zhuǎn)換。這是一種改變數(shù)據(jù)包源IP地址的技術(shù),經(jīng)常
用來(lái)使多臺(tái)計(jì)算機(jī)分享一個(gè)Internet地址。這只在IPv4中使用,因?yàn)镮Pv4的地址已快用完了,IPv6將解決
這個(gè)問(wèn)題。IPv6使得地球上每一粒沙子大小的空間都能夠分配到一個(gè)IP地址,因此IPv6不存在地址空間
短缺的問(wèn)題。
State■狀態(tài)指明數(shù)據(jù)包處于什么狀態(tài)。狀態(tài)在RFC793-TransmissionCbntrolProtocol中定義,或由用戶
在Netfilter/iptables中自定義。需要注意的是Neater設(shè)定了一些關(guān)于連接和數(shù)據(jù)包的狀態(tài),但沒(méi)有完全使
用使用RFC793的定義。
Userspace-用戶空間,指在內(nèi)核外部或發(fā)生在內(nèi)核外部的任何東西。例如,調(diào)用iptables-h發(fā)生在內(nèi)核外
部,但iplablcs-AFORWARD-ptep-jACCEPT(部分地)發(fā)生在內(nèi)核內(nèi)部,因?yàn)橐粭l新的規(guī)則加入了規(guī)則
集。
Kcmclspacc-內(nèi)核空間,與用戶空間相對(duì),指那些發(fā)生在內(nèi)核內(nèi)部。
target-這個(gè)詞在后文中有大量的應(yīng)用,它表示對(duì)匹配的數(shù)據(jù)包所做的操作,如ACCEPT、DROP、REDIRECT
等等。
約定
本文中涉及的命令、范例都是以RedhacLinux操作系統(tǒng)平臺(tái)為基礎(chǔ)的,盡管在絕大多數(shù)的情況下,Linux
的大多數(shù)命令都是獨(dú)立于發(fā)行版本的,但每個(gè)發(fā)行版本之間或多或少的存在微小的區(qū)別。
本文中的命令以黑體5號(hào)宋體字表示,如下例:
#iptablcs-rcstorc/etc/sysconfig/iptables
本文中涉及到的命令、范例腳本都經(jīng)過(guò)我們的嚴(yán)格測(cè)試,能魴保證使用者按照文中介紹的做法正確配置防
火墻,當(dāng)然,每一個(gè)用戶的網(wǎng)絡(luò)環(huán)境都是不一樣的,具體的配置還需要用戶根據(jù)自己的具體情況來(lái)適當(dāng)調(diào)
整。
致謝
在撰寫(xiě)本文時(shí),參考了OskarAndreasson<iptablestutorial1.1.19》一文,由于本人英語(yǔ)水平有限,因此
額外參考了中國(guó)Linux公社里的Linux新鮮社員sllscn的翻譯稿,在此向池們兩人表示謝意。
第一章構(gòu)建Nelfilter/Ipisbles防火墻系統(tǒng)
1.1獲取iptables
ipiables可以從htip:〃下載,該網(wǎng)站是netfilter/iptabies最專業(yè)的網(wǎng)站,由HaraldWelte?Jozsef
Kadlecsik,MartinJosefsson,PatrickMcHardy等核心成員進(jìn)行維護(hù),此外,還有眾多的iplables的使用者和
開(kāi)發(fā)者為網(wǎng)站提供了大量的文檔和更新代碼。
1.2編譯內(nèi)核
在一般情況下,我們采用的Linux的distribution比如Redhat都會(huì)幫我們安裝好Iptables,而且netfilter的核
心層也被以模塊(Modules)的方式編譯進(jìn)了核心,所以,在絕大多數(shù)的情況下,我們是不需要對(duì)核心進(jìn)行
重新編譯的。
當(dāng)然,我們寫(xiě)這篇文檔的用意決不僅限于教會(huì)用戶使用幾個(gè)命令來(lái)管理iplables,所以,我們還是來(lái)描述
下如何編譯核心以使Linux在核心層能夠支持?jǐn)?shù)據(jù)包過(guò)渡。
編譯核心的準(zhǔn)備工作當(dāng)然是必需有LinuxKernel的源代碼,在源代碼文件的目錄/usr/src/linux-2.4(這個(gè)目
錄一般是個(gè)鏈接文件)中輸入:
#makcmcnuconfig
會(huì)出現(xiàn)如下的畫(huà)面:
在圖中高亮顯示的地方回車進(jìn)入Networkingoptions的核心配置頁(yè)面,
將高亮故示的部分編譯進(jìn)核心,在該配置頁(yè)面內(nèi),還有一處需要注意,就是NclfillcrConfiguralion的配置
頁(yè)面,在該處回車即可進(jìn)入配置界面:
從圖中可以看到,左面尖括號(hào)內(nèi)的“M”代表該選項(xiàng)被編譯成核心模塊,僅在系統(tǒng)需要時(shí)才被裝載入核心
空間,由于模塊化的核心是不占用核心本身的空間的,因此,對(duì)于這些選項(xiàng),除非肯定不會(huì)用到的以外,
其他的都可以選擇編譯成核心模塊,但有些是必須的,如
Connectiontracking用于支持狀態(tài)跳接跟蹤功能
FTPprotocolsupport用于支持對(duì)Ftp協(xié)議的連接跟蹤機(jī)制
IPtablessupport用于支持包過(guò)法
Connectionstatematchsupport用戶支持連接狀態(tài)匹配
MASQUERADEtargetsupport——支持地址偽裝功能
Multiportmatchsupport支持多端H匹配,這對(duì)于設(shè)宜過(guò)淀規(guī)則非常有好處
REDIRECTtargetsuppon一一如果你想使用iptables將特定的流量交給特定的代理程序如squid來(lái)處理,這
個(gè)選項(xiàng)需要被編譯進(jìn)核心模塊
這些選項(xiàng)選擇完成后,按照核心編譯的方法對(duì)配置好的核心進(jìn)行編譯即可:
Wmakedcp
#makebzlmage
Wmakeinstall
Hmakemodules
#makeniodulcs_install
1.3ipiables的編譯和安裝
就象我們?cè)谏瞎?jié)中說(shuō)到的一樣,如果采用諸如Rcdhat之類的LinuxDistribution,在安裝系統(tǒng)時(shí),Iplablcs
已經(jīng)被做為缺省的軟件安裝到系統(tǒng)上了,用戶不需要另行安裝,如果用戶需要另外安裝新版本的iptables
軟件,可以到hup://的網(wǎng)站下載最新版本的ipuibles源代碼,目前最新的版本是1.2.9。
從網(wǎng)站上下載的源代碼是“tar.bz2”格式的,編譯源代碼的第一步工作是解壓縮,命令如下:
#/bin/larxjvfiptables-1.2.9.tar.bz2
解壓縮后,進(jìn)入源代碼的安裝Fl錄,開(kāi)始編譯:
WmakeKERNEI._DIR=/usi7src/linu:</
如果一切正常,那么iptabics應(yīng)該編譯好r,接下來(lái)可以進(jìn)行安裝r,安裝命令非常簡(jiǎn)單:
#makeinstallKERNEL_DIR=/usr/src/linux/
怎么樣?簡(jiǎn)單吧,當(dāng)然,如果這時(shí)您的系統(tǒng)核心還沒(méi)有將netfilter/iptables編譯進(jìn)去,那么安裝了iptables
軟件是沒(méi)有多大意義的。
1.4ipiables的啟動(dòng)和關(guān)閉
在RedhatLinux上,由于歷史的原為,ipchains和iptables是并存的(ipchains是在kerenl版本2.4.x以前的
包過(guò)海防火墻系統(tǒng)),因此ipchains和ipiables同時(shí)運(yùn)行是不允許的,我們首先要將ipchains的服務(wù)停掉:
#/sbin/chkconfig-level123456ipchainsoff
#/sbin/scrviccipchainsslop
當(dāng)然,既然不使用ipchains了,我,門(mén)也可以將ipchains從系統(tǒng)中移除,使用命令:
Wrpm-eipchains
第二步是啟動(dòng)Iptables的服務(wù)
#/sbin/chkconfig-level345iptableson
#/sbin/scrvicciptablesstart
chkconfig命令表示在系統(tǒng)啟動(dòng)時(shí),ipchains或iplablcs在相應(yīng)啟動(dòng)級(jí)別的跳省設(shè)置,如果是off,則代表系
統(tǒng)啟動(dòng)時(shí)不啟動(dòng)ipchains或iptab底服務(wù)。反之,則啟動(dòng)。
1.5iplublcs的工作原理和基礎(chǔ)架構(gòu)
iptables被分為兩部分,一部分被稱為核心空間,另一部分稱為用戶空間.在核心空間,ipiables從底層實(shí)
現(xiàn)了數(shù)據(jù)包過(guò)港的各種功能,比如NAT、狀態(tài)檢測(cè)以及高級(jí)的數(shù)據(jù)包的匹配策略等,在用戶空間,iptables
為用戶提供了控制核心空間工作狀態(tài)的命令集.無(wú)論如何,一個(gè)數(shù)據(jù)包都會(huì)經(jīng)過(guò)下圖所示的路徑,并在其
中的任何一條路徑中被處理。
首先,當(dāng)一個(gè)包進(jìn)來(lái)的時(shí)候,也就是從以太網(wǎng)卡進(jìn)入防火墻.內(nèi)核首先根據(jù)路由表決定包的目標(biāo)。如果
目標(biāo)生機(jī)就是本機(jī),則如下圖直接進(jìn)入INPUT鏈,再由本地正在等待該包的進(jìn)程接收,否則,如果從以太
網(wǎng)卡進(jìn)來(lái)的包目標(biāo)不是本機(jī),再看是否內(nèi)核允許轉(zhuǎn)發(fā)包(可用echoI>/proc/sys/nct/ipv4/ip_forward打開(kāi)轉(zhuǎn)
發(fā)功能如果不允許轉(zhuǎn)發(fā),則包被DROP掉,如果允許轉(zhuǎn)發(fā),則送出本機(jī),這當(dāng)中決不經(jīng)過(guò)INPUT或者
OUTPUT鏈,因?yàn)槁酚珊蟮哪繕?biāo)不是本機(jī),只被轉(zhuǎn)發(fā)規(guī)則應(yīng)用,最后,該linux防火墻E機(jī)本身能夠產(chǎn)生
包,這種包只經(jīng)過(guò)OUTPUT鏈被送出防火墻。
現(xiàn)在,我們來(lái)討論為什么iptables叫iptables,這句話挺別扭是嗎?但iptables的名字起的確實(shí)如其名,我們
可以叫它ip表,在iptables中共有三類表,分別是mangle、nat和filter?
mangle表從目前來(lái)看,他的作用對(duì)于滿足常規(guī)的防火墻應(yīng)用作用不大,我們?cè)谶@里不進(jìn)行具體的描述。
nat表的作用在于對(duì)數(shù)據(jù)包的源或目的IP地址進(jìn)行轉(zhuǎn)換,這種應(yīng)用也許只會(huì)在IPv4的網(wǎng)絡(luò)中適用,nat表
又可主要分為三條鏈,如下:
DNAT:DNAT操作主要用在這樣一種情況下,你有一個(gè)合法的1P地址,要把對(duì)防火墻的訪問(wèn)重定向到其
他的機(jī)子上,比如DMZ。也就是說(shuō),我們改變的是目的地址,以使包能電路由到某臺(tái)主機(jī)上。
SNAT:SNAT改變包的源地址,這在極大程度上可以隱藏你的本地網(wǎng)絡(luò)或者DMZ等。一個(gè)很好的例子是
我們知道防火墻的外部地址,但必須用這個(gè)地址替換本地網(wǎng)絡(luò)地址。有了這個(gè)操作,防火墻就能自動(dòng)地時(shí)
包做SNAT,以使LAN能連接到iMcmct。如果使用類似/24這樣的地址,是不會(huì)從Internet得
到任何回應(yīng)的。因?yàn)镽FCI9I8定義了這些網(wǎng)絡(luò)為私有的,只能用于LAN內(nèi)部。
MASQUERADE:MASQUERADE的作用和SNAT完全一樣,只是計(jì)算機(jī)的負(fù)荷稍微多一點(diǎn)。因?yàn)閷?duì)每個(gè)
匹配的包,MASQUERADE都要杳找可用的1P地址,而不象SNAT用的IP地址是配過(guò)好的。當(dāng)然,這也
有好處,就是如果我們使用諸如PPPOE等撥號(hào)的方式連接Internet,這些地址都是由1SP的隨機(jī)分配的,
這時(shí)使用MASQUERADE是非常好的一個(gè)解決方案。
filter表用來(lái)過(guò)濾數(shù)據(jù)包,我們可以在任何時(shí)候匹配包并過(guò)濾它們。我優(yōu)就是在這里根據(jù)包的內(nèi)容對(duì)包做
DROP或ACCEPT的。當(dāng)然,我修.也可以預(yù)先在其他地方做些過(guò)灌,但是這個(gè)表才是設(shè)計(jì)用來(lái)過(guò)浦的。幾
乎所有的target都可以在這兒使用<
1.6狀態(tài)機(jī)制
狀態(tài)機(jī)制是iptabks中較為特殊的?部分,達(dá)也是iptdblcs和比較老的ipchains的?個(gè)比較大的區(qū)別之、
運(yùn)行狀態(tài)機(jī)制(連接跟蹤)的防火墻稱作帶有狀態(tài)機(jī)制的防火墻,以下簡(jiǎn)稱為狀態(tài)防火墻。狀態(tài)防火墻比
非狀態(tài)防火墻要安全,因?yàn)樗试S我們編寫(xiě)更嚴(yán)密的規(guī)則。
在iplablcs卜.一共有四種狀態(tài),分別被稱為NEW、ESTABLISHED、INVALID、RELATED,這四種狀態(tài)對(duì)
于TCP、UDP、ICMP三種協(xié)議均有效。下面,我們來(lái)分別闡述四種狀態(tài)的特性。
NEW:NEW說(shuō)明這個(gè)包是我們看到的第一個(gè)包。意思就是,這是conntrack模塊看到的某個(gè)連接的第一個(gè)
包,它即將被匹配了。比如,我們看到一個(gè)SYN包,是我們所留意的連接的第一個(gè)包,就要匹配它。
ESTABLISHED:ESTABLISHED已經(jīng)注意到兩個(gè)方向上的數(shù)據(jù)傳輸,而且會(huì)維續(xù)匹配這個(gè)連接的包。處于
ESTABLISHED狀態(tài)的連接是非常容易理解的。只要發(fā)送并接到應(yīng)答,連接就是ESTABLISHED的了。一
個(gè)連接要從NEW變?yōu)镋STABLISHED,只需要接到應(yīng)答包即可,不管這個(gè)包是發(fā)往防火墻的,還是要由
防火墻轉(zhuǎn)發(fā)的。ICMP的錯(cuò)誤和重定向等信息包也被看作是ESTABLISHED,只要它們是我們所發(fā)出的信息
的應(yīng)答。
RELATED:RELATED是個(gè)比較麻煩的狀態(tài)。當(dāng)一個(gè)連接和某個(gè)已處于ESTABLISHED狀態(tài)的連接有關(guān)系
時(shí),就被認(rèn)為是RELATED的了。換句話說(shuō),一個(gè)連接要想是RELATED的,首先要有一個(gè)ESTABLISHED
的連接。這個(gè)ESTABLISHED連接再產(chǎn)生一個(gè)生連接之外的連接,這個(gè)新的連接就是RELATED的了,當(dāng)
然前提是conntrack模塊要能理解RELATEDftp是個(gè)很好的例子,F(xiàn)TP-data連接就是和FTP-conlrol有關(guān)
聯(lián)的,如果沒(méi)有?在ipiables的策略中配置RELATED狀態(tài),F(xiàn)TP-data的連接是無(wú)法正確建立的,還有其他的
例子,比如,通過(guò)IRC的DCC連接。有了這個(gè)狀態(tài),ICMP應(yīng)答、FTP傳輸、DCC等才能穿過(guò)防火墻正
常工作。注意,大部分還有一些UDP協(xié)議都依賴這個(gè)機(jī)制。這些協(xié)議是很曳雜的,它們把連接信息放在數(shù)
據(jù)包里,并且要求這些信息能被正確理解.
INVALID:INVALID說(shuō)明數(shù)據(jù)包不能被反別屬于哪個(gè)連接或沒(méi)有任何狀態(tài)。有幾個(gè)原因可以產(chǎn)生這種情況,
比如,內(nèi)存溢出,收到不知屬于哪個(gè)連接的ICMP錯(cuò)誤信息。一般地,我們DROP這個(gè)狀態(tài)的任何東西,
因?yàn)榉阑饓φJ(rèn)為這是不安全的東西。
每個(gè)狀態(tài)相對(duì)于不同的第四層協(xié)議來(lái)講,梢微有些區(qū)別,對(duì)于TCP協(xié)議來(lái)說(shuō),當(dāng)防火墻收到第一個(gè)數(shù)據(jù)包,
也就是SYN報(bào)文時(shí),將該會(huì)話標(biāo)記為NEW狀態(tài),在系統(tǒng)的/proc/nct/目錄下,可以查閱文件ip_conntrack.
這是在內(nèi)存空間里存放防火墻當(dāng)前狀態(tài)表的臨時(shí)文件,對(duì)于NEW狀態(tài)的記錄如下:
tcp6117SYN.SENTsrc=dst=5sport=1031dport=23[UNREPLIED]src=5
dst=sport=23dp<)rt=IO31usc=l
從上面的記錄可以看出,SYN_SENT狀態(tài)被設(shè)置廣,這說(shuō)明連接已經(jīng)發(fā)出一個(gè)SYN包,但應(yīng)答還沒(méi)發(fā)送
過(guò)來(lái),這可從[UNREPLIED]標(biāo)志看出,當(dāng)服務(wù)器端回應(yīng)了SYN/ACK包后,狀態(tài)表改寫(xiě)為:
tcp657SYN_RECVsrc=l92.168.i5dst=5sport=i031dport=23src=5dst=i
sport=23dport=1031usc=1
現(xiàn)在我們已經(jīng)收到了相應(yīng)的SYN/ACK包,狀態(tài)也變?yōu)镾YN,RECV,這說(shuō)明最初發(fā)出的SYN包已正確傳
輸,并且SYN/ACK包也到達(dá)了防火墻.這就意味著在連接的兩方都有數(shù)據(jù)傳輸,因此可以認(rèn)為兩個(gè)方向
部有相應(yīng)的回應(yīng)。
接下來(lái),TCP三次握手的隨后一個(gè)報(bào)文ACK包也到達(dá)了防火墻,防火墻上的狀態(tài)表變成了:
tcp6431999ESTABLISHEDsrc=dst=5sport=1031dport=23src=192.l68.1.35
dst=sport=23dport=1031use=1
現(xiàn)在,我們來(lái)看看UDP協(xié)議的狀態(tài)描述方法,從協(xié)議本身的特性來(lái)看,UDP連接是無(wú)狀態(tài)的,因?yàn)樗鼪](méi)
布?任何的連接建立和關(guān)閉過(guò)程。以某個(gè)順序收到的兩個(gè)數(shù)據(jù)包是無(wú)法確定它們的發(fā)出順序的。但內(nèi)核仍然
可以對(duì)UDP連接設(shè)置狀態(tài)。我們來(lái)看看是如何跟蹤UDP連接的,以及在核心目錄/proc/ne(/ip_connirack的
相關(guān)記錄。
當(dāng)?shù)谝粋€(gè)UDP的數(shù)據(jù)包到達(dá)防火墻后,防火墻在他的狀態(tài)表中留下了這樣的記錄:
udp1720src=dst=l92.l68.l.5sport=l37dport=l025|UNREPLIED|src=
dst=sport=1025dport=137use=1
UNREPLIED代表這是一個(gè)狀態(tài)為NEW的數(shù)據(jù)包,當(dāng)這條連接的回應(yīng)數(shù)據(jù)包到達(dá)防火墻后,防火墻立即將
修改這條狀態(tài)記錄:
udp17160src=ldst=lsport=137dport=l025src=ldst=192.l68.1.2sport=1025
dport=137use=1
在這條新的狀態(tài)記錄中,UNREPL1ED被刪除了,這代表現(xiàn)在防火墻已經(jīng)建立了一條UDP協(xié)議的會(huì)話,但
這里并沒(méi)有象TCP協(xié)議那樣顯示ESTABLISHED標(biāo)記,這是TCP的狀態(tài)記錄和UDP的狀態(tài)記錄梢微不同
的一個(gè)地方,當(dāng)然,還有一個(gè)地方需要注意,在測(cè)試中,還需要有一些數(shù)據(jù)包經(jīng)過(guò),防火墻才會(huì)將狀態(tài)記
錄改寫(xiě)成:
udp17179src=192.l68.1.2dst=lsport=137dport=1025src=!dst=sport=1025
dport=137[ASSURED]use=l
ASSURED狀態(tài)表示當(dāng)前有數(shù)據(jù)在進(jìn)行傳輸,表面當(dāng)前連接的狀態(tài)是ACTIVE的。如果,在這個(gè)狀態(tài)下數(shù)
據(jù)停止了傳輸,則這條記錄會(huì)有一個(gè)計(jì)時(shí)器,也就是記錄中的第三個(gè)字段,上面這條記錄的第三個(gè)字段是
179,代表當(dāng)前的ASSURED狀態(tài)還能夠保持179秒,如果還有新的數(shù)據(jù)包經(jīng)過(guò),那么計(jì)時(shí)器會(huì)被重新設(shè)置
成缺省的180秒,如果在180秒內(nèi)都沒(méi)有流量,那么這條狀態(tài)記錄就會(huì)從狀態(tài)表中被刪除。
最后,我們?cè)趤?lái)看看Linuxkernel是如何標(biāo)示ICMP協(xié)議的狀態(tài)的,ICMP也是一種無(wú)狀態(tài)協(xié)議,它只是用
來(lái)控制而不是建立連接。ICMP包有很多類型,但只有四種類型有應(yīng)答包,它們是回顯請(qǐng)求和應(yīng)答(Echo
requestandreply),時(shí)間微請(qǐng)求和應(yīng)答(Tiines【amprequeslandreply),信息請(qǐng)求和應(yīng)答(Informationrequest
andreply),還有地址掩碼請(qǐng)求和應(yīng)答(Addressmaskrequestandreply),這些包有兩種狀態(tài),NEW和
ESTABLISHED。時(shí)間戳請(qǐng)求和信息請(qǐng)求已經(jīng)廢除不用了,回顯請(qǐng)求還是常用的,比如ping命令就用的到,
地址掩碼請(qǐng)求不太常用,但是可能有時(shí)很有用并旦值得使用??纯聪旅娴膱D,就可以大致了解ICMP連接
的NEW和ESTABLISHED狀態(tài)了,
如圖所示,主機(jī)向目標(biāo)發(fā)送一個(gè)回顯請(qǐng)求,防火墻就認(rèn)為這個(gè)包處于NEW狀態(tài)。目標(biāo)回應(yīng)一個(gè)回顯應(yīng)答,
防火墻就認(rèn)為包處于ESTABLISHED了。當(dāng)回顯請(qǐng)求被發(fā)送時(shí),ip_conni:ack里就有這樣的記錄了:
iempI25src=l92.l68.1.6dst=l92.l68.I.IOtypc=8code=0id=33029[UNREPLIED]src=192.l68.I.IO
dst=type=Ocode=0id=33029use=1
可以看到,ICMP的記錄和TCP、UDP的有點(diǎn)區(qū)別,協(xié)議名稱、超時(shí)時(shí)間和源、目地址都一樣,不同之處
在于沒(méi)有了端口,而新增了三個(gè)新的字段:type,code和id。字段lype說(shuō)明ICMP的類型。code說(shuō)明ICMP
的代碼,這些代碼在附錄ICMP類型里有說(shuō)明。id是ICMP包的ID,每個(gè)ICMP包被發(fā)送時(shí)都被分配一個(gè)
1D.接受方把同樣的ID分配給應(yīng)答包,這樣發(fā)送方能認(rèn)出是哪個(gè)請(qǐng)求的應(yīng)答。
IUNREPLIED]的含義和前面一樣,說(shuō)明數(shù)的傳輸只發(fā)生在一個(gè)方向上,也就是說(shuō)未收到應(yīng)答。再往后,是
應(yīng)答包的源、目地址,還有相應(yīng)的三個(gè)新字段,要注意的是type和code是隨著應(yīng)答包的不同而變化的,id
和請(qǐng)求包的一樣。和前面一樣,應(yīng)答包被認(rèn)為是ESTABLISHED的。然而,在應(yīng)答包之后,這個(gè)ICMP連
接就不再有數(shù)據(jù)傳輸廣。所以,一E應(yīng)答包穿過(guò)防火墻,ICMP的連接跟蹤記錄就被捎毀了.因此,要想
在/proc/ip_conntrack文件中抓到ICMP協(xié)議的狀態(tài)記錄實(shí)在不是一件容易的事。您可以用如下的命令來(lái)嘗
試獲取這些記錄:
Wcat/proc/net/ip_conntrack|grepiemp
如果沒(méi)有輸出,那么就不停的重旦這個(gè)命令,直到發(fā)現(xiàn)iemp的記錄為止.
以上各種情況,請(qǐng)求被認(rèn)為NEW,應(yīng)答是ESTABLISHED,換句話說(shuō),就是當(dāng)防火墻看到一個(gè)請(qǐng)求包時(shí),
就認(rèn)為連接處于NEW狀態(tài),當(dāng)有應(yīng)答時(shí),就是ESTABLISHED狀態(tài)。
1.7規(guī)則的保存和恢旦
iptables提供了兩個(gè)命令來(lái)對(duì)策略進(jìn)行保存和恢復(fù):iplables-save和iplables-restore.iptables-save用來(lái)保存
當(dāng)前內(nèi)存空間的策略,iplablcs-rcslorc用來(lái)將iptables配置文件的策略寫(xiě)入內(nèi)存空間。
iptables-save的命令格式非常簡(jiǎn)單:
Wiptables-save-c>/etc/sysconfig/lptables
上面的命令表示將內(nèi)存中的策略寫(xiě)入/clc/sysconlig/iplablcs文件中,同時(shí)招當(dāng)前內(nèi)存中針對(duì)每條策略的流量
統(tǒng)計(jì)值也寫(xiě)入該文件。
#iptables-save-tnat>/ctc/sysconng/iptablcs
這條命令表明只保存當(dāng)前內(nèi)存中的nal表。
#iptables-restore/etc/sysconfig>zipiables
這條命令表明將/ctc/sysconfig/iplabies配置文件中的內(nèi)容寫(xiě)入內(nèi)存空間,并覆蓋當(dāng)前內(nèi)存空間中的所有配置。
如果不希望更改當(dāng)前內(nèi)存空間中的配置,可以添加-n參數(shù),如下:
#iptables-resiorc-n/clc/sysconfig.,iptablcs
這表明配置文件只將內(nèi)存空間中沒(méi)有的策略添加到內(nèi)存空間。
另一種運(yùn)行iptables的方法是使用腳本,使用腳本能夠?qū)崿F(xiàn)一些更以活的、結(jié)構(gòu)化的配置策略,對(duì)于一些習(xí)
慣使用腳本管理防火墻的系統(tǒng)管理員來(lái)說(shuō),這是一個(gè)更好的選擇,后面,我們會(huì)提供一些腳本范例。
1.8編寫(xiě)詳細(xì)的規(guī)則表
本節(jié)我們開(kāi)始揭開(kāi)ipiablcs的神秘面紗,當(dāng)我們真正進(jìn)入iptables的世界,我們發(fā)現(xiàn),這里的世界原來(lái)也很
精彩。
iptables的所有命令都是以iptables開(kāi)頭,其總體的命令結(jié)構(gòu)如下:
iptables[-1table)command[match][^rget/jump]
1.8.1table
-ltabic表示當(dāng)前的策略屬于哪個(gè)table,前面,我們提到廣,一共有三種lablc:mangle、Eller和nat,由于
iptables的主要工作是過(guò)渡進(jìn)出本地網(wǎng)絡(luò)適配器的數(shù)據(jù)包,因此,很自然的,如果一條策略是關(guān)于過(guò)港的,
那么在缺省情況下,"-【filler”是可以省略的,而mangle和nat是一定要注明的,在實(shí)際的應(yīng)用環(huán)境當(dāng)中,
mangle幾乎是用不到的,因此,在本文中,我們著重討論nat表和fillei■表。
1.8.2command
command指定iptables時(shí)我們提交的規(guī)則要做什么樣的操作。這些操作可能是在某個(gè)表里增加或刪除一些
東西,或做點(diǎn)兒其他什么。以下是iplublcs可用的command:
命令-A,-append
范例iptables-AINPUT
注解添加規(guī)則
命令-D,-delete
范例iptables-DINPUT8,iptables-DFORWARD-ptcp-s2-jACCEPT
注解從所選的鏈中刪除規(guī)則,有兩種方法:一種是以編號(hào)來(lái)表示被刪除的規(guī)則,另一種是以整條的規(guī)則
來(lái)匹配策略。
命令-R,-replace
范例iptables-RFORWARD2-ptcp-s-jACCEPT
注解替換相應(yīng)位置的策略,這時(shí)有一點(diǎn)需要注意,如果源或目的地址是以名字而不是以IP地址表示的,
如果解析出的1P地址多于一個(gè),那么這條命令是失效的。
命令-I,-insert
范例iptables-IFORWARD2-plep-s-jACCEPT
注解這個(gè)命令和上面一個(gè)命令只蘢一個(gè)參數(shù),而不同之處在于這個(gè)命令是在相應(yīng)的位置前面插入一條命
令,而不是替換。
命令-L,-list
范例iptables-tnat-L>iptables-LINPUT
注解列出當(dāng)前內(nèi)存空間的策略。
命令-F,flush
范例iptables-F,iptables-tnat-F
注解清空所選的處的配置規(guī)則。
命令-N,-new-chain
范例iptables-Ntcp_allowed
注解添加新的鏈,在默認(rèn)情況下,iptables有ACCEPT.DROP、REJECT、LOG、REDIRECT等,如果
希望對(duì)數(shù)據(jù)包做定制的處理,可以自己定義新的鏈。
命令-X,-delete-chain
范例iptables-Xtcp_allowed
注解這條命令用于刪除自定義的漣。
命令-P?-pollicy
范例iptables-PINPUTDROP
注解為鏈設(shè)置缺省的target,通常為ACCEPT和DROP,可以理解為防火墻的缺省策略:除非特定的被
運(yùn)行,其他的都被禁止或除非特定的被禁止,其他的都被允許。
上表列出了一些主要的ipiables的命令,此外還有其他的一些命令不很常用,我們?cè)谶@里不作介紹。這些命
令有一些選項(xiàng),要想詳細(xì)了解選項(xiàng)的具體內(nèi)容,可以查看iplablcs的manpagc頁(yè)。
1.8.3match
在iptables的一條策略中,如何匹配一個(gè)數(shù)據(jù)包是非常關(guān)鍵的.這一節(jié),我們會(huì)詳細(xì)討論一些matche,大
致可以歸為五類。第一類是genericmaiches(通用的匹配),適用于所有的規(guī)則:第二類是TCPmalches,
顧名思義,這只能用于TCP包:第三類是UDPmalchcs,當(dāng)然它只能用在UDP包上了:第四類是ICMP
matches,針對(duì)ICMP包的;第五類比較特殊,針對(duì)的是狀態(tài)(state),所有者(owner)和訪問(wèn)的頻率限制
(limit)等。
通用匹配:無(wú)論我們使用的是何種協(xié)議,也不管我們又裝入了匹配的何和擴(kuò)展,通用匹配都是可用的。也
就是說(shuō),它們可以直接使用,而不需要什么前提條件,在后面你會(huì)看到,有很多匹配操作是需要其他的匹
配作為前提的。
-p.-protocol,匹配指定的協(xié)議,協(xié)議可以用名字來(lái)表示,比如tep、udp.iemp等,名字是部分大小寫(xiě)的,
也可以使用他們的整數(shù)值,比如icp對(duì)應(yīng)的是整數(shù)I、udp對(duì)應(yīng)17,tep對(duì)應(yīng)6。在缺省情況下,如果不寫(xiě)
這個(gè)匹配,代表所有ALL,但要注意,ALL表示tep、udp、iemp這二:種協(xié)議,而不包括/etc/proiocol中的
所有協(xié)議。如果有多個(gè)協(xié)議需要匹配,可以使用逗號(hào)分割,例如:
#iptables-AINPUT-p(cp,udp-jACCEPT
在協(xié)議的前面用“!”標(biāo)示,代表除了“邏輯非”,例如:
#iptables-AINPUT-p!lep-jDROP
這個(gè)表達(dá)式代表只允許tcp協(xié)議通過(guò),而udp和icmp全部被禁止通過(guò)。
-s,-src,-source,匹配數(shù)據(jù)包的源地址,地址的表示形式如下:
單個(gè)地址,如192.168.1.1,也可寫(xiě)成/32/55
網(wǎng)絡(luò)地址,如192.168.1.0,也可寫(xiě)成/24/
在地址前加“!”表示去反,如!表示除這個(gè)地址段外的所有地址。
如果不在一條策略中注明地址,表示所有地址,也可以表示成000.0/0
-d.-dst.-destination,匹配數(shù)據(jù)包的目的地址,表示方法于源地址的表示方法一致。
-i,-in-interface,以包進(jìn)入本地所使用的接口來(lái)匹配數(shù)據(jù)包,注意,這個(gè)匹配只適用于INPUT、FORWARD.
PREROUTING鏈中,而用在其他任何地方都會(huì)出錯(cuò)??梢允褂媒涌诘拿Q火標(biāo)示數(shù)據(jù)包的入口,如cthO、
pppO等,也可以使用通配符,如clh+,表示匹配從所有的以太接口進(jìn)入的數(shù)據(jù)包,和前面的一些匹配特性
一樣,我們可以使用去反符號(hào)“!”來(lái)標(biāo)示除了被列出的接口的所有接口.
-o.-oul-intcrfacc,以包離開(kāi)本地所使用的接口來(lái)匹配數(shù)據(jù)包,匹配方法和-i的匹配方法完全一致
#iptables-AFORWORD-iethO-oethl-ptcp-jACCEPT
上例說(shuō)明了凡是從ethO接口進(jìn)入,Aethl接口流出的tcp數(shù)據(jù)流被允許逍過(guò)。
隱含匹配:這種匹配操作是自動(dòng)地或隱含地裝載入內(nèi)核的。例如我們使川參數(shù)十tcp時(shí),不需再裝入任何
東西就可以匹配只有IP包才有的一些特點(diǎn)。有三種陶含的匹配針對(duì)三種不同的協(xié)議,即TCPmatches,UDP
maiches和ICMPmatches,它們分別包括一套只適用于相應(yīng)協(xié)議的判別標(biāo)準(zhǔn)。相對(duì)于隱含匹配的是顯式匹
配,它們必須使用沖或-maich被劃確地裝載,而不能是自動(dòng)地或隱含地,下一節(jié)會(huì)介紹到。
tcpmatches,該匹配只匹配icp包的細(xì)節(jié),它們必須有-picp做為前提條件。4:要有以下幾種匹配參數(shù):
-sport,-source-port,匹配源端口,有幾個(gè)原則需要注意:
1、不使用此項(xiàng),則表示匹配所有端口。
2、可以使用服務(wù)名或端口號(hào),使用服務(wù)名是為了簡(jiǎn)化用戶的配置,也許用戶知道服務(wù)名,但不一定知道
服務(wù)對(duì)應(yīng)的端口號(hào),服務(wù)名必須在,ctc/scrviccs文件中進(jìn)行標(biāo)注,當(dāng)然箍化配置的代價(jià)是iptables必須花費(fèi)
額外的系統(tǒng)資源在/etc/services文件中查詢服務(wù)名對(duì)應(yīng)的端口號(hào),如果用戶知道服務(wù)名對(duì)應(yīng)的端口號(hào),我們
還是建議用戶直接使用端口號(hào)來(lái)定義。
3、可以使用連續(xù)的端口來(lái)表示一個(gè)服務(wù),比如-sport135139,這表明是從135端口到139端口,也有
這樣的表示方法-sport1024:,表示匹配源端口從1024到65535。
4、可以在端F1號(hào)前添加“!”表示除了該端口以為的其他所有端n。
5、不能用這種匹配來(lái)標(biāo)識(shí)端口不連續(xù)的情況,我們會(huì)在后面的部分介紹如何匹配端口不連續(xù)的情況。
-dport,-destination-port,匹配目的端口,使川方法與源端口的匹配方法一致。
#iptables-AFORWARD-ptcp-dport21:25-jACCEPT
上例中的語(yǔ)句表明允許tcp21到25端口的服務(wù)通過(guò)防火墻。
udpmatches:鑒于udp協(xié)議與lep協(xié)議的相似之處:都用端口號(hào)來(lái)表示一個(gè)應(yīng)用或服務(wù),因此udpmatches
的使用方法也和tcpmatches的使住方法基本一致,它也有-sportx-dport的匹配原則,但與tcpmatches
不同的是,udpmaiches必須與-pudp配合使用,這是非常容易理解的問(wèn)題。我們?cè)谶@里就不需要多說(shuō)了。
icmpmatches:與tcp和udp不同,icmpmatches是根據(jù)ICMP類型匹配包,類型的指定可以使用十進(jìn)制數(shù)
值或相應(yīng)的名字,數(shù)值在RFC792個(gè)有定義,名字可以用iptables—prsoslicmp-help查看。這個(gè)匹配也
可用英文博嘆號(hào)取反,如:-iemp-lype18就表示匹配除類型8之外的所有1CMP包。人們經(jīng)常會(huì)使用到icmp
協(xié)議,但最常用的可能要屬icmpecho-request和icmpecho-reply了,也就是我們檢測(cè)網(wǎng)絡(luò)連通性的ping命
令了。
顯示匹配:顯示匹配就必須用-m或-match裝載,比如要使用狀態(tài)匹配就必須使用-mstale。有些匹配還需
要指定協(xié)議,有些就不需要,比如連接狀態(tài)就不要。這些狀態(tài)是NEW(還未建立好的連接的第一個(gè)包),
ESTABLISHED(已建立的連接,也就是已經(jīng)在內(nèi)核里注冊(cè)過(guò)的),RELATED(由已經(jīng)存在的、處于已建立
狀態(tài)的連接生成的新連接),等等。有些匹配還處在開(kāi)發(fā)階段,或者還只走為了說(shuō)明ipiables的強(qiáng)大能力.
這說(shuō)明不是所有的匹配一開(kāi)始就是實(shí)用的,但以后你可能會(huì)用到它。隨著ipiables新版本的發(fā)布,會(huì)有一
些新的匹配可用。隱含匹配和他式匹配最大的區(qū)別就是一個(gè)是跟隙協(xié)議里配自動(dòng)裝載的,一個(gè)是兄式裝載
的。
limil匹配:這個(gè)匹配操作必須由-mlimil明確指定才能使用。有「它的幫助,就可以對(duì)指定的規(guī)則的日志數(shù)
量加以限制,以免系統(tǒng)記錄大量重復(fù)的日志信息。比如,你可以事先設(shè)定一個(gè)限定值,當(dāng)符合條件的包的
數(shù)量不超過(guò)它時(shí),就記錄;超過(guò)了,就不記錄。我們可以控制某條規(guī)則在一段時(shí)間內(nèi)的匹配次數(shù)(也就是
可以匹配的包的數(shù)量〉,這樣就能夠減少DoSsynn(x)d攻擊的影響。
-limit-burst:這個(gè)參數(shù)定義了當(dāng)前策略的峰值,也就是單位時(shí)間內(nèi)匹配的數(shù)據(jù)包的附大數(shù)量,每匹配一個(gè),
數(shù)值就減一,直到0為止,新來(lái)的數(shù)據(jù)包將不被進(jìn)行匹配操作,也可以招這一數(shù)值理解為允許建立連接的
閥值。
-limit:這個(gè)參數(shù)定義了一個(gè)相當(dāng)于頻率的概念,在一Hmil-burst這個(gè)匹配項(xiàng)中我們已經(jīng)提到,當(dāng)-limil-bursi
定義的數(shù)值被耗盡,在單位時(shí)間內(nèi)是會(huì)得到適當(dāng)?shù)难a(bǔ)充的,這個(gè)頻率和數(shù)量就是在-limit中定義的。
舉個(gè)例子也許更容易幫你理解-limit-burst和-limit組合使用的功效。具有再充值功能的電話卡(比如神
州行卡)想必許多人都用過(guò),設(shè)想這樣?種情況,某個(gè)人在新買的手機(jī)上?次性的充了300元錢的話費(fèi),
然后以后每月月底都往上里充】00元的話費(fèi),但有兩個(gè)前提:
1、充值后的卡內(nèi)余額不得超過(guò)300元。
2、當(dāng)月能且只能充100元的話班。即便最初的300元話或全部用光了,也只能補(bǔ)充這么多的話班。
在上例中我們可以將那個(gè)300元話費(fèi)看成-limil-bursl定義的數(shù)值,將每月的100元話費(fèi)看成limit定義
的數(shù)值,記住-limit是有單位的,在iptables中,這個(gè)單位可以是second、min、hcur、day。
我們可以用limil功能來(lái)做一些防止Dos攻擊的工作,看下面的例子:***************************
#iplables-AINPUT-ptcp-dport80-inlimit-limit10/second-limit-burst200-jACCEPT
上面的例子是在傳達(dá)這樣一個(gè)意思,主機(jī)的80端口對(duì)外開(kāi)放,系統(tǒng)資源允許每秒新建立250個(gè)會(huì)話,主機(jī)
通過(guò)iptables設(shè)置了能夠提供每杪200個(gè)新會(huì)話的容量(通常情況下,我們需要為服務(wù)器或主機(jī)本身考慮
些冗余),在正常情況下,這個(gè)數(shù)值完全能夠滿足應(yīng)用的要求,但如果有某個(gè)攻擊者對(duì)主機(jī)的80端口進(jìn)行
拒絕服務(wù)攻擊,每秒200個(gè)新會(huì)話的容量也許一會(huì)的功夫就被用光了,對(duì)于一個(gè)沒(méi)有保護(hù)措施的主機(jī)來(lái)講,
系統(tǒng)馬上就會(huì)雅疾,但由于我們?cè)O(shè)置了?定的保獷措施,即便有攻擊過(guò)來(lái),在iptablcs這?關(guān)就會(huì)被丟棄。
在這之后,iptablcs會(huì)每秒重新給主機(jī)1()個(gè)新的會(huì)話名額,使之能夠處理新的連接。在新來(lái)的連接請(qǐng)求中,
有正常的連接請(qǐng)求,也有一些是攻擊,但無(wú)論如何,通過(guò)這種方式,我們保證了服務(wù)器始終不會(huì)被攻癱掉,
在更有效的對(duì)付拒絕服務(wù)攻擊的新技術(shù)出現(xiàn)以前,這也許是最有效的方法。
MAC匹配:基于包的MAC源地址匹配包,地址格式只能是XX:XX:XX:XX:XX:XX.當(dāng)然它也可以用英文
感嘆號(hào)取反,^n-mac-source!00:00:00:00:00:01,意思很簡(jiǎn)單了,就是除此之外的地址都可接受。注意,
因?yàn)镸ACaddresses只用于Elhcmcl類型的網(wǎng)絡(luò),所以這個(gè)match只能用于Elhcmcl接口。而且,它還只
能在PREROUTING,FORWARD和INPUT鏈里使用。
MAC匹配有一個(gè)非常好的應(yīng)用就是可以進(jìn)行IP地址和MAC地址的綁定,對(duì)于一些安全要求較高的網(wǎng)絡(luò),
這是一個(gè)有效的配置策略。
#iptablcs-AFORWARD-s3-mmac-mac-sourcc(X):c():4c:3d:5c:4f-jACCEPT
上例表明源IP地址為3.源MAC地址為00:e0:4c:3d:5e:4f的計(jì)算機(jī)能夠通過(guò)防火墻,如果這個(gè)
用戶將自己的IP地址改成T4,而該地址同樣也做rMAC地址的match,那么要想通過(guò)更改IP
地址而獲取上網(wǎng)權(quán)限的企圖是徒勞的。
說(shuō)明:可以通過(guò)iplablcs實(shí)現(xiàn)IP地址與MAC地址綁定的功能,但還有一種更加高效的方法,我們?cè)谶@里
簡(jiǎn)要的說(shuō)明一下,在/etc/目錄下編輯文件ethers,在文件中添加如下內(nèi)容:
00:e0:4c:3d:5e:4f
00:e0:4c:3d:5b:3d
文件編輯完成后執(zhí)行命令:
#/sbin/arp-f
sune匹配:siaie匹配在防火墻配置過(guò)程中非常重要的,如果沒(méi)有siale的配置,那么需要配置雙向的規(guī)則才
能滿足通訊的需要,但防火墻既然有狀態(tài)檢測(cè)功能,我們?yōu)槭裁床缓煤檬褂盟兀?/p>
-state:slate的狀態(tài)有四種,指定耍匹配包的的狀態(tài),當(dāng)前有4種狀態(tài)可汨:INVALID,ESTABLISHED,
NEW和RELATEDo四種數(shù)據(jù)包色狀態(tài)我們?cè)谇懊嬉呀?jīng)做了詳細(xì)的描述木節(jié)我們只進(jìn)行slate的用法描述,
如下例所示:
#iptablcs-AFORWARD-ptcp-mstate-staleRELATED.ESTABL1SHED-jACCEPT
本例表明凡是數(shù)據(jù)包狀態(tài)為“RELATED"、“ESTABLISHED”的tcp包允許通過(guò)防火墻,在一般情況下,
基于狀態(tài)的策略都是配置在每一條chain的最前面,因?yàn)楫?dāng)包被匹配到以后,就能夠直接被處理了,這是
一種比較高效的配置方法.關(guān)鍵字ESTABLISHED比較容易理解,即匹配狀態(tài)為“已經(jīng)建立連接”的數(shù)據(jù)
包,那么怎么理解"RELATED”BC,RELATED表示不屈「己經(jīng)建立的那條連接,但和那條連接有關(guān),比
如lip,lip在建立連接的過(guò)程中會(huì)首先建立一條flp-control連接用以傳輸指令等,真正傳輸數(shù)據(jù)的是一條叫
做ftp-daia的連接,而傳輸數(shù)據(jù)的連接是和傳輸控制信號(hào)的連接相關(guān)的,因此“RELATED”是用于類似這
些特殊服務(wù)的。在正常情況下,對(duì)于每一種協(xié)議:TCP、UDP、ICMP都可以單獨(dú)的配置狀態(tài)策略,但一種
比較簡(jiǎn)單高效的做法是:
?iptables-AINPUT-pall-mstate-stateRELATED.ESTABLISHED-jACCEPT
multiport:這個(gè)匹配選項(xiàng)為我們解決了如何在一條策略種匹配那些端口不連續(xù)的服務(wù),在一般情況下,一個(gè)
公司或企業(yè)的安全策略是允許內(nèi)部網(wǎng)絡(luò)使用有限的Intern”服務(wù),如收發(fā)電子郵件、上網(wǎng)瀏覽網(wǎng)頁(yè)、msn
聊天等,看看下面的例子:
#iplables-AFORWARD-ielhO-ptcp-tnmultiport-dports25,80,110,443.1863-jACCEPT
Wiptables-AFORWARD-iethO-pudp-dport53-jACCEPT
僅僅兩條命令就解決了內(nèi)部用戶上網(wǎng)收發(fā)E_mail、瀏覽網(wǎng)頁(yè)、使用msn聊天等需求,怎么樣,就這么簡(jiǎn)單。
1.8.41argel和jump
從字面的意思來(lái)理解,target表示目標(biāo),jump表示跳轉(zhuǎn),兩個(gè)結(jié)合起來(lái)表示被匹配到的數(shù)據(jù)包將跳轉(zhuǎn)的哪
個(gè)目標(biāo)去,并執(zhí)行那個(gè)目標(biāo)相應(yīng)的動(dòng)作,DROP、ACCEPT或其他。還乃舉個(gè)例子有助于我們理解(argei
和jump。
#iptables-Npower_users
#iptables-Apower_users-pall-jACCEPT
#iptables-AFORWARD-s-jpower_users
上面的例子中,笫一句表示新建一?條chain,名稱叫做powcjuscrs,第二句是對(duì)powcjuscrs鏈定義策略,
該策略表明接受所有協(xié)議的數(shù)據(jù)包,確實(shí)如此,否則我們也不會(huì)將這條鏈成為powejusers了,第三條語(yǔ)句
定義了一個(gè)轉(zhuǎn)發(fā)策略,將原地址為/24網(wǎng)段的用戶產(chǎn)生的數(shù)據(jù)包被跳轉(zhuǎn)至power-users鏈處理。
在本節(jié)中,我們將對(duì)比較常用的幾個(gè)targets進(jìn)行詳細(xì)的描述,他們分別是DROP、ACCEPT、SNAT,DNAT、
MASQUERADE、LOG。
DROP:DROPtarget表示被匹配的數(shù)據(jù)包將要被執(zhí)行的動(dòng)作是丟棄,也就是說(shuō),在這里,包的生命走到了
終點(diǎn),在這種情況下,iptables對(duì)包的處理只是將包丟棄,它不會(huì)對(duì)包的發(fā)送者返回任何信息,也不會(huì)向路
由器發(fā)送任何錯(cuò)誤信息,這在某些情況下會(huì)造成一些問(wèn)題,比如發(fā)送者還在苦苦等待回包的到來(lái),而發(fā)送
出去的包早就在半路上夭折了,可以通過(guò)REJECTtarget來(lái)避免這個(gè)問(wèn)題,REJECT和DROP的差別在于它
不僅僅丟棄包,而且還禮節(jié)性的告訴發(fā)送者,這樣就不至于發(fā)送者苦苦等待了。其實(shí)對(duì)于一般的應(yīng)用,我
們并不建議使用REJECT,既然包總是要被DROP的,那就讓發(fā)送者去等吧,這和我們有什么關(guān)系呢?
ACCEPT:這個(gè)largcl沒(méi)有任何選項(xiàng)和參數(shù),使用也很簡(jiǎn)單,指定-jACCEPT即可。一月包滿足了指定的匹
配條件,就會(huì)被ACCEPT,并且不會(huì)再去匹配當(dāng)前鏈中的其他規(guī)則或同一個(gè)表內(nèi)的其他規(guī)則。
SNAT:這個(gè)targcl是用來(lái)做源網(wǎng)絡(luò)地址轉(zhuǎn)換的,就是重寫(xiě)包的源1P地址。當(dāng)我們有若干分計(jì)算機(jī)共享一
個(gè)Internet連接時(shí),就能用到它了,而且這也是絕大多數(shù)企業(yè)用戶所采用的Internet互聯(lián)方案。先在內(nèi)核里
打開(kāi)ip轉(zhuǎn)發(fā)功能,然后再寫(xiě)一個(gè)3NAT規(guī)則,就可以把所有從本地網(wǎng)絡(luò)出去的包的源地址改為Internet連
接的地址了。如果我們不這樣做而是直接轉(zhuǎn)發(fā)本地網(wǎng)的數(shù)據(jù)包的話,【nicncl上的機(jī)子就不知道往哪兒發(fā)送
應(yīng)答了,因?yàn)樵诒镜鼐W(wǎng)里我們一般使用的是IANA組織專門(mén)指定的一段地址,它們是不能在Internet上使用
的,還記得那些地址范圍嗎?讓我們來(lái)回憶一下:
-55(10川prefix)
-55(172.16/12prefix)
-55(192.168/16prefix)
SNATtarget的作用就是讓所有從本地網(wǎng)出發(fā)的包看起來(lái)都是從一臺(tái)機(jī)子發(fā)出的,這臺(tái)機(jī)子一般就是防火墻
或路由器之類的三層設(shè)備。
SNAT只能用在間表的POSTROUTING鏈里。只要連接的第一個(gè)符合條件的包被SNAT了,那么這個(gè)連
接的其他所有的包都會(huì)自動(dòng)地被SNAT,而且這個(gè)規(guī)則還會(huì)應(yīng)用于這個(gè)連接所在流的所有數(shù)據(jù)包。
既然提到了ip包轉(zhuǎn)發(fā)的問(wèn)題,我們也不妨班一些文字做一些簡(jiǎn)要的說(shuō)明,當(dāng)iptables被用來(lái)安裝在一個(gè)提
供WWW或E_mail服務(wù)的主:機(jī)上以期為主:機(jī)提供保護(hù)時(shí)是不涉及包轉(zhuǎn)發(fā)的,但當(dāng)iptables被用在網(wǎng)絡(luò)的邊
界節(jié)點(diǎn)充當(dāng)一個(gè)安全網(wǎng)關(guān)時(shí),就涉及到包轉(zhuǎn)發(fā)的問(wèn)題了,這時(shí),iptables需要通過(guò)不同的網(wǎng)卡來(lái)轉(zhuǎn)發(fā)數(shù)據(jù)包,
在linux系統(tǒng)中,控制是否允許轉(zhuǎn)發(fā)數(shù)據(jù)包是有-?個(gè)開(kāi)關(guān)的,0表示不轉(zhuǎn)發(fā),1表示轉(zhuǎn)發(fā),只要更改
/etc/sysct.confl文件中的如下內(nèi)容:
/ControlsIPPacketsForwarding
net.ipv4.ip_forward=I
然后重啟系統(tǒng),這時(shí)系統(tǒng)就能夠進(jìn)行包轉(zhuǎn)發(fā)了,還有一種方法是在內(nèi)核空間內(nèi)直接更改,通過(guò)改下列文件
的參數(shù):
#echoI>/proc/sys/nct/ipv4/ip_forward
注意,這個(gè)文件一旦更改,立即生效,但如果重啟系統(tǒng),將回到默認(rèn)設(shè)置,所以/eic/syscll.conf文件無(wú)論如
何都應(yīng)該將轉(zhuǎn)發(fā)開(kāi)關(guān)置位為“I二
看看下面的范例,一般一個(gè)SNAT的命令是這樣完成的:
#iptables-tnat-APOSTROUTING-s-jSNAT-to-source
這條命令表示將內(nèi)部網(wǎng)絡(luò)的I92.16S.L0/24網(wǎng)段的地址翻譯成這樣內(nèi)部地址就可以使用一個(gè)公有IP
(PublicIPaddress)地址共享上網(wǎng)了,當(dāng)然,還要有額外的策略允許內(nèi)部用戶上網(wǎng)才行哦,別忘了。
SNAT只有一個(gè)參數(shù),--lo-sourcc,它有幾種使用方法:
1、單獨(dú)的地址,就象上面的例子所示。
2,一段連續(xù)的地址,用連字符分隔,如這樣可以實(shí)現(xiàn)負(fù)載平衡.每個(gè)流會(huì)被隨機(jī)分配一
個(gè)IP,但對(duì)于同一個(gè)流使用的是同一個(gè)IP。當(dāng)然,前提是你要有這么多的公有ip才行??!
3、在指定-ptcp或-pudp的前提下,可以指定源端口的范圍,如1.1.1;1024-32000,這樣包的源端口就
被限制在1024-32000了。
DNAT:這個(gè)target是用來(lái)做目的網(wǎng)絡(luò)地址轉(zhuǎn)換的,意思是重寫(xiě)包的目的IP地址。如果一個(gè)包被匹配了,
那么和它屬于同一個(gè)流的所有的包都會(huì)被自動(dòng)轉(zhuǎn)換,然后就可以被路由到止確的主機(jī)或網(wǎng)絡(luò)。DNATtarget
是非常有用的。比如,你的Web服務(wù)器在LAN內(nèi)部,而且沒(méi)有可在Internet上使用的真實(shí)IP地址,那就
可以使用這個(gè)target讓防火墻把所有到它自己HTTP端口的包轉(zhuǎn)發(fā)給LAN內(nèi)部真正的Web服務(wù)器.目的
地址也可以是一個(gè)范圍,這樣的話,DNAT會(huì)為每一個(gè)流隨機(jī)分配一個(gè)地址。因此,我們可以用這個(gè)largei
做某種類型的負(fù)載平衡。
DNAT也和SNAT一樣只有一個(gè)參數(shù),-todesiinalion,看看下面的例子:
#iptables-tnat-APREROUTING-d-jDNAT-to-deslination4
上面的例子說(shuō)明凡是訪問(wèn)的數(shù)據(jù)包都轉(zhuǎn)給內(nèi)網(wǎng)的4,這樣內(nèi)部的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)量管理員培訓(xùn)體系構(gòu)建
- 《智能家居安防系統(tǒng)介紹》課件
- 高考英語(yǔ)考點(diǎn)總結(jié)
- 《髖關(guān)節(jié)置換》課件
- 經(jīng)濟(jì)生活知識(shí)點(diǎn)總結(jié)模版
- 初中心理健康教育工作總結(jié)模版
- 功能性腹瀉的臨床護(hù)理
- 《心電圖的臨床應(yīng)用》課件
- 上市公司內(nèi)控與行業(yè)監(jiān)管制度專題
- 2025電子設(shè)備采購(gòu)合同模板
- 清華附中考試試題及答案
- 《通過(guò)鼻口腔吸痰技術(shù)》教育培訓(xùn)課件
- 北京政法職業(yè)學(xué)院招聘筆試真題2024
- 小學(xué)三年級(jí)英語(yǔ)家長(zhǎng)會(huì)省課賽課獲獎(jiǎng)?wù)n件市賽課一等獎(jiǎng)?wù)n件
- 農(nóng)村小學(xué)教師信息技術(shù)應(yīng)用能力提升策略研究:數(shù)字化教學(xué)資源與實(shí)踐應(yīng)用
- 2024-2025學(xué)年河南省天一大聯(lián)考高二下學(xué)期4月期中測(cè)試數(shù)學(xué)試卷(含答案)
- 2025-2030中國(guó)學(xué)生校服行業(yè)市場(chǎng)發(fā)展分析及前景趨勢(shì)與投資研究報(bào)告
- 全球化背景下的超大城市治理創(chuàng)新
- 202503寶鋼大廈BA系統(tǒng)改造方案圖文
- 《雙碳管理基礎(chǔ)與實(shí)務(wù)》課件-第六章 ESG管理
- 靜脈用藥混合調(diào)配操作
評(píng)論
0/150
提交評(píng)論