天天看點

Radius協定-學習

目錄

RFC Radius 協定

Radius-學習

RADIUS協定的主要特征

用戶端/伺服器模式

安全的消息互動機制

良好的擴充性

AAA介紹

C/S結構

RADIUS在協定棧中的位置

RADIUS網絡安全

包加密

密碼加密

密碼加密與密碼驗證過程

RADIUS封包

封包格式

封包類型

RADIUS認證、授權、計費流程

RADIUS CoA/DM封包

互動流程

會話識别

代碼實作(Java)

參考連結

百度百科定義:

RADIUS:Remote Authentication Dial In User Service,遠端使用者撥号認證系統由RFC2865,RFC2866定義,是應用最廣泛的AAA協定。AAA是一種管理架構,是以,它可以用多種協定來實作。在實踐中,人們最常使用遠端通路撥号使用者服務(Remote Authentication Dial In User Service,RADIUS)來實作AAA。

RADIUS是一種C/S結構的協定,它的用戶端最初就是NAS(Net Access Server)伺服器,任何運作RADIUS用戶端軟體的計算機都可以成為RADIUS的用戶端。RADIUS協定認證機制靈活,可以采用PAP、CHAP或者Unix登入認證等多種方式。RADIUS是一種可擴充的協定,它進行的全部工作都是基于Attribute-Length-Value的向量進行的。RADIUS也支援廠商擴充廠家專有屬性。

由于RADIUS協定簡單明确,可擴充,是以得到了廣泛應用,包括普通電話上網、ADSL上網、小區寬帶上網、IP電話、VPDN(Virtual Private Dialup Networks,基于撥号使用者的虛拟專用撥号網業務)、行動電話預付費等業務。IEEE提出了802.1x标準,這是一種基于端口的标準,用于對無線網絡的接入認證,在認證時也采用RADIUS協定。

RFC文檔中心

RFC 2865 Radius 中文版

RFC 2866 Radius Accounting 中文版

RFC 2869 Radius Extensions 中文版

RFC 3576 Dynamic Authorization Extensions to Radius 中文版

摘 要:

目前,電信營運商和服務提供商所采用的認證方式主要有本地認證、RADIUS認證和不認證;而計費政策更是豐富多彩,常見的有不計費(包月)、按時長計費、按流量計費、按端口計費等等。目前在所有這些認證計費方式中,以采用RADIUS Server進行集中認證計費應用的最為普及和廣泛。

AAA是認證(Authentication)、授權(Authorization)和計費(Accounting)的簡稱,它是一種對網絡安全進行管理的基本架構。而RADIUS (Remote Authentication Dia• -In User Service)即遠端認證撥号使用者服務,是一種分布式的、客戶機/伺服器結構的資訊互動協定,它能保護網絡不受未授權通路的幹擾。二者結合可以實作對遠端接入使用者身份、權限以及流量的嚴格控制。RADIUS為服務供應商和公司提供了一種靈活通用的協定,用來完成集中式的使用者認證、密碼加密、服務選擇、過濾和帳目核對等工作。當進行PAP/CHAP連接配接或連接配接第三方認證伺服器時,一個單獨的RADIUS資料庫伺服器可以在多個複雜網絡上同時管理多個安全系統,并可用于維護成千上萬使用者的資訊安全。

RADIUS不僅指運作于伺服器上的軟體,還包括網絡通路伺服器與RADIUS伺服器之間的互動操作協定。

AAA可以通過多種協定來實作,在實際應用中,最常使用RADIUS協定。

RADIUS是一種分布式的、用戶端/伺服器結構的資訊互動協定,能保護網絡不受未授權通路的幹擾,常應用在既要求較高安全性、又允許遠端使用者通路的各種網絡環境中。該協定定義了基于UDP(User Datagram Protocol)的RADIUS封包格式及其傳輸機制,并規定UDP端口1812、1813分别作為預設的認證、計費端口。

RADIUS最初僅是針對撥号使用者的AAA協定,後來随着使用者接入方式的多樣化發展,RADIUS也适應多種使用者接入方式,如以太網接入等。它通過認證授權來提供接入服務,通過計費來收集、記錄使用者對網絡資源的使用。

