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