radius基礎以及c/c++ lib

(本文不是介紹radius協議的理論的)在開始這篇博客之前,看看wiki關於radius的介紹。

客戶端-服務器結構

RADIUS協議是一種基於主從式架構的協議。RADIUS 協議中的客戶端是對用戶(人或者計算機)提供網絡連接服務的器材,對服務器提出驗證和計費要求。服務器針對客戶端的通過進行驗證和計費給予應答。服務器只有針對客戶端的請求進行應答,而無法反方向地對用戶進行服務停止等的請求。

RADIUS 客戶端的實例

因特網連接服務中,撥號呼叫裝置和寬帶接入服務器(BAS、Broadband Access Server)等接收裝置(NAS、Network Access Server)即爲 RADIUS 客戶端。(雖然名字含有“服務器”,但從 RADIUS 協議的角度來看是客戶端)。無線 LAN 環境中的無線接取器和 VLAN 中的 VLAN開關等都是。在內容提供的服務中,Web 服務器起到了 RADIUS 客戶端的作用。

協議的概要

客戶端對服務器提出“RADIUS 請求包”,服務器對客戶端發送“RADIUS 應答包”。雙方通信均由 IP 的UDP包進行。

雙方的數據包,頭部分由20個 8位元和“屬性”組成。頭部分包括類別碼(Code)1個8位元、識別碼(Identifier)1個8位元、數據包整體長度2個8位元、驗證碼(Authenticator)16個8位元。識別碼根據客戶端決定的需求而設定,服務器直接照抄到應答包裏,因爲客戶端需要在收到的應答包與過去曾接收到的請求包對照。實際客戶端一般只是進行累計數值編號,但沒有規定必須是序列號。驗證碼是爲了證明無發送者僞裝和篡改。屬性部分是將屬性値對 (Attribute Value Pair)任意次重複。屬性値對由屬性編號1個8位元、長度1個8位元、屬性値組成。對於値可以賦予4個8位元的整數値、4個8位元IP地址、1 - 253個8位元的文字串等等。

對於每個屬性編號,每個屬性値對裏值的含義在RFC文件裏均有規定,還可以通過給屬性編號賦予新的定義來增加使用目的,RADIUS 協議的靈活性所在也是其最大的特徵。但是一般不推薦各個機器產商爲各自目的獨自給屬性標號賦值。產商特有功能應做爲屬性編號 26 號 (Vendor Specific)的值與產商編號一起加到數據裏。屬性編號 26 號的屬性値對一般稱爲 VSA (Vendor Specific Attribute) 。廠家編號由IANA進行管理和賦予。

協議通過屬性値對裏含有各種個樣信息進行驗證和計費。爲實現驗證,用戶名和密碼各有屬性編號。撥號上網使用PPP時針對 PPP 用的驗證協議 PAPCHAPEAP均備有各自的屬性編號。爲實現計費,備有使用秒數、收發數據量等的屬性編號。由此根據屬性編號可以判斷、驗證和計費兩功能是隻有一種才能使用還是二者可同時使用。

RADIUS分組的最大長度,在RADIUS驗證協議中是4096個8位元、RADIUS計費協議中是 4095 個 8 位元,這個差異據說並沒有特殊含義,而是 RFC 當初的錯字將錯就錯地沿用下來的緣故。


    radius協議的簡介圖


需要補充(或者說需要強調的)是以下幾處內容。

radius協議基於key:length:value方式處理屬性值。故而,是可擴展的。

爲了讓你有一個直觀的感受,我提供一個radius協議通信抓包的結果圖。


抓包圖可以看出radius協議是應用層的,傳輸層是udp協議,radius常規端口是1812/1813,網絡層以下不是我關注的內容,我忽略掉。

此包爲賬號驗證(Code=Access-Request)請求包,應答包如下:


freeradius:linux平臺的radius服務器比較知名的有freeradius,freeradius是c語言寫的radius開源項目,有radius服務器和radius客戶端。此項目更多的是提供安裝包的目的。因此如果你是爲了找一個radius協議的library,很遺憾的告訴你,這個不是你需要的。如大多數開源軟件一樣,既然是軟件,則必然包含諸多邏輯和附加功能。如果你是爲了部署一個radius服務器(需要自行部署數據庫),那freeradius應該能夠給你提供幫助。這個開源項目我沒細看,編譯執行應該是常規的

#./configure
#make
root#make install


tinyradius:tinyradius是Java版本的radius library。項目有一個比較詳細的中文說明文檔。如果需要biger big,請移步官方頁面

如果需要中文版本文檔,請猛擊

ace-radius:ace-radius是一個和tinyradius類似的radius library,不過這個是用c實現的。項目簡單易用,請挪至官方頁面查看其文檔。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章