分享
 
 
 

使用Linux做Radius服务器实现对3comRAS1500认证计费

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

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的源代码,然后使用下面的命令进行安装:

./configure

make

make install

scripts/mysql_install_db

就实现了Mysql数据库服务器安装,其中启动mysql服务器的命令为:

/usr/local/mysql/bin/safe_mysqld &

现在就实现了mysql数据库服务器的安装和运行,下面我们应当设立基本的用户权限信息。缺省的,mysql拥有一个缺省的具有对数据库完全访问可控制的用户,名字为root,所以首先应当为该用户添加访问密码:

[root@radiusd src]# mysql -u root mysql

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 183 to server version: 3.23.22-beta

Type help for help.

mysql>

这样就进入了mysql服务器的客户程序,然后发出sql语句命令:

UPDATE user SET Password = PASSWORD ( ew_password) WHERE user = oot;

FLUSH PRIVILEGES;

这里的new_password是为mysql的root用户设立的密码。但是一般推荐再创建一个权限和root完全相同的用户,命令如下:

INSERT INTO user

VALUES (host,user,passwd,

y,y,y,y,y,y,y,y,y,y,y,y,y,y);

一般,mysql与icradius服务器都是运行在同一个服务器上,这时候,host为localhost,若你的icradius服务器运行在另外一台服务器上,则你需要在这里设定host为你的icradius服务器的名字。用户为你设定的用户名,密码为该用户的密码。

2、perl DBI的安装

perl DBI的安装非常简单,只要解开压缩包:tar xvfz DBI-1.13.tar.gz,然后进入解开得到的子目录以后,发出如下的命令:

perl Makefile.PL

make

make test

make test TEST_VERBOSE=1 (若上一步出现了问题时,才使用该命令)

make install (只有在前面的测试通过以后才能发出该命令)

3、mySQL DBD Modules的安装

perl DBI的安装非常简单,只要解开压缩包:tar xvfz Msql-Mysql-modules-1.2214.tar

.gz 。然后进入解开得到的子目录以后,发出如下的命令:

perl Makefile.PL(会被询问以下问题:

[root@radiusd Msql-Mysql-modules-1.2214]# perl Makefile.PL

Which drivers do you want to install?

1) MySQL only

2) mSQL only (either of mSQL 1 or mSQL 2)

3) MySQL and mSQL (either of mSQL 1 or mSQL 2)

4) mSQL 1 and mSQL 2

5) MySQL, mSQL 1 and mSQL 2

Enter the appropriate number: [3] 1

### 在我们这里的需求,应该回答1

Do you want to install the MysqlPerl emulation? You might keep your old

Mysql module (to be distinguished from DBD::mysql!) if you are concerned

about compatibility to existing applications! [n] n 这里回答n

Where is your MySQL installed? Please tell me the directory that

contains the subdir include. [/usr/local]

### 这是缺省的mysql安装目录,如果你按照上面的方式安装,则mysql自动被安装到这个目录下,则这里直接回车即可

Which database should I use for testing the MySQL drivers? [test] 直接回车即可

On which host is database test running (hostname, ip address

or host:port) [localhost]

### 若mysql服务器和icradius服务器安装在同一个服务器上 则这里直接回车即可

User name for connecting to database test? [undef] root

### 这里输入root

Password for connecting to database test? [undef] passwd

### 这里输入mysql的root用户的密码

make

make test

make install

4、perl的Authen::RADIUS模块的安装

首先,解压软件包 tar xvfz p5-Authen-Radius-0.05.tgz,则会在当前目录下生成文件+COMMENT、+CONTENTS、+DESC及+MTREE_DIRS和目录lib。然后创建目录:

mkdir /usr/lib/perl5/5.00503/Authen/

然后拷贝该perl模块到创建的目录下:

cp lib/perl5/site_perl/5.005/Authen/Radius.pm /usr/lib/perl5

/5.00503/Authen/

即可。

三、Icradius的安装配置

1、解压编译软件包:

tar xvfz icradius-0.17.tar.gz

cd icradius-0.17/src

然后拷贝针对linux的Make文件Makefile.lnx为Makefile:

cp Makefile.lnx Makefile

然后运行:

make

make install

2、创建radius数据库

首先需要创建数据库raidus

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有