RADIUS用戶端

一般位于網絡接入伺服器NAS(Network Access Server)上,可以遍布整個網絡,負責傳輸使用者資訊到指定的RADIUS伺服器,然後根據從伺服器傳回的資訊進行相應處理(如接受/拒絕使用者接入)。

裝置作為RADIUS協定的用戶端,實作以下功能:

支援标準RADIUS協定及擴充屬性,包括RFC2865、RFC2866。

對RADIUS伺服器狀态探測功能。

計費結束請求封包的本地緩存重傳功能。

RADIUS伺服器主備或負載分擔功能。

RADIUS伺服器

一般運作在中心計算機或工作站上,維護相關的使用者認證和網絡服務通路資訊,負責接收使用者連接配接請求并認證使用者,然後給用戶端傳回所有需要的資訊(如接受/拒絕認證請求)。RADIUS伺服器通常要維護三個資料庫。

Radius協定-學習

Users:用于存儲使用者資訊(如使用者名、密碼以及使用的協定、IP位址等配置資訊)。

Clients:用于存儲RADIUS用戶端的資訊(如共享密鑰、IP位址等)。

Dictionary:用于存儲RADIUS協定中的屬性和屬性值含義的資訊。

RADIUS用戶端和RADIUS伺服器之間認證消息的互動是通過共享密鑰的參與來完成的。共享密鑰是一個帶外傳輸的、用戶端和伺服器都知道的字元串,不需要單獨進行網絡傳輸。RADIUS封包中有一個16位元組的驗證字字段,它包含了對整個封包的數字簽名資料,該簽名資料是在共享密鑰的參與下利用MD5算法計算得出。收到RADIUS封包的一方要驗證該簽名的正确性,如果封包的簽名不正确,則丢棄它。通過這種機制,保證了RADIUS用戶端和RADIUS伺服器之間資訊互動的安全性。另外,為防止使用者密碼在不安全的網絡上傳遞時被竊取,在RADIUS封包傳輸過程中還利用共享密鑰對使用者密碼進行了加密。

RADIUS封包是由封包頭和一定數目的屬性(Attribute)構成,新屬性的加入不會破壞協定的原有實作。

AAA概述

AAA是認證(Authentication)、授權(Authorization)和計費(Accounting)的縮寫,它是運作于NAS(網絡通路伺服器)上的用戶端程式。提供了一個用來對認證、授權和計費這三種安全功能進行配置的一緻性架構,實際上是對網絡安全的一種管理。這裡的網絡安全主要指通路控制。包括哪些使用者可以通路網絡伺服器;具有通路權的使用者可以得到哪些服務;以及如何對正在使用網絡資源的使用者進行計費。

下面簡單介紹一下AAA所提供的三種服務:

認證功能

AAA支援以下認證方式:

• 不認證:對使用者非常信任,不對其檢查,一般情況下不采用這種方式。

• 本地認證:将使用者資訊(包括本地使用者的使用者名、密碼和各種屬性)配置在接入伺服器上。本地認證的優點是速度快,降低營運成本;但存儲資訊量受裝置硬體條件限制。

• 遠端認證:支援通過RADIUS協定或HWTACACS協定進行遠端認證,由接入伺服器作為Client端,與RADIUS伺服器或TACACS伺服器通信。

授權功能

AAA支援以下授權方式:

• 直接授權:對使用者非常信任,直接授權通過。

• 本地授權:根據寬帶接入伺服器上為本地使用者賬号配置的相關屬性進行授權。

• if-authenticated授權:如果使用者通過了認證,并且使用的認證方法不是none,則對使用者授權通過。

• RADIUS認證成功後授權:RADIUS協定的認證和授權是綁定在一起的,不能單獨使用RADIUS進行授權。

計費功能

AAA支援以下計費方式:

• 不計費

• 遠端計費:支援通過RADIUS伺服器或TACACS伺服器進行遠端計費。

Radius協定-學習

• 本地認證——即在NAS端進行認證、授權和計費,

