国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號(hào)

用iptales實(shí)現(xiàn)包過(guò)濾型防火墻
2007-06-24   

一、 概述
從1.1內(nèi)核開始,linux就已經(jīng)具有包過(guò)濾功能了,在2.0的內(nèi)核中我們采用ipfwadm來(lái)操作內(nèi)核包過(guò)濾規(guī)則。之后在2.2內(nèi)核中,采用了大家并不陌生的ipchains來(lái)控制內(nèi)核包過(guò)濾規(guī)則。在2.4內(nèi)核中我們不再使用ipchains,而是采用一個(gè)全新的內(nèi)核包過(guò)濾管理工具--iptables。 這個(gè)全新的內(nèi)核包過(guò)濾工具將使用戶更易于理解其工作原理,更容易被使用,當(dāng)然也將具有更為強(qiáng)大的功能。
我們說(shuō)過(guò)iptables只是一個(gè)管理內(nèi)核包過(guò)濾的工具,iptables 可以加入、插入或刪除核心包過(guò)濾表格(鏈)中的規(guī)則。實(shí)際上真正來(lái)執(zhí)行這些過(guò)濾規(guī)則的是netfilter(Linux 核心中一個(gè)通用架構(gòu))及其相關(guān)模塊(如iptables模塊和nat模塊),下面我們一起來(lái)看看netfilter的工作原理。
二、 原理
netfilter是Linux 核心中一個(gè)通用架構(gòu),它提供了一系列的"表"(tables),每個(gè)表由若干"鏈"(chains)組成,而每條鏈中可以有一條或數(shù)條規(guī)則(rule)組成。我們可以這樣來(lái)理解,netfilter是表的容器,表是鏈的容器,而鏈又是規(guī)則的容器(如圖一所示)。


系統(tǒng)缺省的表為"filter",該表中包含了INPUT、FORWARD和OUTPUT 3個(gè)鏈。每一條鏈中可以有一條或數(shù)條規(guī)則,每一條規(guī)則都是這樣定義的“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個(gè)數(shù)據(jù)包”。當(dāng)一個(gè)數(shù)據(jù)包到達(dá)一個(gè)鏈時(shí),系統(tǒng)就會(huì)從第一條規(guī)則開始檢查,看是否符合該規(guī)則所定義的條件: 如果滿足,系統(tǒng)將根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包;如果不滿足則繼續(xù)檢查下一條規(guī)則。最后,如果該數(shù)據(jù)包不符合該鏈中任一條規(guī)則的話,系統(tǒng)就會(huì)根據(jù)該鏈預(yù)先定義的策略(policy)來(lái)處理該數(shù)據(jù)包。
數(shù)據(jù)包在filter表中的流程如圖二所示。有數(shù)據(jù)包進(jìn)入系統(tǒng)時(shí),系統(tǒng)首先根據(jù)路由表決定將數(shù)據(jù)包發(fā)給哪一條鏈,則可能有三種情況:


1. 如果數(shù)據(jù)包的目的地址是本機(jī),則系統(tǒng)將數(shù)據(jù)包送往INPUT鏈,如果通過(guò)規(guī)則檢查,則該包被發(fā)給相應(yīng)的本地進(jìn)程處理;如果沒(méi)通過(guò)規(guī)則檢查,系統(tǒng)就會(huì)將這個(gè)包丟掉;
2. 如果數(shù)據(jù)包的目的地址不是本機(jī),也就是說(shuō),這個(gè)包將被轉(zhuǎn)發(fā),則系統(tǒng)將數(shù)據(jù)包送往FORWARD鏈,如果通過(guò)規(guī)則檢查,則該包被發(fā)給相應(yīng)的本地進(jìn)程處理;如果沒(méi)通過(guò)規(guī)則檢查,系統(tǒng)就會(huì)將這個(gè)包丟掉;
3. 如果數(shù)據(jù)包是由本地系統(tǒng)進(jìn)程產(chǎn)生的,則系統(tǒng)將其送往OUTPUT鏈,如果通過(guò)規(guī)則檢查,則該包被發(fā)給相應(yīng)的本地進(jìn)程處理;如果沒(méi)通過(guò)規(guī)則檢查,系統(tǒng)就會(huì)將這個(gè)包丟掉。
從以上我們可以看出,netfilter比起以前的ipfwadm和ipchains思路上清晰了好多,也好理解了好多,這對(duì)于原先對(duì)ipfwadm和ipchains總是感到一頭霧水的用戶來(lái)說(shuō)無(wú)疑是一個(gè)福音。
三、 準(zhǔn)備工作
1. 系統(tǒng)需求
netfilter要求內(nèi)核版本不低于2.3.5,在編譯新內(nèi)核時(shí),要求選擇和netfilter相關(guān)的項(xiàng)目。這些項(xiàng)目通常都是位于“Networking options”子項(xiàng)下。以2.4.0內(nèi)核為例,我們應(yīng)該選中的項(xiàng)目有:
[*] Kernel/User netlink socket
[ ] Routing messages
<*> Netlink device emulation
[*] Network packet filtering (replaces ipchains)
然后,在“IP: Netfilter Configuration ---->”選中:
Connection tracking (required for masq/NAT)
FTP protocol support
IP tables support (required for filtering/masq/NAT)
limit match support
MAC address match support
Netfilter MARK match support
Multiple port match support
TOS match support
Connection state match support
Packet filtering
REJECT target support
Full NAT
MASQUERADE target support
REDIRECT target support
Packet mangling
TOS target support
MARK target support
LOG target support
ipchains (2.2-style) support
ipfwadm (2.0-style) support
其中最后兩個(gè)項(xiàng)目可以不選,但是如果你比較懷念ipchains或者ipfwadm,你也可以將其選中,以便在2.4內(nèi)核中使用ipchians或ipfwadm。但是需要注意的是,iptables是和ipchians/ipfwadm相對(duì)立的,在使用iptables的同時(shí)就不能同時(shí)使用ipchains/ipfwadm。編譯成功后,這些模塊文件都位于以下目錄中
/lib/modules/2.4.0/kernel/net/ipv4/netfilter
編譯2.4.0的新內(nèi)核時(shí)還應(yīng)該注意要在“Processor type and features”中選擇和你的CPU相對(duì)應(yīng)的正確的CPU選項(xiàng),否則新內(nèi)核可能無(wú)法正常工作。
2. 載入模塊
要使用iptables,還必須載入相關(guān)模塊。可以使用以下命令載入相關(guān)模塊:
#modprobe iptable_tables
modprobe命令會(huì)自動(dòng)載入指定模塊及其相關(guān)模塊。iptables_filter模塊會(huì)在運(yùn)行時(shí)自動(dòng)載入。
四、 語(yǔ)法
1. 對(duì)鏈的操作
建立一個(gè)新鏈 (-N)。
刪除一個(gè)空鏈 (-X)。
改變一個(gè)內(nèi)建鏈的原則 (-P)。
列出一個(gè)鏈中的規(guī)則 (-L)。
清除一個(gè)鏈中的所有規(guī)則 (-F)。
歸零(zero) 一個(gè)鏈中所有規(guī)則的封包字節(jié)(byte) 記數(shù)器 (-Z)。
2. 對(duì)規(guī)則的操作
加入(append) 一個(gè)新規(guī)則到一個(gè)鏈 (-A)的最后。
在鏈內(nèi)某個(gè)位置插入(insert) 一個(gè)新規(guī)則(-I),通常是插在最前面。
在鏈內(nèi)某個(gè)位置替換(replace) 一條規(guī)則 (-R)。
在鏈內(nèi)某個(gè)位置刪除(delete) 一條規(guī)則 (-D)。
刪除(delete) 鏈內(nèi)第一條規(guī)則 (-D)。
3. 指定源地址和目的地址
通過(guò)--source/--src/-s來(lái)指定源地址(這里的/表示或者的意思,下同),通過(guò)--destination/--dst/-s來(lái)指定目的地址。可以使用以下四中方法來(lái)指定ip地址:
a. 使用完整的域名,如“www.linuxaid.com.cn”;
b. 使用ip地址,如“192.168.1.1”;
c. 用x.x.x.x/x.x.x.x指定一個(gè)網(wǎng)絡(luò)地址,如“192.168.1.0/255.255.255.0”;
d. 用x.x.x.x/x指定一個(gè)網(wǎng)絡(luò)地址,如“192.168.1.0/24”這里的24表明了子網(wǎng)掩碼的有效位數(shù),這是 UNIX環(huán)境中通常使用的表示方法。
缺省的子網(wǎng)掩碼數(shù)是32,也就是說(shuō)指定192.168.1.1等效于192.168.1.1/32。
4. 指定協(xié)議
可以通過(guò)--protocol/-p選項(xiàng)來(lái)指定協(xié)議,比如-p tcp。
5. 指定網(wǎng)絡(luò)接口
可以使用--in-interface/-i或--out-interface/-o來(lái)指定網(wǎng)絡(luò)接口。需要注意的是,對(duì)于INPUT鏈來(lái)說(shuō),只可能有-i,也即只會(huì)有進(jìn)入的包;通理,對(duì)于OUTPUT鏈來(lái)說(shuō),只可能有-o,也即只會(huì)有出去的包。只有FORWARD鏈既可以有-i的網(wǎng)絡(luò)接口,也可以有-o的網(wǎng)絡(luò)接口。我們也可以指定一個(gè)當(dāng)前并不存在的網(wǎng)絡(luò)接口,比如ppp0,這時(shí)只有撥號(hào)成功后該規(guī)則才有效。
6. 指定ip碎片
在TCP/IP通訊過(guò)程中,每一個(gè)網(wǎng)絡(luò)接口都有一個(gè)最大傳輸單元(MTU),這個(gè)參數(shù)定義了可以通過(guò)的數(shù)據(jù)包的最大尺寸。如果一個(gè)數(shù)據(jù)包大于這個(gè)參數(shù)值時(shí),系統(tǒng)會(huì)將其劃分成更小的數(shù)個(gè)數(shù)據(jù)包(稱之為ip碎片)來(lái)傳輸,而接收方則對(duì)這些ip碎片再進(jìn)行重組以還原整個(gè)包。
但是再進(jìn)行包過(guò)濾的時(shí)候,ip碎片會(huì)導(dǎo)致這樣一個(gè)問(wèn)題:當(dāng)系統(tǒng)將大數(shù)據(jù)包劃分成ip碎片傳送時(shí),第一個(gè)碎片含有完整的包頭信息,但是后續(xù)的碎片只有包頭的部分信息,比如源地址,目的地址。因此假如我們有這樣一條規(guī)則:
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 --dport 80 -j ACCEPT
并且這時(shí)的FORWARD的策略(policy)為DROP時(shí),系統(tǒng)只會(huì)讓第一個(gè)ip碎片通過(guò),而丟掉其余的ip碎片,因?yàn)榈谝粋€(gè)碎片含有完整的包頭信息,可以滿足該規(guī)則的條件,而余下的碎片因?yàn)榘^信息不完整而無(wú)法滿足規(guī)則定義的條件,因而無(wú)法通過(guò)。
我們可以通過(guò)--fragment/-f選項(xiàng)來(lái)指定第二個(gè)及其以后的ip碎片,比如以上面的例子為例,我們可以再加上這樣一條規(guī)則來(lái)解決這個(gè)問(wèn)題:
iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT
但是需要注意的是,現(xiàn)在已經(jīng)有好多進(jìn)行ip碎片攻擊的實(shí)例(比如向Win98 NT4/SP5,6 Win2K發(fā)送大量的ip碎片進(jìn)行DoS攻擊),因此允許ip碎片通過(guò)是有安全隱患的,對(duì)于這一點(diǎn)我們可以采用iptables的匹配擴(kuò)展來(lái)進(jìn)行限制,但是這又會(huì)影響服務(wù)質(zhì)量,我們將在下面討論這個(gè)問(wèn)題。
7. 指定非
可以在某些選項(xiàng)前加上!來(lái)表示非指定值,比如“-s -! 192.168.1.1/32”表示除了192.168.1.1以外的ip地址,“-p -! tcp”表示除了tcp以外的協(xié)議。
8. TCP匹配擴(kuò)展
通過(guò)使用--tcp-flags選項(xiàng)可以根據(jù)tcp包的標(biāo)志位進(jìn)行過(guò)濾,該選項(xiàng)后接兩個(gè)參數(shù):第一個(gè)參數(shù)為要檢查的標(biāo)志位,可以是SYN,ACK,F(xiàn)IN,RST,URG,PSH的組合,可以用ALL指定所有標(biāo)志位。


熱詞搜索:

上一篇:Linux常見(jiàn)緊急情況處理方法
下一篇:解讀Linux系統(tǒng)文件權(quán)限的設(shè)置方法(1)

分享到: 收藏
主站蜘蛛池模板: 灵璧县| 沈丘县| 洛南县| 新昌县| 潞城市| 上高县| 宝山区| 湖南省| 邵东县| 阳西县| 中山市| 辛集市| 大兴区| 米脂县| 碌曲县| 平果县| 张家川| 巴青县| 石景山区| 永顺县| 师宗县| 佳木斯市| 青冈县| 衡山县| 肇源县| 新田县| 晋江市| 寻乌县| 方正县| 东乌珠穆沁旗| 正阳县| 玉林市| 光泽县| 万全县| 芒康县| 黄陵县| 望江县| 宜丰县| 竹山县| 原阳县| 和政县|