Iptables模塊研究報(bào)告
Iptables 模塊使用指南1. 前言................................................................................
Iptables 模塊使用指南
1. 前言.............................................................................................................................................. 2
1.1 關(guān)于本文檔 . ....................................................................................................................... 2
1.2 背景知識(shí) . ........................................................................................................................... 2
1.3 術(shù)語(yǔ) . ................................................................................................................................... 2
2. Iptables模塊介紹 ......................................................................................................................... 3
3. Iptables編譯及安裝 ..................................................................................................................... 4
3.1 關(guān)于編譯 . ........................................................................................................................... 4
3.2 關(guān)于安裝 . ........................................................................................................................... 5
3.3 內(nèi)核支持 . ........................................................................................................................... 6
3.4 文件大小 . ........................................................................................................................... 6
4. 關(guān)于數(shù)據(jù)報(bào)文 . ............................................................................................................................. 6
4.1 數(shù)據(jù)報(bào)文流程介紹 . ........................................................................................................... 6
4.2 數(shù)據(jù)報(bào)文的狀態(tài)介紹 . ..................................................................................................... 10
5. Iptables程序使用 ....................................................................................................................... 11
5.1 關(guān)于iptables 程序 ........................................................................................................... 11
5.2 命令參數(shù)說(shuō)明 . ................................................................................................................. 12
5.3 iptables程序使用實(shí)例 ..................................................................................................... 27
6. iptables模塊使用場(chǎng)景 ............................................................................................................... 30
,1. 前言
1.1 關(guān)于本文檔
本文檔描述Iptables 模塊的使用,對(duì)iptables 命令進(jìn)行了詳細(xì)的說(shuō)明。
1.2 背景知識(shí)
網(wǎng)絡(luò)攻擊正在日益得勢(shì),防火墻技術(shù)因此得到廣泛運(yùn)用。防火墻能控制不同網(wǎng)絡(luò)或網(wǎng)絡(luò)安全域之間信息的出入口,通過(guò)監(jiān)測(cè)、限制、更改跨越防火墻的數(shù)據(jù)流,盡可能地對(duì)外部屏蔽網(wǎng)絡(luò)內(nèi)部的信息、結(jié)構(gòu)和運(yùn)行狀況,有選擇地接受外部訪(fǎng)問(wèn),對(duì)內(nèi)部強(qiáng)化設(shè)備監(jiān)管、控制對(duì)服務(wù)器與外部網(wǎng)絡(luò)的訪(fǎng)問(wèn),在被保護(hù)網(wǎng)絡(luò)和外部網(wǎng)絡(luò)之間加起一道屏障,以防止發(fā)生不可預(yù)測(cè)的、潛在的破壞性侵入。
在Linux 操作系統(tǒng)上,netfilter/iptables 作為最新的防火墻技術(shù),提供了一個(gè)有效的手段來(lái)控制誰(shuí)可以并如何通過(guò)網(wǎng)絡(luò)連接到Linux 系統(tǒng),自然iptables 成為最新的管理內(nèi)核包過(guò)濾的工具,可以添加、修改或刪除包過(guò)濾表格中的規(guī)則。
從Linux 內(nèi)核2.0.x 中ipfwadm 到內(nèi)核2.2.x 中的ipchains ,再衍變成2.4.x/2.6.x的iptables , 2.4.x/2.6.x內(nèi)核中的iptables 并不是2.2內(nèi)核的簡(jiǎn)單增強(qiáng),而是一次完全的重新實(shí)現(xiàn),內(nèi)核提供的防火墻軟件包在結(jié)構(gòu)上發(fā)生了非常大的變化。
2.4.x/2.6.x內(nèi)核提供了更好的靈活性和可擴(kuò)展性。
1.3 術(shù)語(yǔ)
NAT :Network Address Translation 網(wǎng)絡(luò)地址轉(zhuǎn)換,是將IP 數(shù)據(jù)報(bào)報(bào)頭中的IP 地址轉(zhuǎn)換為另一個(gè)IP 地址的過(guò)程。
DNAT :Destination Network Address Translation 目的網(wǎng)絡(luò)地址轉(zhuǎn)換。 DNAT 是一種改變數(shù)據(jù)包目的 ip 地址的技術(shù),經(jīng)常和SNAT 聯(lián)用,以使多臺(tái)服務(wù)器能共享一個(gè)ip 地址連入Internet ,并且繼續(xù)服務(wù)。通過(guò)對(duì)同一個(gè)ip 地址分配不同的
,端口,來(lái)決定數(shù)據(jù)的流向。
SNAT :Source Network Address Translation 源網(wǎng)絡(luò)地址轉(zhuǎn)換。這是一種改變數(shù)據(jù)包源ip 地址的技術(shù),經(jīng)常用來(lái)使多臺(tái)計(jì)算機(jī)分享一個(gè)Internet 地址。
DNS :Domain Name System計(jì)算機(jī)域名系統(tǒng),它是由解析器和域名服務(wù)器組成的,是保存有該網(wǎng)絡(luò)中所有主機(jī)的域名和對(duì)應(yīng)IP 地址,并將域名轉(zhuǎn)換為IP 地址功能的服務(wù)器。
2. Iptables模塊介紹
Netfilter/iptables模塊是一種功能強(qiáng)大的IP 信息包過(guò)濾系統(tǒng),可用于添加、編輯和刪除規(guī)則,這些規(guī)則是在做信息包過(guò)濾決定時(shí),防火墻所遵循和組成的規(guī)則。這些規(guī)則存儲(chǔ)在專(zhuān)用的信息包過(guò)濾表(如Filter 、Nat )中,而這些表集成在 Linux 內(nèi)核中。在信息包過(guò)濾表中,規(guī)則被分組放在我們所謂的鏈(chain )中。
雖然 netfilter/iptables IP 信息包過(guò)濾系統(tǒng)被稱(chēng)為單個(gè)實(shí)體,但它實(shí)際上由兩個(gè)組件netfilter 和 iptables 組成。
netfilter 組件也稱(chēng)為內(nèi)核空間(kernelspace ),是內(nèi)核的一部分,由一些信息包過(guò)濾表組成,這些表包含內(nèi)核用來(lái)控制信息包過(guò)濾處理的規(guī)則集。 iptables 組件是一種工具,也稱(chēng)為用戶(hù)空間(userspace ),它使插入、修改和除去信息包過(guò)濾表中的規(guī)則變得容易。
iptables 模塊是用于Firewall 的一種強(qiáng)大的工具,防火墻的典型環(huán)境如下圖所示:
,
iptables 由Netfilter 項(xiàng)目開(kāi)發(fā),維護(hù)網(wǎng)站為。
3. Iptables編譯及安裝
以下是針對(duì)iptables 1.4.3的版本進(jìn)行說(shuō)明。
3.1 關(guān)于編譯
從官網(wǎng)(www.netfilter.org )下載開(kāi)源代碼壓縮包iptables-1.4.3.tar.bz2,該版 本可以支持2.6.29的內(nèi)核。
i. 解壓縮文件:
tar –xvjf iptables-1.4.3.tar.bz2
ii. 配置編譯安裝環(huán)境:
cd iptables-1.4.3,
./configure CC=指定交叉編譯工具鏈 --host=指定交叉編譯平臺(tái) --prefix=指定安裝文件路徑
這里所有的路徑都只能是絕對(duì)路徑。
iii. 編譯:
make
編譯生成的可執(zhí)行文件為iptables ,位于iptables-1.4.3/.libs;
庫(kù)文件有以下兩類(lèi):
必選的:libiptc/.libs/libiptc.so.0和.libs/libxtables.so.1;
可選的:位置iptables-1.4.3/extensions,
libipt_DNAT.so libipt_icmp.so
,libipt_LOG.so libipt_MIRROR.so libipt_REDIRECT.so libipt_SNAT.so libipt_TTL.so
libxt_hashlimit.so libxt_length.so libxt_mac.so libxt_standard.so libxt_statistic.so libxt_TCPMSS.so libxt_tos.so libxt_udp.so
libipt_MASQUERADE.so
libipt_NETMAP.so libipt_REJECT.so libipt_ttl.so libxt_iprange.so libxt_limit.so libxt_multiport.so libxt_state.so libxt_string.so libxt_tcp.so libxt_TOS.so … …
3.2 關(guān)于安裝
修改Makefile ,拷貝可執(zhí)行文件iptables 及相應(yīng)的庫(kù)文件。
由于開(kāi)發(fā)板空間有限,我們沒(méi)有必要把所有的庫(kù)文件都移植到開(kāi)發(fā)板上,根 據(jù)需要將所需的庫(kù)文件拷貝到開(kāi)發(fā)板的/lib目錄下。
Makefile 做如下修改,在執(zhí)行make install時(shí),自動(dòng)執(zhí)行cp 命令。
install: cp .libs/iptables ../../target/usr/sbin/iptables
cp .libs/libxtables.so.1 ../../target/lib/ cp libiptc/.libs/libiptc.so.0 ../../target/lib/ cp extensions/libxt_standard.so ../../target/lib/ cp extensions/libxt_state.so ../../target/lib/ cp extensions/libxt_statistic.so ../../target/lib/ cp extensions/libxt_string.so ../../target/lib/ cp extensions/libxt_tcp.so ../../target/lib/ cp extensions/libxt_udp.so ../../target/lib/ cp extensions/libxt_multiport.so ../../target/lib/ cp extensions/libxt_tos.so ../../target/lib/ cp extensions/libxt_TOS.so ../../target/lib/ cp extensions/libipt_icmp.so ../../target/lib/ cp extensions/libipt_DNAT.so ../../target/lib/ cp extensions/libipt_SNAT.so ../../target/lib/ cp extensions/libipt_LOG.so ../../target/lib/ cp extensions/libipt_MASQUERADE.so ../../target/lib/ cp extensions/libipt_REJECT.so ../../target/lib/ cp extensions/libipt_TTL.so ../../target/lib/ cp extensions/libipt_ttl.so ../../target/lib/ cp extensions/libxt_iprange.so ../../target/lib/ cp extensions/libxt_mac.so ../../target/lib/
,cp extensions/libxt_limit.so ../../target/lib/ cp extensions/libxt_TCPMSS.so ../../target/lib/ cp extensions/libipt_REDIRECT.so ../../target/lib/ cp extensions/libxt_hashlimit.so ../../target/lib/
3.3 內(nèi)核支持
為了正常運(yùn)行iptables ,需要在內(nèi)核中打開(kāi)相應(yīng)配置。用make menuconfig或其他命令,打開(kāi)以下一些選項(xiàng)。
注:[*]<*>為選中支持該模塊,[ ]< >為不選中。
[*] Network packet filtering framework (Netfilter) --->
… …
<*> Netfilter Xtables support (required for ip_tables)
<*> IP tables support (required for filtering/masq/NAT)
<*> IP range match support
<*> Mac match support
… …
根據(jù)3.2移植的庫(kù)文件,在內(nèi)核配置過(guò)程中,打開(kāi)支持相應(yīng)的模塊,iptables 才能正常使用。
3.4 文件大小
在mipsel 平臺(tái)上可執(zhí)行文件iptables 的大小為70515字節(jié),
移植到mipsel 平臺(tái)上的庫(kù)文件大小為576kB 。
4. 關(guān)于數(shù)據(jù)報(bào)文
4.1 數(shù)據(jù)報(bào)文流程介紹
首先我們看下數(shù)據(jù)報(bào)文是怎樣穿越內(nèi)核的中Netfilter 組件的:當(dāng)數(shù)據(jù)報(bào)文到達(dá)內(nèi)核時(shí),如果MAC 地址符合,就會(huì)由內(nèi)核里相應(yīng)的驅(qū)動(dòng)程序接收,然后會(huì)經(jīng)過(guò)路由操作,從而決定是發(fā)送給本地的程序,還是轉(zhuǎn)發(fā)給其他機(jī)子。Netfilter 在內(nèi)核有五個(gè)掛載點(diǎn):NF_IP_PRE_ROUTING、NF_IP_IN_PUT、
,NF_IP_FORWARD、NF_IP_OUT_PUT、NF_IP_POST_ROUTING ,這5個(gè)hook 點(diǎn)分別對(duì)應(yīng)系統(tǒng)中默認(rèn)的5個(gè)鏈PREROUING 、INPUT 、FORWARD 、OUTPUT 、POSTROUTING ,iptables 依賴(lài)于這5個(gè)鏈進(jìn)行操作。如下圖所示:

然后我們討論下數(shù)據(jù)報(bào)文是以什么順序以及如何穿越這些鏈的。我們先來(lái)看一個(gè)以本地為目的的報(bào)文,它要經(jīng)過(guò)以下步驟才能到達(dá)要接收它的程序: 表4-1. 以本地為目標(biāo)的報(bào)文


現(xiàn)在我們來(lái)看看源地址是本地機(jī)器的報(bào)文要經(jīng)過(guò)哪些步驟: 表4-2. 以本地為源的報(bào)文


我們假設(shè)一個(gè)報(bào)文的目的地址是另一個(gè)網(wǎng)絡(luò)中的一臺(tái)機(jī)子。讓我們來(lái)看看這個(gè)報(bào)文的旅程:
表4-3. 被轉(zhuǎn)發(fā)的報(bào)文

綜上所述,我們可以歸納數(shù)據(jù)報(bào)文的流程如下圖:
,
注意,所有的報(bào)文都會(huì)經(jīng)過(guò)上圖中的某一條路徑,不管你是否把它DROP 或者ACCEPT 。如果你把報(bào)文DNAT 回它原來(lái)的網(wǎng)絡(luò),它一樣會(huì)走完相應(yīng)路徑上剩余的鏈。
4.2 數(shù)據(jù)報(bào)文的狀態(tài)介紹
報(bào)文的狀態(tài)依據(jù)協(xié)議的不同而不同,但在內(nèi)核外部,也就是用戶(hù)空間里,只有5種狀態(tài):NEW ,ESTABLISHED ,RELATED ,INV ALID 和UNTRACKED 。它們主要是和狀態(tài)匹配(-m state)一起使用。下面就簡(jiǎn)要地介紹以下這幾種狀態(tài):