周喜平 姜 斌
[摘要]以Iptables作為網(wǎng)關(guān)來實(shí)現(xiàn)中小型局域網(wǎng)的內(nèi)網(wǎng)機(jī)器上網(wǎng),將內(nèi)網(wǎng)用戶的帳號(hào)和IP地址綁定,通過修改Iptables的規(guī)則以及修改Netfilter的代碼來控制內(nèi)網(wǎng)用戶上網(wǎng);系統(tǒng)在計(jì)費(fèi)的同時(shí)還可以實(shí)現(xiàn)域名和關(guān)鍵字過濾以及內(nèi)網(wǎng)的防火墻,實(shí)現(xiàn)成本低,安全系數(shù)較高。
[關(guān)鍵詞]Iptables網(wǎng)絡(luò)計(jì)費(fèi)
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)1110090-01
一、引言
計(jì)費(fèi)管理是網(wǎng)絡(luò)管理的五大功能之一(故障管理、計(jì)費(fèi)管理、配置管理、性能管理、安全管理)。常見的計(jì)費(fèi)管理的實(shí)現(xiàn)方法有三種[1]:通過路由器進(jìn)行計(jì)費(fèi)、通過代理服務(wù)器進(jìn)行計(jì)費(fèi)和基于監(jiān)聽的計(jì)費(fèi)。本文采用類似第二種計(jì)費(fèi)實(shí)現(xiàn)方法即基于網(wǎng)關(guān)的實(shí)現(xiàn)方式?;诰W(wǎng)關(guān)的實(shí)現(xiàn)方式較之基于代理服務(wù)器的實(shí)現(xiàn)方式的基本原理是相似的,就是在內(nèi)網(wǎng)和Internet
網(wǎng)絡(luò)之間建立網(wǎng)關(guān)(類似于代理服務(wù)器的功能),通過這個(gè)網(wǎng)關(guān)來實(shí)現(xiàn)內(nèi)網(wǎng)用戶訪問Internet。所不同的是可以把網(wǎng)關(guān)設(shè)置成“透明網(wǎng)關(guān)”,即內(nèi)網(wǎng)用戶只要設(shè)置網(wǎng)關(guān)的IP地址就可以通過網(wǎng)關(guān)來訪問Internet,而無需像代理服務(wù)器的實(shí)現(xiàn)方法那樣過多的設(shè)置其他參數(shù)。本文以Linux系統(tǒng)中的Netfilter來實(shí)現(xiàn)“透明網(wǎng)關(guān)”,通過Netfilter和Iptables來完成內(nèi)網(wǎng)用戶訪問Internet,同時(shí)實(shí)現(xiàn)對(duì)這些用戶的上網(wǎng)控制和計(jì)費(fèi)。
二、設(shè)計(jì)思路
Netfilter是Linux內(nèi)核的一個(gè)完善的且功能強(qiáng)大的防火墻子系統(tǒng),Iptables 是與最新的版本Linux 內(nèi)核集成的IP信息包過濾系統(tǒng),或者可以簡(jiǎn)單理解為Netfilter是Linux內(nèi)核的一部分,而Iptables則是Linux提供給用戶的一種工具,通過這種工具可以很好的處理內(nèi)核中的防火墻的各種信息處理規(guī)則,利用Netfilter和Iptables可以實(shí)現(xiàn)NAT(Network Address Translation)。NAT即網(wǎng)絡(luò)地址轉(zhuǎn)換,當(dāng)網(wǎng)關(guān)被分配一個(gè)或者多個(gè)合法的Internet IP地址后,通過NAT技術(shù)使發(fā)給其中某一個(gè)IP地址的包轉(zhuǎn)發(fā)至內(nèi)部某一內(nèi)網(wǎng)用戶的上網(wǎng)設(shè)備上,然后再將該內(nèi)網(wǎng)用戶的響應(yīng)包偽裝成該合法IP發(fā)出的包,這樣內(nèi)網(wǎng)用戶即可訪問Internet。
所有上網(wǎng)的內(nèi)網(wǎng)用戶訪問Internat之前必須通過認(rèn)證服務(wù)器的鑒別,通過設(shè)置NAT的PREROUTING鏈的規(guī)則[2],使得所有沒有通過鑒別的用戶重定向到認(rèn)證服務(wù)器,而通過鑒別的用戶,相應(yīng)綁定的IP地址被寫入Iptables的規(guī)則中,這個(gè)IP是允許訪問Internat,而且不用被重定向到認(rèn)證服務(wù)器。
當(dāng)用戶不想上網(wǎng)時(shí),則從Iptables的規(guī)則中刪除IP地址,這個(gè)工作可以由單獨(dú)的刷新在線信息頁面完成。
三、設(shè)計(jì)要點(diǎn)
(一)實(shí)現(xiàn)內(nèi)網(wǎng)用戶訪問Internet
首選應(yīng)該配置網(wǎng)關(guān)服務(wù)器,使得網(wǎng)關(guān)能夠訪問Internet,建議作為網(wǎng)關(guān)的服務(wù)器最好裝配兩塊網(wǎng)卡,一塊用來連接Internet(以下簡(jiǎn)稱外網(wǎng),用eth0代替),一塊用來連接內(nèi)網(wǎng)(用eth1代替)。在確保Netfitler和Iptables被安裝完整后,就可以配置Iptables來實(shí)現(xiàn)NAT,建立可執(zhí)行腳本:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F;
iptables -t nat -F;
iptables -t mangle -F;
以上腳本適合IPV4,通過執(zhí)行以上腳本,使得任何內(nèi)網(wǎng)訪問eth1的請(qǐng)求包,都被轉(zhuǎn)發(fā)到eth0。
(二)控制上網(wǎng)用戶
確保內(nèi)網(wǎng)用戶能夠訪問外網(wǎng)后,在腳本中增加以下指令:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 196.188.1.9:80
其中IP地址196.188.1.9是認(rèn)證服務(wù)器的IP地址。這里必須確保認(rèn)證服務(wù)器已經(jīng)設(shè)置好web認(rèn)證服務(wù),并且能夠?qū)崿F(xiàn)用戶的基本信息認(rèn)證,包括用戶帳號(hào)、密碼、上網(wǎng)在線時(shí)間、計(jì)費(fèi)方式、費(fèi)率等。
這條指令使所有訪問外網(wǎng)的請(qǐng)求都被轉(zhuǎn)發(fā)到196.188.1.9:80的認(rèn)證頁面。用戶輸入合法的帳號(hào)和密碼后,調(diào)用下面的指令來完成該用戶訪問外網(wǎng):
iptables -t nat -I PREROUTING s ipaddr -j ACCEPT
ipaddr是該上網(wǎng)帳號(hào)對(duì)應(yīng)的IP地址,當(dāng)然你好可以通過下列指令來邦定用戶的MAC地址:
iptables -t nat -I PREROUTING s ipaddr -m mac --mac-source macaddr -j ACCEPT
macaddr是IP地址對(duì)應(yīng)的計(jì)算機(jī)的MAC地址。
用戶驗(yàn)證合法后,在客戶端要做的另外一件事是彈出認(rèn)證合法的“在線窗口”,通過該窗口上的“斷開連接”按鈕來告訴計(jì)費(fèi)服務(wù)器用戶下線時(shí)間,“在線窗口”通過刷新頁面來告訴服務(wù)器用戶是否在線,若用戶點(diǎn)擊“斷開連接”按鈕,或者規(guī)定時(shí)間內(nèi)沒有刷新在線信息,則服務(wù)器認(rèn)為用戶中斷上網(wǎng),則調(diào)用如下指令來阻斷用戶上網(wǎng):
iptables -t nat -D PREROUTING -s ipaddr -j ACCEPT
(三)計(jì)費(fèi)設(shè)計(jì)
本系統(tǒng)采用Java技術(shù)的J2EE開發(fā)標(biāo)準(zhǔn)來完成,web和應(yīng)用服務(wù)器采用weblogic9.2,數(shù)據(jù)庫采用oracle10g。用戶的基本信息保存在數(shù)據(jù)庫中,可以通過管理員增加用戶的基本信息,也可以通過用戶注冊(cè),管理員審批的方式。對(duì)于用戶在線信息的維護(hù),則是采用一個(gè)session的數(shù)據(jù)庫表,每次用戶端發(fā)送在線信息過來后,更新session中對(duì)應(yīng)的信息,若發(fā)現(xiàn)某些用戶的session信息過期,則清除session信息,同時(shí)刪除該用戶對(duì)應(yīng)的Iptables規(guī)則。
采用Java來完成Iptables規(guī)則的修改是比較簡(jiǎn)單的事情,調(diào)用Runtime. getRuntime().exec(Stirng command)方法,就可以完成規(guī)則的增加和刪除,因?yàn)樵诎惭b了netfilter 的linux中Iptable本身就是可執(zhí)行的腳本工具。
四、結(jié)束語
本系統(tǒng)經(jīng)過試用后,發(fā)現(xiàn)還存在一些問題,比如“在線窗口”的彈出影響了客戶的使用體驗(yàn),另外就是認(rèn)證頁面請(qǐng)求的轉(zhuǎn)發(fā)只是web請(qǐng)求的轉(zhuǎn)發(fā),對(duì)于非HTTP請(qǐng)求的包會(huì)在不通過認(rèn)證的情況下通過Iptables,這些是該系統(tǒng)下一步要改進(jìn)的問題。
參考文獻(xiàn):
[1]張孟雄,校園網(wǎng)計(jì)費(fèi)系統(tǒng)的實(shí)現(xiàn)途徑探討,空軍雷達(dá)學(xué)院學(xué)報(bào),2000.
[2]宋光惠等,基于IPTABLES的Web認(rèn)證系統(tǒng)的實(shí)現(xiàn),中國信息化教育,2009.