• 遠端認證——通過協定進行遠端的認證、授權和計費。

AAA的實作可采用RADIUS協定。RADIUS用來管理使用序列槽和數據機的大量分散使用者。

網絡接入伺服器簡稱NAS。當使用者想要通過某個網絡(如電話網)與NAS建立連接配接進而獲得通路其他網絡的權利時,NAS可以選擇在NAS上進行本地認證計費,或把使用者資訊傳遞給RADIUS伺服器,由RADIUS進行認證計費;RADIUS 協定規定了NAS與RADIUS 伺服器之間如何傳遞使用者資訊和計費資訊,即兩者之間的通信規則;RADIUS伺服器負責接收使用者的連接配接請求,完成認證,并把使用者所需的配置資訊傳回給NAS。使用者獲得授權後,在其正常上線、線上和下線過程中,RADIUS伺服器還完成對使用者賬号計費的功能。

Radius協定-學習

RADIUS采用典型的用戶端/伺服器(Client/Server)結構,它的用戶端最初就是NAS,現在任何運作RADIUS用戶端軟體的計算機都可以成為RADIUS的用戶端。NAS上運作的AAA程式對使用者來講為伺服器端,對RADIUS伺服器來講是作為用戶端。負責傳輸使用者資訊到指定的RADIUS伺服器,然後根據從伺服器傳回的資訊進行相應處理(如接入/挂斷使用者)。RADIUS伺服器負責接收使用者連接配接請求,認證使用者,然後給NAS傳回所有需要的資訊。

1、RADIUS的用戶端通常運作于接入伺服器(NAS)上,RADIUS伺服器通常運作于一台工作站上,一個RADIUS伺服器可以同時支援多個RADIUS客戶(NAS)。

2、RADIUS的伺服器上存放着大量的資訊,接入伺服器(NAS)無須儲存這些資訊,而是通過RADIUS協定對這些資訊進行通路。這些資訊的集中統一的儲存,使得管理更加友善,而且更加安全。

3、RADIUS伺服器可以作為一個代理,以客戶的身份同其他的RADIUS伺服器或者其他類型的認證伺服器進行通信。使用者的漫遊通常就是通過RADIUS代理實作的。簡單地說,代理就是一台伺服器,可以作為其他RADIUS伺服器的代理,負責轉發RADIUS認證和計費資料包。所謂漫遊功能,就是代理的一個具體實作,這樣可以讓使用者通過本來和其無關的RADIUS伺服器進行認證。

RADIUS是一種流行的AAA協定,采用UDP協定傳輸,在協定棧中位置如下:

Radius協定-學習

RADIUS為何采用UDP,而不是TCP的原因如下:

1、NAS和RADIUS伺服器之間傳遞的一般是幾十至上百個位元組長度的資料,使用者可以容忍幾秒到十幾秒的驗證等待時間。當處理大量使用者時伺服器端采用多線程,UDP簡化了伺服器端的實作過程。

2、TCP是必須成功建立連接配接後才能進行資料傳輸的,這種方式在有大量使用者使用的情況下實時性不好。

3、當向主用伺服器發送請求失敗後,還要必須向備用的伺服器發送請求。于是RADIUS要有重傳機制和備用伺服器機制,它所采用的定時機制,TCP不能很好的滿足。

RADIUS協定采用的是UDP協定,資料包可能會在網絡上丢失,如果客戶沒有收到響應,那麼可以重新發送該請求包。多次發送之後如果仍然收不到響應,RADIUS客戶可以向備用的RADIUS伺服器發送請求包。

RADIUS協定的加密是使用MD5加密算法進行的,在RADIUS的用戶端(NAS)和伺服器端(RADIUS Server)儲存了一個密鑰(key),RADIUS協定利用這個密鑰使用MD5算法對RADIUS中的資料進行加密處理。密鑰不會在網絡上傳送。

RADIUS的加密主要展現在以下兩方面:

