無線局域網中RADIUS協議原理與實現

轉載自:http://blog.csdn.net/jinhill/article/details/5901042html


摘要  RADIUS協議是一個被普遍應用於網絡認證、受權和計費的協議。本文在介紹了RADIUS協議原理的基礎上,對RADIUS協議的實現作了分析與設計。mysql

  1 引言算法

  遠程認證撥號用戶服務協議(Remote Authentication Dial In User Service, RADIUS)最初是由Livingston公司提出的一個爲撥號用戶提供認證和計費的協議。後經屢次改進,逐漸成爲一項通用的網絡認證、計費協議,並定義於IETF提交的RFC2865和RFC2866文件中。RADIUS協議以Client/Server方式工做,客戶端爲網絡接入服務器(NAS),它向RADIUS服務器提交認證、計費等信息,RADIUS服務器處理信息並將結果返回給NAS。sql

  RADIUS協議的應用範圍很廣,在移動、數據、智能網等業務的認證、計費系統中都有所應用。無線局域網的802.1X認證框架中,在認證端也建議使用RADIUS協議。數據庫

  本文將論述RADIUS協議的原理,並探討它在WLAN中的應用及實現方案。編程

  2 RADIUS協議瀏覽器

  2.1  WLAN網絡模型安全

  實際商用的無線局域網,能夠用局域網交換機來實現802.1X認證協議中的端口控制功能。爲保證網絡的安全性,在無線局域網的出口和認證端應加上防火牆。RADIUS服務器和數據庫還能夠採起主、備結構,以保證網絡的健壯性。服務器

  網絡模型以下圖所示:
網絡


  圖1  無線局域網網絡模型

  無線局域網的認證端由RADIUS服務器、網絡接入服務器(NAS)和數據庫組成。其中:

  NAS:做爲RADIUS服務器的客戶端,向RADIUS服務器轉交用戶的認證信息。並在用戶經過認證以後,向RADIUS服務器發送計費信息。

  RADIUS服務器:做爲認證系統的中心服務器,它與NAS、數據庫相連,它接受來自NAS提交的信息,對數據庫進行相應的操做,並把處理結果返回給NAS。

  數據庫:用於保存全部的用戶信息、計費信息和其餘信息。用戶信息由網絡管理員添加至數據庫中;計費信息來自於RADIUS服務器;其餘信息包括日誌信息等。

  2.2  RADIUS的數據包結構

  RADIUS是應用層的協議,在傳輸層它的報文被封裝在UDP的報文中,進而封裝進IP包。RADIUS認證使用1812端口,計費使用1813端口。

  以太網上的RADIUS封裝後的包結構:


  RADIUS數據包分爲5個部分:

  (1) Code:1個字節,用於區分RADIUS包的類型:經常使用類型有:

  接入請求(Access-Request),Code=1;接入應答(Access-Accept),Code=2;接入拒絕(Access-Reject),Code=3;計費請求(Accounting-Request),Code=4等。

  (2)Identifier:一個字節,用於請求和應答包的匹配。

  (3)Length:兩個字節,表示RADIUS數據區(包括Code, Identifier, Length, Authenticator, Attributes)的長度,單位是字節,最小爲20,最大爲4096

  (4)Authenticator:16個字節,用於驗證服務器端的應答,另外還用於用戶口令的加密。RADIUS服務器和NAS的共享密鑰(Shared Secret)與請求認證碼(Request Authenticator)和應答認證碼(Response Authenticator),共同支持發、收報文的完整性和認證。另外,用戶密碼不能在NAS和RADIUS 服務器之間用明文傳輸,而通常使用共享密鑰(Shared Secret)和認證碼(Authenticator)經過MD5加密算法進行加密隱藏。

  (5)Attributes:不定長度,最小可爲0個字節,描述RADIUS協議的屬性,如用戶名、口令、IP地址等信息都是存放在本數據段。

  2.3 RADIUS的認證、計費過程

  如圖1網絡模型所示:

  (1)申請者登陸網絡時,NAS會有一個客戶定義的Login提示符要求申請者輸入用戶信息(用戶名和口令),申請者輸入相關的認證信息後,等待認證結果。

  (2)NAS在獲得用戶信息後,將根據RADIUS的數據包格式,向RADIUS服務器發出「接入請求」(Access-Request)包。包中通常包括如下RADIUS屬性值:用戶名、用戶口令、訪問服務器的ID、訪問端口的ID。

  (3)當RADIUS服務器收到「接入請求」包後,首先驗證NAS的共享密碼與RADIUS服務器中預先設定的是否一致,以確認是所屬的RADIUS客戶端。在查驗了包的正確性以後,RADIUS服務器會依據包中的用戶名在用戶數據庫中查詢是否有此用戶記錄。若是用戶信息不符合,就向NAS發出「接入拒絕」(Access-Reject)包。NAS在收到拒絕包後,會當即中止用戶鏈接端口的服務要求,用戶被強制退出。

  (4)若是用戶信息所有符合,服務器向NAS發出「接入質詢」包(Access-Challenge),對用戶的登陸請求做進一步的驗證。其中包括:用戶口令、用戶登陸訪問服務器的IP、用戶登陸的物理端口號等。NAS收到「接入質詢」包後,將消息顯示給用戶,要求用戶進一步確認登陸請求。用戶再次確認後,RADIUS服務器將比較兩次的請求信息,決定如何響應用戶(發送Access-Accept、Access-Reject或再一次的Access-Challenge)。

  (5)當全部的驗證條件和握手會話均經過後,RADIUS服務器會將數據庫中的用戶配置信息放在「接入接受」(Access-Accept)包中返回給NAS,後者會根據包中的配置信息限定用戶的具體網絡訪問能力。包括服務類型:SLIP、PPP、Login User、Rlogin、Framed、Callback等等。還包括與服務類型相關的配置信息:IP地址、時間限制等等。

  (6)在全部的驗證、受權完成後,局域網交換機的控制端口被打開。用戶能夠經過交換機進入網絡。同時,NAS向RADIUS服務器發送 「計費請求開始」包(Accounting-Request Start),通知RADIUS服務器開始計費。當用戶下網時,NAS向RADIUS服務器發送「計費請求結束」包(Accounting-Request Stop),RADIUS服務器根據計費包的信息計算用戶使用網絡的費用。

  3  WLAN模型中RADIUS認證系統的設計與實現

  3.1  WLAN網絡模型的簡化

  在實驗室的模擬環境下,因爲網絡用戶少,能夠採用中、小型的數據庫來存放所需信息,並能夠將RADIUS服務器與數據庫在同一主機上實現。局域網交換機能夠實現端口控制功能。網絡結構可簡化以下:


  圖2  實驗室環境下WLAN網絡模型

  3.2  NAS設計

  (1)RADIUS客戶端處理程序:負責接收申請者的信息;向RADIUS服務器提交認證、計費、管理等數據包;向申請者返回相應結果。

  (2)服務器管理程序:爲了方便網絡管理員對RADIUS服務器和數據庫的管理,在NAS主機上,還能夠運行服務器管理程序,管理程序的功能應該包括有:管理員模塊(添加、刪除網絡管理員,設置管理員權限等);用戶信息模塊(實現用戶的查詢、添加、刪除等操做);計費信息模塊(查詢用戶的計費信息,建立、修改、刪除各類不一樣的計費方式,);日誌信息模塊等。

  (3)用戶信息的提交:用戶須要向NAS提交用戶信息,有多種方法能夠實現,最簡單的方法是採用Web方式提交。在NAS上創建一個Web服務器,這樣,用戶能夠直接使用瀏覽器來和NAS交互,Web服務器接受到用戶提交的信息後,把這些信息傳給RADIUS的客戶端處理程序。後者把這些信息封裝成RADIUS的接入請求(Access-Request)包格式,經過認證端口(1812)向RADIUS服務器提出認證請求。

  (4)計費信息的提交:認證經過以後,NAS客戶端程序經過認證端口(1812)向RADIUS服務器發送包含有用戶名、用戶IP、上網起始時間等信息的「計費請求開始」包(Accounting-Request Start),通知RADIUS服務器開始計費。RADIUS服務器在數據庫中紀錄下相應項,並返回「計費響應」包(Accounting-Response)。當用戶下網時,NAS向RADIUS服務器發送包含有結束時間、數據流量等信息的「計費請求結束」包(Accounting-Request Stop)。後者返回「計費響應」包(Accounting-Response)確認。

  (5)服務器管理程序的提交:也經過RADIUS客戶端處理程序來向RADIUS服務器提交。客戶端處理程序將管理程序的請求包裝成標準的RADIUS包格式,並經過爲服務器管理程序定義一個端口號提交給RADIUS服務器。

  3.3  RADIUS服務器設計

  RADIUS服務器處理來自NAS的各項數據和實現對數據庫的操做,並返回相應的結果。RADIUS客戶端和服務器端的協議通訊採用Socket編程來實現。

  (1)對數據庫的操做:RADIUS服務器經過數據庫接口與數據庫創建起鏈接。在RADIUS服務器中用SQL語句實現所需的數據庫操做模塊(如:用戶、計費、管理員等信息的查詢、添加、修改等操做),當RADIUS服務器須要對數據庫操做時,就調用相應的模塊。

  (2)認證包處理:經過*認證端口(1812),來監測NAS提交的認證數據包,收到認證包後,查詢數據庫驗證用戶,並把結果以RADIUS數據包格式從1812端口返回。對於多個用戶申請併發的狀況,使用多線程方式處理。

  (3)計費包的處理:當用戶的認證經過時,查詢該用戶計費信息。肯定其計費類型、費率等。當*到NAS在計費端口(1813)提交計費包後,就向數據庫中添加「計費請求開始」包中所提交的計費信息(包括用戶名、上網起始時間等)。在收到用戶下網的「計費請求結束」後,根據包中提交的用戶結束時間、數據流量等信息,計算用戶的上網時長和數據流量,並根據用戶計費類型來計算出用戶本次上網費用,記錄入數據庫。

  (4)服務器管理程序請求的處理:*管理程序請求的端口(自定義),收到後解包並執行相應的處理函數。

  3.4 數據庫的設計

  用於保存全部的用戶信息、計費信息等。數據庫中包含的表項至少應包括如下幾類:

  (1) 用戶信息:包括用戶名、口令、認證方式、訪問權限、付費方式等。

  (2) 受權信息:服務器返回給用戶的受權等配置信息,如服務類型,會話時間等。

  (3) 計費信息:存放與計費有關的各類統計信息。如:上網時間、計費費率、用戶

  的歷次上網的數據流量和費用、用戶賬戶餘額等。

  (4) 管理員信息:網絡管理員的ID號和口令、管理員的權限。

  (5) NAS信息:RADIUS服務器所屬的各NAS紀錄。包括各NAS的ID號、與

  RADIUS服務器的共享密碼等。

  (6) 日誌信息:保存用戶上網的歷史記錄、網絡管理員的登陸及操做紀錄。

  3.5認證端各部分的實現:

  操做系統:RADIUS服務器和NAS均採用Linux(Red Hat 9.0,內核Linux-2.4.20-8)做爲操做系統。

  (1) NAS:

  用Apache和Tomcat構建一個支持JSP的Web服務器,這樣申請者能夠經過Web頁面來提交登陸信息。服務器管理程序主要是處理系統管理員的信息,用QT3.0完成用戶界面。RADIUS客戶端程序(C語言實現)將用戶或系統管理員提交的消息封裝成RADIUS包,並經過相應的端口轉發給RADIUS服務器。

  (2) 數據庫:

  採用MySQL數據庫來實現,MySQL是一個多用戶、多線程SQL數據庫服務器。它由一個服務器守護程序mysqld和不少不一樣的客戶程序和庫組成。Red Hat 9.0中自帶有MySQL服務,將服務啓動便可。咱們能夠將RADIUS服務器與SQL數據庫相連,創建用戶數據庫和計費數據庫,對用戶信息和計費信息進行有效的管理。

  (3) RADIUS服務器 :

  採用freeradius-0.9.0來搭建RADIUS服務器,實現RADIUS協議,並使用RADIUS服務器的EAP-Identity認證方式(即:RADIUS服務器對申請者的用戶名和口令進行認證)。freeradius的代碼是開源的,能夠在www.freeradius.org上下載。另外,實現時,在freeradius的源碼中添加了數據庫處理模塊以及服務器管理程序處理模塊。

  freeradius支持訪問SQL數據庫,首先須要創建RADIUS數據庫(以MySQL爲例:mysql -uroot -prootpass radius < db_mysql.sql),創建後的數據庫會包含以下一些表項:radcheck:用於指明用戶的認證方式;radgroupcheck:將用戶分組進行管理,指明各組的屬性,如限定有些用戶組默認的認證結果就是Accept或Reject;radgroupreply:對各用戶組設定迴應的屬性;usergroup:指明用戶與組的關係;radacct:存放與計費有關的各類統計信息。咱們還能夠添加一些咱們所需的其餘表項。

  4  結束語

  RADIUS協議最初做爲撥號網絡中協議,因爲它易於管理、可擴展性好等特色,而逐漸被普遍使用,成爲多種網絡的認證、受權和計費的協議。但RADIUS協議仍然存在諸如:基於Response Authenticatior對共享密鑰的攻擊、基於User-Password屬性對用戶密碼的攻擊等安全缺陷。這些都有待於做進一步的研究和完善。

相關文章
相關標籤/搜索