iptables指南手冊(cè)資料_第1頁(yè)
iptables指南手冊(cè)資料_第2頁(yè)
iptables指南手冊(cè)資料_第3頁(yè)
iptables指南手冊(cè)資料_第4頁(yè)
iptables指南手冊(cè)資料_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論