在RADIUS包中,有16位元組的驗證字(authenticator)用于對包進行簽名,收到RADIUS包的一方要檢視該簽名的正确性。如果包的簽名不正确,那麼該包将被丢棄,對包進行簽名時使用的也是MD5算法(利用密鑰),沒有密鑰的人是不能構造出該簽名的。

在認證使用者時,使用者的密碼在NAS和RADIUS Server之間不會以明文方式傳送,而是使用了MD5算法對密碼進行加密。沒有密鑰的人是無法正确加密密碼的,也無法正确地對加密過的密碼進行解密。

當使用者上網時,NAS将決定對使用者采用何種認證方法。下面對使用RADIUS認證的情況下PPP使用者與NAS之間的PAP和CHAP認證過程進行介紹。

PAP 驗證

使用者以明文的形式把使用者名和他的密碼傳遞給NAS,NAS把使用者名和加密過的密碼放到驗證請求包的相應屬性中傳遞給RADIUS伺服器。RADIUS伺服器根據NAS上傳的帳号進行驗證來決定是否允許使用者上網并傳回結果。NAS可以在其中包含服務類型屬性Attribute Service-Type=Framed-User,和Framed-Protoco• =PPP作為提示來告訴RADIUS伺服器PPP是所希望的服務。

Secret password =Password XOR MD5(Challenge + Key)

(Challenge就是RADIUS封包中的Authenticator)

CHAP驗證

對于CHAP(挑戰握手認證協定),它提供對使用者密碼進行加密的機制。

當使用者請求上網時,NAS産生一個16位元組的随機碼給使用者(同時還有一個ID号,本地路由器的Host name)。使用者端得到這個包後使用自己獨有的裝置或軟體用戶端将CHAP ID、使用者密碼(密碼字)用MD5算法對該随機碼進行加密生成一個Secret Password,随同使用者名user name一并傳給NAS。

NAS把傳回來的user name和Secret Password分别作為使用者名和密碼,并把原來的16位元組随機碼以及CHAP ID傳給RADIUS伺服器。RADIUS根據使用者名在伺服器端查找資料庫,得到和使用者端進行加密所用的一樣的密鑰,用MD5算法對CHAP ID,密鑰和傳來的16位元組的随機碼進行加密,将其結果與傳來的Password作比較,如果相比對,伺服器送回一個接入允許資料包,否則送回一個接入拒絕資料包。

RADIUS協定是基于UDP協定的 。

Radius協定-學習

各字段的解釋如下:

Code:長度為1個位元組,用來說明RADIUS封包的類型。不同RADIUS封包的Code值不相同。例如,Code為1時表示Access-Request封包,Code為2時表示Access-Accept封包。

Identifier:長度為1個位元組,用來比對請求封包和響應封包,以及檢測在一段時間内重發的請求封包。RADIUS用戶端發送請求封包後,RADIUS伺服器傳回的響應封包中的Identifier值應與請求封包中的Identifier值相同。

Length:長度為2個位元組,用來指定RADIUS封包的長度。超過Length取值的位元組将作為填充字元而忽略。如果接收到的封包的實際長度小于Length的取值,則該封包會被丢棄。

Authenticator:長度為16個位元組,用來驗證RADIUS伺服器的響應封包,同時還用于使用者密碼的加密。

Attribute:即RADIUS屬性字段,長度不定,為封包的内容主體,用來攜帶專門的認證、授權和計費資訊,提供請求和響應封包的配置細節。Attribute可以包括多個RADIUS屬性,每一個RADIUS屬性都采用(Type、Length、Value)三元組的結構來表示。

類型(Type):長度為1個位元組,取值為1~255,用于表示RADIUS屬性的編号。

長度(Length):長度為1個位元組,表示該RADIUS屬性(包括類型、長度和屬性值)的長度,機關為位元組。

屬性值(Value):最大長度為253位元組,表示該RADIUS屬性的資訊,其格式和内容由類型和長度決定。

RADIUS認證封包

封包名稱

說明

Access-Request

認證請求封包,是RADIUS封包互動過程中的第一個封包,用來攜帶使用者的認證資訊(例如:使用者名、密碼等)。認證請求封包由RADIUS用戶端發送給RADIUS伺服器,RADIUS伺服器根據該封包中攜帶的使用者資訊判斷是否允許接入。

