3COM公司的SuperStack II Remote Access System 1500為中小型企業和Internet 服務提供商提供全面的遠程訪問服務。其在一個平台中集成了非常廣泛的功能,以較低的設備開支,提供了撥入/撥出訪問、采用撥號或幀中繼和專線PPP連接的局域網間路由選擇功能。其具有以下這些特點:
*易於安裝。基於Html浏覽器的安裝向導、圖形用戶界面(GUI)和文檔浏覽。
*先進、易於操作。NAT/PAT地址轉換功能提供低成本高效率的共享ISP訪問。DHCP服務器、中繼和代理功能為本地和遠程用戶提供了簡捷的LAN訪問方式。
*訪問方式安全。包括本地驗證,並可與RADIUS、 Windows NT 或NetWare NOS 服務器配合實現遠程驗證功能。
*I/O單元模塊化。模塊化單元,便於I/O卡的添加和擴展以及PRI訪問單元的熱插拔。
*Univerrsal ConnectTM技術。通過同一基本速率的 ISDN 連接,提供了業界領先的模擬連接方式(速率可高達V.90)和 ISDN 撥入訪問方式。
*可伸縮性。將 ISDN 和模擬連接方式集於一身,端口范圍為4至24端口,可以隨著您的需要進行擴展。
3COM RAS1500以較低價位為要求嚴格的用戶提供了企業級網絡的功能和優異性能,因此成為當前國內小型ISP首選的遠程接入服務器(Remonte Network Access Server),在國內各個小型ISP得到了廣泛的應用。但是,雖然RAS1500可以通過網管軟件Transcend Network Supervisor (TNS)提供功能強大易用的記費認證功能,能滿足中小型企業的需求,但是其昂貴的價格使小型ISP望而卻步。因此如何以較低的價格實現RAS1500的認證和記費就成為當前使用RAS1500的小型ISP的難以解決問題。
本文討論了如何使用Linux作為3comRas1500的radius服務器,實現集中化的認證和記費功能,以減少管理的負擔和費用。這裡實現的radius服務器可以實現撥號用戶的集中管理,可以實現撥號用戶賬號和系統賬號集成或分開;並且在撥號賬戶獨立時,實現web界面的管理,如:察看詳細的log信息及各個用戶的記賬信息;實現用戶撥號時間的限定,當該用戶撥號時間到達限定以後,自動斷開,而且不能再撥入。還可以實現用戶的月撥號時間限定,每個月該用戶只能使用限額的時間等等。
一、radius協議原理
Radius是Remote Authentication Dial In User Service-遠程撥入用戶認證服務的簡寫。其定義了在NAS(Network Access Server,撥號服務器,如:pastmaster,3com rs1500等)和集中存放認證信息的radius服務器之間傳輸認證、授權和配置信息的協議。其協議的標准最新的定義在rfc2865和rfc2866中,也可以在www.freeradius.org處得到相關的rfc。RADIUS以Client/Server模式工作,實現了對遠程電話撥號用戶的身份認證、授權和計費功能。其Client端多為網絡訪問服務器(NAS),主要用來將用戶信息傳遞給Server;Server則對用戶進行認證,並反回用戶的配置信息。為保證傳輸的安全性,在Client和Server之間傳送的數據均以MD5方式加密。RADIUS Server端和Client端通信主要有兩種情況,一種是接入認證,另一種是計費請求。
RADIUS是一種基於UDP協議的上層協議,認證服務的監聽端口號為1812,記費服務的監聽端口號為1813。標准的RADIUS數據包的結構包括Code、ID、Length、Authenticator和Attributes幾部分。
Code表示該包的類型。ID號區分不同消息並給予相應的應答。Length為該RADIUS包的總長度,Authenticator 是供MD5加密使用的字符串。Attributes則對應包中具體內容,Attributes包括三個部分:type、length、value。type表示該Attribute的具體含義;length為該type的長度;value是該type的具體值。
1.接入請求 (Access-Request)
type length
01 USERNAME(以00為結束) ≥3(其長度為加入00後的長度)
02 PASSWord(以00為結束) 6
04 IP-ADDRESS 6(接入服務器NAS地址)
05 NAS-PORT 6(物理端口號)
3D PORT-TYPE 6
18 STATE ≥3(此處可不使用)
1F CALLING-STATION-ID ≥3(電話呼入被叫號)
IE CALLED-STATION-ID ≥3(電話呼入主叫號)
2C ACCT-SESSION-ID(以00為結束) ≥3(以00結束其長度為加入00後的長度)
當用戶請求連接時,Client端給Server發送認證請求,在請求包中帶有username、password、NAS_port等。Server端收到該請求後會到users文件中查找對應信息,當用戶的username和password正確時,Server會返回Access-Accept信息,否則返回Access-Reject信息。
2.同意接入 (Access-Accept)
type length
06 SERVICE-TYPE 6
07 FRAMED-PROTOCOL 6
其中, SERVICE-TYPE是用戶的服務類型,大部分用戶是Framed(其值為2);FRAMED-PROTOCOL則是用戶所使用的協議,多為PPP(其值為1)或SLIP(其值為2)。Access-Accept包是由Server端發給Client端用戶的數據包,此時Server已認證通過了該用戶,返回確認信號和該用戶的配置參數.這些參數是在users文件中配入的。
3.拒絕接入 (Access-Reject)
無type位。Access-Reject包是用戶認證不通過時,Server發送給client端的否認信號。
4.計費請求 (Accounting-Request)
type length
01 USERNAME(以00為結束) ≥3(其長度為加入00後的長度)
04 IP-ADDRESS 6
05 NAS-PORT 6
3D PORT-TYPE 6
28 ACCT-STATUS-TYPE 6(1:start;2:stop)
29 ACCT-DELAY-TIME 6
2C ACCT-SESSION-ID(以00為結束) ≥3(其長度為加入00後的長度)
2D ACCT-AUTHENTIC 6(1:RADIUS;2:local;3:remote)
2E ACCT-SESSION-TIME 6
1F CALLING-STATION-ID ≥3(被叫號)
1E CALLED-STATION-ID ≥3(主叫號)
07 FRAMED-PROTOCOL 6
08 FRAMED-IP-ADDRES 6(NAS地址)
2A ACCT-INPUT-OCTETS 6(僅用於stop中,表示多少字節從此端口輸入)
2B ACCT-OUTPUT-OCTETS 6(僅用於stop中,表示多少字節從此端口送出)
2F ACCT-INPUT-PACKETS 6(僅用於stop中,表示多少包送給了用戶)
(帶*為必需項)
計費請求信息分為兩種情況:一是start即當用戶認證通過並連接成功時發出的信息;一是stop即用戶斷鏈時發出的信息,通知該用戶斷鏈,停止計費。兩者是由ACCT-STATUS-TYPE來區分的。Server記錄這些信息到detail文件中,以供二次開發時使用。
5.計費應答 (Accounting- Response)
當Server收到Client端送來的計費請求時,會返回Accounting-Response包,告訴Client端已收到該信息,該包無type位。
上面為radius協議的簡單的原理,但是筆者推薦在動手之前閱讀rfc2865和rfc2866,這樣可以在安裝除錯中解決很多問題。
二、下載安裝必需的支持軟件
這裡介紹使用Linux環境下的radius服務器軟件-icradius來實現radius服務器,其主頁地址為:http://radius.innercite.com,當前最新版本為0.17。包括icradius一共需要下載以下軟件:
icradius http://icradius.hislora.com.au/
perl http://www.perl.com
mysql http://www.mysql.com
Perl DBI http://www.mysql.com/downloads/contrib.html
mySQL DBD Modules http://www.mysql.com/downloads/contrib.html
perl的Authen::RADIUS模塊 http://www.mirror.ac.uk/sites/FTP.internat.freebsd.org/pub/FreeBSD/packages-4.1/All/p5-Authen-Radius-0.05.tgz[peek]
筆者是在內核版本2.2.14-5.0的Redhat6.2環境下,使用的icradius為0.17版;perl為redhat6.2自帶的5.005_03版;mysql下載的是rpm包形式發布的3.23.22-1的源代碼;perl DBI為1.13版;mySQL DBD Modules為1.2214版本。所有的軟件都為源代碼方式下載。
1、Mysql的安裝;
筆者使用的rpm包方式的源代碼,因此首先要解開rpm包:
[root@radiusd ideal]# rpm -ivh MySQL-3.23.22-1.src.rpm
MySQL ##################################################
然後:
[root@radiusd ideal]# cd /usr/src/redhat/SOURCES/
[root@radiusd SOURCES]# ls -al
total 6432
drwxr-xr-x 2 root root 4096 Oct 29 14:07 .
drwxr-xr-x 7 root root 4096 Oct 30 2000 ..
-rw-r--r-- 1 root root 6560696 Jul 30 11:23 mysql-3.23.22-beta.tar.gz
-rw-rw-r-- 1 root root 3082 Jul 30 11:23 mysql.gif
[root@radiusd SOURCES]# tar xvgz mysql-3.23.22-beta.tar.gz
解壓源代碼包,就會在當前目錄下生成mysql-3.23.22-beta的子目錄,其中包含了mysql的源代碼,然後使用下面的命令進行安裝:
筆者是在內核版本2.2.14-5.0的Redhat6.2環境下,使用的icradius為0.17版;perl為redhat6.2自帶的5.005_03版;mysql下載的是rpm包形式發布的3.23.22-1的源代碼;perl DBI為1.13版;mySQL DBD Modules為1.2214版本。所有的軟件都為源代碼方式下載。
1、Mysql的安裝;
筆者使用的rpm包方式的源代碼,因此首先要解開rpm包:
[root@radiusd ideal]# rpm -ivh MySQL-3.23.22-1.src.rpm
MySQL ##################################################
然後:
[root@radiusd ideal]# cd /usr/src/redhat/SOURCES/
[root@radiusd SOURCES]# ls -al
total 6432
drwxr-xr-x 2 root root 4096 Oct 29 14:07 .
drwxr-xr-x 7 root root 4096 Oct 30 2000 ..
-rw-r--r-- 1 root root 6560696 Jul 30 11:23 mysql-3.23.22-beta.tar.gz
-rw-rw-r-- 1 root root 3082 Jul 30 11:23 mysql.gif
[root@radiusd SOURCES]# tar xvgz mysql-3.23.22-beta.tar.gz
解壓源代碼包,就會在當前目錄下生成mysql-3.23.22-beta的子目錄,其中包含了mysql的源代碼,然後使用下面的命令進行安裝: