




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