Access-Accept

認證接受封包,是RADIUS伺服器對RADIUS用戶端發送的Access-Request封包的接受響應封包。如果Access-Request封包中的所有屬性都可以接受(即認證通過),則發送該類型封包。RADIUS用戶端收到此封包後,使用者才能認證通過并被賦予相應的權限。

Access-Reject

認證拒絕封包,是RADIUS伺服器對RADIUS用戶端的Access-Request封包的拒絕響應封包。如果Access-Request封包中的任何一個屬性不可接受(即認證失敗),則RADIUS伺服器傳回Access-Reject封包,使用者認證失敗。

Access-Challenge

認證挑戰封包。EAP中繼認證時,RADIUS伺服器接收到Access-Request封包中攜帶的使用者名資訊後,會随機生成一個MD5挑戰字,同時将此挑戰字通過Access-Challenge封包發送給使用者。使用者使用該挑戰字對使用者密碼進行加密處理後,将新的使用者密碼資訊通過Access-Request封包發送給RADIUS伺服器。RADIUS伺服器将收到的已加密的密碼資訊和本地經過加密運算後的密碼資訊進行對比,如果相同,則該使用者為合法使用者。

RADIUS計費封包

Accounting-Request(Start)

計費開始請求封包。如果RADIUS用戶端使用RADIUS模式進行計費,RADIUS用戶端會在使用者開始通路網絡資源時,向RADIUS伺服器發送計費開始請求封包。

Accounting-Response(Start)

計費開始響應封包。RADIUS伺服器接收并成功記錄計費開始請求封包後,需要回應一個計費開始響應封包。

Accounting-Request(Interim-update)

實時計費請求封包。為避免RADIUS伺服器無法收到計費結束請求封包而繼續對該使用者計費,可以在RADIUS用戶端上配置實時計費功能。RADIUS用戶端定時向RADIUS伺服器發送實時計費請求封包,減少計費誤差。

Accounting-Response(Interim-update)

實時計費響應封包。RADIUS伺服器接收并成功記錄實時計費請求封包後,需要回應一個實時計費響應封包。

Accounting-Request(Stop)

計費結束請求封包。當使用者斷開連接配接時(連接配接也可以由NAS斷開),RADIUS用戶端向RADIUS伺服器發送計費結束請求封包,其中包括使用者上網所使用的網絡資源的統計資訊(上網時長、進/出的位元組數等),請求RADIUS伺服器停止計費。

Accounting-Response(Stop)

計費結束響應封包。RADIUS伺服器接收計費停止請求封包後,需要回應一個計費停止響應封包。

Radius協定-學習

裝置支援RADIUS CoA/DM功能,提供一種動态修改線上使用者權限或者強制使用者下線的機制。

CoA-Request

動态授權請求封包。當管理者需要更改某個線上使用者的權限時(例如,管理者不希望使用者通路某個網站),可以通過RADIUS伺服器發送一個動态授權請求封包給RADIUS用戶端,使RADIUS用戶端修改線上使用者的權限。

CoA-ACK

動态授權請求接受封包。如果RADIUS用戶端成功更改了使用者的權限,則RADIUS用戶端回應動态授權請求接受封包給RADIUS伺服器。

CoA-NAK

動态授權請求拒絕封包。如果RADIUS用戶端未成功更改使用者的權限,則RADIUS用戶端回應動态授權請求拒絕封包給RADIUS伺服器。

DM-Request

使用者離線請求封包。當管理者需要讓某個線上的使用者下線時,可以通過RADIUS伺服器發送一個使用者離線請求封包給RADIUS用戶端,使RADIUS用戶端終結使用者的連接配接。

DM-ACK

使用者離線請求接受封包。如果RADIUS用戶端已經切斷了使用者的連接配接,則RADIUS用戶端回應使用者離線請求接受封包給RADIUS伺服器。

DM-NAK

