無(wú)線(xiàn)局域網(wǎng)中RADIUS協(xié)議的分析和設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1 引言
遠(yuǎn)程認(rèn)證撥號(hào)用戶(hù)服務(wù)協(xié)議(Remote Authentication Dial In User Service, RADIUS)最初是由Livingston公司提出的一個(gè)為撥號(hào)用戶(hù)提供認(rèn)證和計(jì)費(fèi)的協(xié)議。后經(jīng)多次改進(jìn),逐漸成為一項(xiàng)通用的網(wǎng)絡(luò)認(rèn)證、計(jì)費(fèi)協(xié)議,并定義于IETF提交的RFC2865和RFC2866文件中。RADIUS協(xié)議以Client/Server方式工作,客戶(hù)端為網(wǎng)絡(luò)接入服務(wù)器(NAS),它向RADIUS服務(wù)器提交認(rèn)證、計(jì)費(fèi)等信息,RADIUS服務(wù)器處理信息并將結(jié)果返回給NAS。
RADIUS協(xié)議的應(yīng)用范圍很廣,在移動(dòng)、數(shù)據(jù)、智能網(wǎng)等業(yè)務(wù)的認(rèn)證、計(jì)費(fèi)系統(tǒng)中都有所應(yīng)用。無(wú)線(xiàn)局域網(wǎng)的802.1X認(rèn)證框架中,在認(rèn)證端也建議使用RADIUS協(xié)議。
本文將論述RADIUS協(xié)議的原理,并探討它在WLAN中的應(yīng)用及實(shí)現(xiàn)方案。
2 RADIUS協(xié)議
2.1 WLAN網(wǎng)絡(luò)模型
實(shí)際商用的無(wú)線(xiàn)局域網(wǎng),可以用局域網(wǎng)交換機(jī)來(lái)實(shí)現(xiàn)802.1X認(rèn)證協(xié)議中的端口控制功能。為保證網(wǎng)絡(luò)的安全性,在無(wú)線(xiàn)局域網(wǎng)的出口和認(rèn)證端應(yīng)加上防火墻。RADIUS服務(wù)器和數(shù)據(jù)庫(kù)還可以采取主、備結(jié)構(gòu),以保證網(wǎng)絡(luò)的健壯性。
網(wǎng)絡(luò)模型如下圖所示:
圖1 無(wú)線(xiàn)局域網(wǎng)網(wǎng)絡(luò)模型
無(wú)線(xiàn)局域網(wǎng)的認(rèn)證端由RADIUS服務(wù)器、網(wǎng)絡(luò)接入服務(wù)器(NAS)和數(shù)據(jù)庫(kù)組成。其中:
NAS:作為RADIUS服務(wù)器的客戶(hù)端,向RADIUS服務(wù)器轉(zhuǎn)交用戶(hù)的認(rèn)證信息。并在用戶(hù)通過(guò)認(rèn)證之后,向RADIUS服務(wù)器發(fā)送計(jì)費(fèi)信息。
RADIUS服務(wù)器:作為認(rèn)證系統(tǒng)的中心服務(wù)器,它與NAS、數(shù)據(jù)庫(kù)相連,它接受來(lái)自NAS提交的信息,對(duì)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的操作,并把處理結(jié)果返回給NAS。
數(shù)據(jù)庫(kù):用于保存所有的用戶(hù)信息、計(jì)費(fèi)信息和其他信息。用戶(hù)信息由網(wǎng)絡(luò)管理員添加至數(shù)據(jù)庫(kù)中;計(jì)費(fèi)信息來(lái)自于RADIUS服務(wù)器;其他信息包括日志信息等。
2.2 RADIUS的數(shù)據(jù)包結(jié)構(gòu)
RADIUS是應(yīng)用層的協(xié)議,在傳輸層它的報(bào)文被封裝在UDP的報(bào)文中,進(jìn)而封裝進(jìn)IP包。RADIUS認(rèn)證使用1812端口,計(jì)費(fèi)使用1813端口。
以太網(wǎng)上的RADIUS封裝后的包結(jié)構(gòu):
RADIUS數(shù)據(jù)包分為5個(gè)部分:
(1) Code:1個(gè)字節(jié),用于區(qū)分RADIUS包的類(lèi)型:常用類(lèi)型有:
接入請(qǐng)求(Access-Request),Code=1;接入應(yīng)答(Access-Accept),Code=2;接入拒絕(Access-Reject),Code=3;計(jì)費(fèi)請(qǐng)求(Accounting-Request),Code=4等。
?。?)Identifier:一個(gè)字節(jié),用于請(qǐng)求和應(yīng)答包的匹配。
?。?)Length:兩個(gè)字節(jié),表示RADIUS數(shù)據(jù)區(qū)(包括Code, Identifier, Length, Authenticator, Attributes)的長(zhǎng)度,單位是字節(jié),最小為20,最大為4096。
?。?)Authenticator:16個(gè)字節(jié),用于驗(yàn)證服務(wù)器端的應(yīng)答,另外還用于用戶(hù)口令的加密。RADIUS服務(wù)器和NAS的共享密鑰(Shared Secret)與請(qǐng)求認(rèn)證碼(Request Authenticator)和應(yīng)答認(rèn)證碼(Response Authenticator),共同支持發(fā)、收?qǐng)?bào)文的完整性和認(rèn)證。另外,用戶(hù)密碼不能在NAS和RADIUS 服務(wù)器之間用明文傳輸,而一般使用共享密鑰(Shared Secret)和認(rèn)證碼(Authenticator)通過(guò)MD5加密算法進(jìn)行加密隱藏。
?。?)Attributes:不定長(zhǎng)度,最小可為0個(gè)字節(jié),描述RADIUS協(xié)議的屬性,如用戶(hù)名、口令、IP地址等信息都是存放在本數(shù)據(jù)段。
2.3 RADIUS的認(rèn)證、計(jì)費(fèi)過(guò)程
如圖1網(wǎng)絡(luò)模型所示:
?。?)申請(qǐng)者登錄網(wǎng)絡(luò)時(shí),NAS會(huì)有一個(gè)客戶(hù)定義的Login提示符要求申請(qǐng)者輸入用戶(hù)信息(用戶(hù)名和口令),申請(qǐng)者輸入相關(guān)的認(rèn)證信息后,等待認(rèn)證結(jié)果。
?。?)NAS在得到用戶(hù)信息后,將根據(jù)RADIUS的數(shù)據(jù)包格式,向RADIUS服務(wù)器發(fā)出“接入請(qǐng)求”(Access-Request)包。包中一般包括以下RADIUS屬性值:用戶(hù)名、用戶(hù)口令、訪(fǎng)問(wèn)服務(wù)器的ID、訪(fǎng)問(wèn)端口的ID。
?。?)當(dāng)RADIUS服務(wù)器收到“接入請(qǐng)求”包后,首先驗(yàn)證NAS的共享密碼與RADIUS服務(wù)器中預(yù)先設(shè)定的是否一致,以確認(rèn)是所屬的RADIUS客戶(hù)端。在查驗(yàn)了包的正確性之后,RADIUS服務(wù)器會(huì)依據(jù)包中的用戶(hù)名在用戶(hù)數(shù)據(jù)庫(kù)中查詢(xún)是否有此用戶(hù)記錄。如果用戶(hù)信息不符合,就向NAS發(fā)出“接入拒絕”(Access-Reject)包。NAS在收到拒絕包后,會(huì)立即停止用戶(hù)連接端口的服務(wù)要求,用戶(hù)被強(qiáng)制退出。
?。?)如果用戶(hù)信息全部符合,服務(wù)器向NAS發(fā)出“接入質(zhì)詢(xún)”包(Access-Challenge),對(duì)用戶(hù)的登錄請(qǐng)求作進(jìn)一步的驗(yàn)證。其中包括:用戶(hù)口令、用戶(hù)登錄訪(fǎng)問(wèn)服務(wù)器的IP、用戶(hù)登錄的物理端口號(hào)等。NAS收到“接入質(zhì)詢(xún)”包后,將消息顯示給用戶(hù),要求用戶(hù)進(jìn)一步確認(rèn)登錄請(qǐng)求。用戶(hù)再次確認(rèn)后,RADIUS服務(wù)器將比較兩次的請(qǐng)求信息,決定如何響應(yīng)用戶(hù)(發(fā)送Access-Accept、Access-Reject或再一次的Access-Challenge)。
?。?)當(dāng)所有的驗(yàn)證條件和握手會(huì)話(huà)均通過(guò)后,RADIUS服務(wù)器會(huì)將數(shù)據(jù)庫(kù)中的用戶(hù)配置信息放在“接入接受”(Access-Accept)包中返回給NAS,后者會(huì)根據(jù)包中的配置信息限定用戶(hù)的具體網(wǎng)絡(luò)訪(fǎng)問(wèn)能力。包括服務(wù)類(lèi)型:SLIP、PPP、Login User、Rlogin、Framed、Callback等等。還包括與服務(wù)類(lèi)型相關(guān)的配置信息:IP地址、時(shí)間限制等等。
?。?)在所有的驗(yàn)證、授權(quán)完成后,局域網(wǎng)交換機(jī)的控制端口被打開(kāi)。用戶(hù)可以通過(guò)交換機(jī)進(jìn)入網(wǎng)絡(luò)。同時(shí),NAS向RADIUS服務(wù)器發(fā)送 “計(jì)費(fèi)請(qǐng)求開(kāi)始”包(Accounting-Request Start),通知RADIUS服務(wù)器開(kāi)始計(jì)費(fèi)。當(dāng)用戶(hù)下網(wǎng)時(shí),NAS向RADIUS服務(wù)器發(fā)送“計(jì)費(fèi)請(qǐng)求結(jié)束”包(Accounting-Request Stop),RADIUS服務(wù)器根據(jù)計(jì)費(fèi)包的信息計(jì)算用戶(hù)使用網(wǎng)絡(luò)的費(fèi)用。WLAN模型中RADIUS認(rèn)證系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)#e#
3 WLAN模型中RADIUS認(rèn)證系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
3.1 WLAN網(wǎng)絡(luò)模型的簡(jiǎn)化
在實(shí)驗(yàn)室的模擬環(huán)境下,由于網(wǎng)絡(luò)用戶(hù)少,可以采用中、小型的數(shù)據(jù)庫(kù)來(lái)存放所需信息,并可以將RADIUS服務(wù)器與數(shù)據(jù)庫(kù)在同一主機(jī)上實(shí)現(xiàn)。局域網(wǎng)交換機(jī)可以實(shí)現(xiàn)端口控制功能。網(wǎng)絡(luò)結(jié)構(gòu)可簡(jiǎn)化如下:
圖2 實(shí)驗(yàn)室環(huán)境下WLAN網(wǎng)絡(luò)模型
3.2 NAS設(shè)計(jì)
?。?)RADIUS客戶(hù)端處理程序:負(fù)責(zé)接收申請(qǐng)者的信息;向RADIUS服務(wù)器提交認(rèn)證、計(jì)費(fèi)、管理等數(shù)據(jù)包;向申請(qǐng)者返回相應(yīng)結(jié)果。
?。?)服務(wù)器管理程序:為了方便網(wǎng)絡(luò)管理員對(duì)RADIUS服務(wù)器和數(shù)據(jù)庫(kù)的管理,在NAS主機(jī)上,還可以運(yùn)行服務(wù)器管理程序,管理程序的功能應(yīng)該包括有:管理員模塊(添加、刪除網(wǎng)絡(luò)管理員,設(shè)置管理員權(quán)限等);用戶(hù)信息模塊(實(shí)現(xiàn)用戶(hù)的查詢(xún)、添加、刪除等操作);計(jì)費(fèi)信息模塊(查詢(xún)用戶(hù)的計(jì)費(fèi)信息,創(chuàng)建、修改、刪除各種不同的計(jì)費(fèi)方式,);日志信息模塊等。
(3)用戶(hù)信息的提交:用戶(hù)需要向NAS提交用戶(hù)信息,有多種方法可以實(shí)現(xiàn),最簡(jiǎn)單的方法是采用Web方式提交。在NAS上建立一個(gè)Web服務(wù)器,這樣,用戶(hù)可以直接使用瀏覽器來(lái)和NAS交互,Web服務(wù)器接受到用戶(hù)提交的信息后,把這些信息傳給RADIUS的客戶(hù)端處理程序。后者把這些信息封裝成RADIUS的接入請(qǐng)求(Access-Request)包格式,通過(guò)認(rèn)證端口(1812)向RADIUS服務(wù)器提出認(rèn)證請(qǐng)求。
?。?)計(jì)費(fèi)信息的提交:認(rèn)證通過(guò)之后,NAS客戶(hù)端程序通過(guò)認(rèn)證端口(1812)向RADIUS服務(wù)器發(fā)送包含有用戶(hù)名、用戶(hù)IP、上網(wǎng)起始時(shí)間等信息的“計(jì)費(fèi)請(qǐng)求開(kāi)始”包(Accounting-Request Start),通知RADIUS服務(wù)器開(kāi)始計(jì)費(fèi)。RADIUS服務(wù)器在數(shù)據(jù)庫(kù)中紀(jì)錄下相應(yīng)項(xiàng),并返回“計(jì)費(fèi)響應(yīng)”包(Accounting-Response)。當(dāng)用戶(hù)下網(wǎng)時(shí),NAS向RADIUS服務(wù)器發(fā)送包含有結(jié)束時(shí)間、數(shù)據(jù)流量等信息的“計(jì)費(fèi)請(qǐng)求結(jié)束”包(Accounting-Request Stop)。后者返回“計(jì)費(fèi)響應(yīng)”包(Accounting-Response)確認(rèn)。
?。?)服務(wù)器管理程序的提交:也通過(guò)RADIUS客戶(hù)端處理程序來(lái)向RADIUS服務(wù)器提交??蛻?hù)端處理程序?qū)⒐芾沓绦虻恼?qǐng)求包裝成標(biāo)準(zhǔn)的RADIUS包格式,并通過(guò)為服務(wù)器管理程序定義一個(gè)端口號(hào)提交給RADIUS服務(wù)器。
3.3 RADIUS服務(wù)器設(shè)計(jì)
RADIUS服務(wù)器處理來(lái)自NAS的各項(xiàng)數(shù)據(jù)和實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作,并返回相應(yīng)的結(jié)果。RADIUS客戶(hù)端和服務(wù)器端的協(xié)議通信采用Socket編程來(lái)實(shí)現(xiàn)。
?。?)對(duì)數(shù)據(jù)庫(kù)的操作:RADIUS服務(wù)器通過(guò)數(shù)據(jù)庫(kù)接口與數(shù)據(jù)庫(kù)建立起連接。在RADIUS服務(wù)器中用SQL語(yǔ)句實(shí)現(xiàn)所需的數(shù)據(jù)庫(kù)操作模塊(如:用戶(hù)、計(jì)費(fèi)、管理員等信息的查詢(xún)、添加、修改等操作),當(dāng)RADIUS服務(wù)器需要對(duì)數(shù)據(jù)庫(kù)操作時(shí),就調(diào)用相應(yīng)的模塊。
?。?)認(rèn)證包處理:通過(guò)*認(rèn)證端口(1812),來(lái)監(jiān)測(cè)NAS提交的認(rèn)證數(shù)據(jù)包,收到認(rèn)證包后,查詢(xún)數(shù)據(jù)庫(kù)驗(yàn)證用戶(hù),并把結(jié)果以RADIUS數(shù)據(jù)包格式從1812端口返回。對(duì)于多個(gè)用戶(hù)申請(qǐng)并發(fā)的情況,使用多線(xiàn)程方式處理。
?。?)計(jì)費(fèi)包的處理:當(dāng)用戶(hù)的認(rèn)證通過(guò)時(shí),查詢(xún)?cè)撚脩?hù)計(jì)費(fèi)信息。確定其計(jì)費(fèi)類(lèi)型、費(fèi)率等。當(dāng)*到NAS在計(jì)費(fèi)端口(1813)提交計(jì)費(fèi)包后,就向數(shù)據(jù)庫(kù)中添加“計(jì)費(fèi)請(qǐng)求開(kāi)始”包中所提交的計(jì)費(fèi)信息(包括用戶(hù)名、上網(wǎng)起始時(shí)間等)。在收到用戶(hù)下網(wǎng)的“計(jì)費(fèi)請(qǐng)求結(jié)束”后,根據(jù)包中提交的用戶(hù)結(jié)束時(shí)間、數(shù)據(jù)流量等信息,計(jì)算用戶(hù)的上網(wǎng)時(shí)長(zhǎng)和數(shù)據(jù)流量,并根據(jù)用戶(hù)計(jì)費(fèi)類(lèi)型來(lái)計(jì)算出用戶(hù)本次上網(wǎng)費(fèi)用,記錄入數(shù)據(jù)庫(kù)。
?。?)服務(wù)器管理程序請(qǐng)求的處理:*管理程序請(qǐng)求的端口(自定義),收到后解包并執(zhí)行相應(yīng)的處理函數(shù)。
3.4 數(shù)據(jù)庫(kù)的設(shè)計(jì)
用于保存所有的用戶(hù)信息、計(jì)費(fèi)信息等。數(shù)據(jù)庫(kù)中包含的表項(xiàng)至少應(yīng)包括以下幾類(lèi):
?。?) 用戶(hù)信息:包括用戶(hù)名、口令、認(rèn)證方式、訪(fǎng)問(wèn)權(quán)限、付費(fèi)方式等。
?。?) 授權(quán)信息:服務(wù)器返回給用戶(hù)的授權(quán)等配置信息,如服務(wù)類(lèi)型,會(huì)話(huà)時(shí)間等。
?。?) 計(jì)費(fèi)信息:存放與計(jì)費(fèi)有關(guān)的各種統(tǒng)計(jì)信息。如:上網(wǎng)時(shí)間、計(jì)費(fèi)費(fèi)率、用戶(hù)
的歷次上網(wǎng)的數(shù)據(jù)流量和費(fèi)用、用戶(hù)帳戶(hù)余額等。
?。?) 管理員信息:網(wǎng)絡(luò)管理員的ID號(hào)和口令、管理員的權(quán)限。
(5) NAS信息:RADIUS服務(wù)器所屬的各NAS紀(jì)錄。包括各NAS的ID號(hào)、與
RADIUS服務(wù)器的共享密碼等。
(6) 日志信息:保存用戶(hù)上網(wǎng)的歷史記錄、網(wǎng)絡(luò)管理員的登錄及操作紀(jì)錄。
3.5認(rèn)證端各部分的實(shí)現(xiàn):
操作系統(tǒng):RADIUS服務(wù)器和NAS均采用Linux(Red Hat 9.0,內(nèi)核Linux-2.4.20-8)作為操作系統(tǒng)。
(1) NAS:
用Apache和Tomcat構(gòu)建一個(gè)支持JSP的Web服務(wù)器,這樣申請(qǐng)者可以通過(guò)Web頁(yè)面來(lái)提交登錄信息。服務(wù)器管理程序主要是處理系統(tǒng)管理員的信息,用QT3.0完成用戶(hù)界面。RADIUS客戶(hù)端程序(C語(yǔ)言實(shí)現(xiàn))將用戶(hù)或系統(tǒng)管理員提交的消息封裝成RADIUS包,并通過(guò)相應(yīng)的端口轉(zhuǎn)發(fā)給RADIUS服務(wù)器。
(2) 數(shù)據(jù)庫(kù):
采用MySQL數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn),MySQL是一個(gè)多用戶(hù)、多線(xiàn)程SQL數(shù)據(jù)庫(kù)服務(wù)器。它由一個(gè)服務(wù)器守護(hù)程序mysqld和很多不同的客戶(hù)程序和庫(kù)組成。Red Hat 9.0中自帶有MySQL服務(wù),將服務(wù)啟動(dòng)即可。我們可以將RADIUS服務(wù)器與SQL數(shù)據(jù)庫(kù)相連,建立用戶(hù)數(shù)據(jù)庫(kù)和計(jì)費(fèi)數(shù)據(jù)庫(kù),對(duì)用戶(hù)信息和計(jì)費(fèi)信息進(jìn)行有效的管理。
(3) RADIUS服務(wù)器 :
采用freeradius-0.9.0來(lái)搭建RADIUS服務(wù)器,實(shí)現(xiàn)RADIUS協(xié)議,并使用RADIUS服務(wù)器的EAP-Identity認(rèn)證方式(即:RADIUS服務(wù)器對(duì)申請(qǐng)者的用戶(hù)名和口令進(jìn)行認(rèn)證)。另外,實(shí)現(xiàn)時(shí),在freeradius的源碼中添加了數(shù)據(jù)庫(kù)處理模塊以及服務(wù)器管理程序處理模塊。
freeradius支持訪(fǎng)問(wèn)SQL數(shù)據(jù)庫(kù),首先需要建立RADIUS數(shù)據(jù)庫(kù)(以MySQL為例:mysql -uroot -prootpass radius < db_mysql.sql),建立后的數(shù)據(jù)庫(kù)會(huì)包含如下一些表項(xiàng):radcheck:用于指明用戶(hù)的認(rèn)證方式;radgroupcheck:將用戶(hù)分組進(jìn)行管理,指明各組的屬性,如限定有些用戶(hù)組默認(rèn)的認(rèn)證結(jié)果就是Accept或Reject;radgroupreply:對(duì)各用戶(hù)組設(shè)定回應(yīng)的屬性;usergroup:指明用戶(hù)與組的關(guān)系;radacct:存放與計(jì)費(fèi)有關(guān)的各種統(tǒng)計(jì)信息。我們還可以添加一些我們所需的其他表項(xiàng)。
4 結(jié)束語(yǔ)
RADIUS協(xié)議最初作為撥號(hào)網(wǎng)絡(luò)中協(xié)議,由于它易于管理、可擴(kuò)展性好等特點(diǎn),而逐漸被廣泛使用,成為多種網(wǎng)絡(luò)的認(rèn)證、授權(quán)和計(jì)費(fèi)的協(xié)議。但RADIUS協(xié)議仍然存在諸如:基于Response Authenticatior對(duì)共享密鑰的攻擊、基于User-Password屬性對(duì)用戶(hù)密碼的攻擊等安全缺陷。這些都有待于作進(jìn)一步的研究和完善。