使用者離線請求拒絕封包。如果RADIUS用戶端無法切斷使用者的連接配接,則RADIUS用戶端回應使用者離線請求拒絕封包給RADIUS伺服器。

CoA(Change of Authorization)是指使用者認證成功後,管理者可以通過RADIUS協定來修改線上使用者的權限或對其進行重認證。

Radius協定-學習

DM(Disconnect Message)是指使用者下線封包,即由RADIUS伺服器主動發起的強制使用者下線的封包。

Radius協定-學習

與使用者上線授權或使用者主動下線過程相比,CoA/DM的特點是請求封包是由伺服器發送的,回應封包是由裝置發送的,成功則回應ACK封包、失敗則回應NAK封包。

NAS裝置為使用者提供的每一個服務構成一個會話,會話的開頭定義為首次提供服務的點,會話的結束定義為服務結束點。

裝置接收到RADIUS伺服器的CoA-Request封包或者DM-Request封包後,根據封包中的某些RADIUS屬性來識别使用者。用來識别使用者的RADIUS屬性包括:

RADIUS标準屬性:User-Name(1)

RADIUS标準屬性:Acct-Session-ID(4)

RADIUS标準屬性:Framed-IP-Address(8)

RADIUS标準屬性:Calling-Station-Id(31)

比對的方式包括以下兩種:

any方式

其中一個屬性與裝置上的使用者資訊進行比對檢查。識别使用者所用的RADIUS屬性優先級為:Acct-Session-ID(4) > Calling-Station-Id(31) > Framed-IP-Address(8)。按照優先級在請求封包中查找屬性,優先找到哪個屬性就用哪個屬性與裝置上的使用者資訊進行比對,比對成功時,裝置回應ACK封包,否則回應NAK封包。

all方式

所有的屬性與裝置上的使用者資訊進行比對檢查。識别使用者所用的RADIUS屬性包括:Acct-Session-ID(4)、Calling-Station-Id(31)、Framed-IP-Address(8)和User-Name(1)。請求封包中以上屬性都要與裝置上的使用者資訊進行比對,全部比對成功時,裝置回應ACK封包,否則回應NAK封包。

RADIUS伺服器的CoA-Request封包或DM-Request封包與裝置上的使用者資訊比對失敗時,裝置會在回應的CoA-NAK封包或DM-NAK封包中通過錯誤碼描述失敗的原因。

CoA-NAK封包中的錯誤碼

名稱

數值

RD_DM_ERRCODE_MISSING_ATTRIBUTE

402

請求封包中缺少關鍵屬性,導緻RADIUS屬性完整性檢查失敗

RD_DM_ERRCODE_INVALID_REQUEST

404

對請求封包進行屬性解析時,解析失敗

RD_DM_ERRCODE_INVALID_ATTRIBUTE_VALUE

407

請求封包中包含不支援或不存在的屬性,導緻屬性檢查失敗。授權檢查的内容包括:VLAN、ACL、CAR、重定向ACL編号以及基于接口的認證使用者不支援授權華為RADIUS擴充屬性RD_hw_URL_Flag和RD_hw_Portal_URL可能出現的錯誤包括:授權的業務方案不存在授權的QoS模闆不存在或QoS模闆中未配置使用者隊列授權的上下行優先級超過最大值授權的UCL組索引值不在規格範圍内解析ISP VLAN和出端口資訊錯誤重認證屬性與其他屬性同時授權

RD_DM_ERRCODE_SESSION_CONTEXT_NOT_FOUND

503

會話請求失敗。包括:目前針對請求使用者的授權正在處理申請RADIUS臨時表失敗使用者資訊不比對或未找到使用者使用者非RADIUS認證使用者

RD_DM_ERRCODE_RESOURCES_UNAVAILABLE

506

其他授權失敗的情況使用該錯誤碼

DM-NAK封包中的錯誤碼

RD_DM_ERRCODE_SESSION_CONTEXT_NOT_REMOVABLE

504

使用者删除失敗或使用者不存在

http://www.h3c.com/cn/d_201309/922098_30005_0.htm

https://support.huawei.com/enterprise/zh/doc/EDOC1100086522