2024年6月11日发(作者:)
建立Linux下的RADIUS服务器
远程认证拨号用户服务(Remote Authentication Dial In User Service,RADIUS)是在网络
访问服务器(Network Access Server,NAS)和集中存放认证信息的Radius服务器之间传输认
证、授权和配置信息的协议。其协议的标准定义在IETF的RFC 2865和RFC 2866文件中。
对于中小型企业NAS应用来说,以Linux为平台建立RADIUS服务器是非常好的选择。使
用共享软件完全可以建立简洁、高效的 RADIUS服务器,而且无须任何软件上的花费。
一、RADIUS的工作原理
RADIUS以Client/Server方式工作,实现了对远程电话拨号用户的身份认证、授权和计
费功能。其Client端多为通过拨号方式实现的 NAS,主要用来将用户信息传递给服务器;
RADIUS服务器则对用户进行认证,并返回用户的配置信息。为了保证传输的安全性,在
Client和 Server之间传送的数据均以MD5方式加密。在RADIUS的Server端和Client端之
间的通信主要有两种情况;一种是接入认证;另一种是计费请求。
使用RADIUS可以实现集中化的认证和记费功能,可以减少管理的负担和费用,同时
还可以实现很多扩展的功能,如用户拨号时间的限定、用户拨号时间的配额、根据用户分配
特定IP地址等等。RADIUS是一种基于UDP协议的上层协议,认证服务的监听端口号为
1812,记费服务的监听端口号为1813。 RADIUS的工作流程是:(1)用户拨入NAS; (2)
NAS向RADIUS服务器发送一系列加密的“属性/值”; (3)RADIUS服务器检查用户是否
存在、属性/值是否匹配;(4)RADIUS服务器发送回“接受“或“拒绝“给NAS。
RADIUS服务器通常是基于数据库来实现的。对于大型ISP,通常会使用诸如Oracle之
类的大型后台数据库。而对于中小型应用使用mySQL这样的数据库就足够了。其实RADIUS
的身份验证也可以通过LDAP来实现,但其应用不如数据库那么广泛。
这里介绍一种使用IC-RADIUS与mySQL配合建立RADIUS服务器的方案。并分别介
绍了使用Cisco2610+Modem Pool作为NAS和使用Linux作为NAS的配置实例。
二、RADIUS服务器的建立
首先安装配置好Linux的基本系统,注意需要安装开发工具、Perl、Perl DBI和mySQL
DBD模块,当然还必须安装mySQL数据库。这里我们假设把数据库和RADIUS服务放在
同一台服务器上。现在几乎每个Linux发行版本里都包含 mySQL,所以可以直接安装到系
统里。具体步骤如下。
1.安装和配置ICRADIUS
(1)输入以下命令
#tar xvfz
#cd icradius-0.18.1/src
然后拷贝针对Linux的Make文件为Makefile,命令如下:
cp Makefile
这里需要注意的是有可能需要修改Makefile文件,把mySQL库、头文件的位置根据实
际安装的情况加以修改。对于可执行文件的安装位置也可以修改。
(2)运行如下命令
#make
#make install
2.创建RADIUS数据库
(1)连接mysql数据库,命令如下
#mysql -u root -pyourpassword
>CREATE DATABASE radius; ### 创建radius数据库
然后需要创建RADIUS数据库需要的各个表格,这里要使用icradius-0.18.1目录下script
子目录中的文件,该文件已经定义了所需要的各个表格,这里只要使用命令
#mysql -u root -pyourpassword radius <
即可。这时就创建了Radius认证和计费所需要的各个表格,见附表1。
3.填充各个表格
向上面创建的各个数据库的表中添加内容。对于dictionary表的内容,icradius软件提供了一
个脚本文件script/来创建,步骤如下。
(1)编辑该文件,修改
my $dbusername =root;
my $dbpassword = yourpassword;
为对应的数据库管理员的用户名和密码。
(2)运行该脚本,命令如下:
#./ ../raddb/dictionary
如果使用Cisco路由器,还需要加载Cisco的dictionary文件,命令如下:
# ./ ../raddb/
(3)向nas表格中添加内容,先进入mysql:
# mysql -u root -pyourpassword radius
执行SQL语言命令如下:
insert into nas
values (0,"cisco nas","nas","10.60.39.250","cisco",32,"cisco","public","on");
其中各字段的意义见附表2。
(4)srcipts目录下的是一个实现Web界面管理用户及记费信息的CGI程序,但
是要在使用该脚本程序以前,首先要在radcheck表格中添加如下内容:
INSERT INTO radcheck VALUES ("","admin","Password","adminpassword");
INSERT INTO radcheck VALUES ("","admin","Radius-Operator","Yes");
这里,admin为RADIUS管理员的用户名,adminpassword为管理员的密码。
(5)将和拷贝到Web服务器的cgi-bin目录下,再编辑这两个文件,正
确的设定数据库管理员的用户名和密码。最后指定两个文件中的$cookiedomain及$radhost
为空。两个文件中的$radsecret指定为NAS和RADIUS共享的密码。
4.配置启动radiusd
(1)在/etc/目录下创建子目录raddb
# mkdir /etc/raddb
(2)在该目录下创建文件client,并设定其访问权限:
# touch clients
# chmod 664 clients
(3)把icradius-0.18.1/raddb /目录下的拷贝到/etc/raddb目录下:
#cp ~/icradius-0.18.1/raddb/ /etc/raddb/
(4)把~/icradius-0.18.1/raddb/中的所有文件拷贝到/etc/raddb目录中。
其中在~/icradius-0.18.1/redhat/目录下有一个名为d-redhat的文件,它是redhat环境
下radiusd的启动文件,将其拷贝到/etc/rc.d/init.d目录下:
# cp ~/icradius-0.18.1/redhat/d-redhat /etc/rc.d/init.d/d
(5)编辑文件/etc/raddb/文件,password后面修改为mysql的管理员密码。
(6)编辑文件/etc/rc.d/init.d/,把如下内容:
RADIUSD=/usr/sbin/radiusd
WATCHER=/usr/sbin/radwatch修改为(缺省安装时)
RADIUSD=/usr/local/sbin/radiusd
WATCHER=/usr/local/sbin/radwatch
(7)拷贝~/icradius-0.18.1/scripts目录下的radwatch到/usr/local/sbin目录下。拷贝
~/icradius-0.18.1/scripts目录下的到/etc//目录下。拷贝
~/icradius-0.18.1/scripts目录下的y到/etc//目录下。
(8)启动radiusd,命令如下
/etc/rc.d/init/d start
5.添加用户
在浏览器里输入radiusserver/cgi-bin/进入管理界面,在这里输入RADIUS管
理员的用户名和密码。
(1)创建一个组,该组具有所有用户都应该具有的特性,为该组起一个名字。
(2)进入组属性设置界面,在“reply item”中设置最基本的属性,命令如下:
Framed-Protocol PPP
Service-Type Framed-User
(3)添加用户,为该用户组起一个名字:aaa,并设定该用户的密码。
(4)进入了用户属性设置界面,选择“add to group“*”all_user组”*“确定”,就可以看
到,该用户如下“reply item”:
Framed-Protocol PPP
Service-Type Framed-User
(5)如果需要设置该用户的时间限制,则需要输入时间限制的数字,注意时间单位为秒),
因此一小时的时间限制对应的“Total-Time-Limte”属性值为3600。
(6如果需要是设置回拨,在“reply item”中选择“Cisco-AVPair lcp:callback-dialstring=1234567
(回拨的电话号码)”。对于“check item”和“reply item”根据不同的NAS设备类型有非常
多的可选项,其功能也非常丰富。
三、拨号服务器的设置
通过上面的步骤,RADIUS服务器基本建立完毕了。为了让拨号服务器使用RADIUS作为
拨号用户的身份验证方式,必须在拨号服务器上作相应的设置。在本文讨论的实例中使用了
Cisco 2610路由器作为拨号服务器,在配备了16端口的异步串口模块后,可以允许16个用
户同时拨入。在Cisco 2610上完成拨号基本配置可以正常工作后,需要加入如下语句来使用
RADIUS作身份认证和记账。
„
aaa new-model #激活AAA(authentication、authorization、accounting)访问控制
aaa authentication login default line enable #进行login认证,若RADIUS Server未找到从本地
数据库内查找
aaa authentication ppp default radius local #进行PPP认证,若RADIUS Server未找到从本地数
据库内查找
aaa authorization exec default radius none #由RADIUS服务器授权运行EXEC模式
aaa authorization network default radius local #先由RADIUS服务器授权与网络相关的服务请
求。
aaa accounting network default start-stop radius #定义使用RADIUS作为使用时间的记账
„
„
radius-server host 10.65.65.19 auth-port 1812 acct-port 1813 #设置RADIUS服务器IP地址、验
证和记账端口
radius-server key cisco #定义RADIUS服务器和NAS之间共享的密码
„
!
对于小型应用,使用Linux作拨号服务器的同时,也可以使用RADIUS作身份认证和记费,
这需要安装。后面的步骤如下。
(1)必须已经配置好拨号服务器PPP Server,使其能够正常工作,修改
/etc/mgetty+sendfax/文件,去掉下面一行的注释符号:
/AutoPPP/ - a_ppp /usr/sbin/pppd-radius
此行的目的是实现基于RADIUS的PAP验证,使通过Windows 95/98的拨号用户不需弹出
终端窗口,直接在拨号窗口中输入用户ID和口令即可进入
(2)修改/etc/options文件,需要去掉idle 600等配置项,因为pppd-radius这个脚本不支持
这些参数。在配置文件中添加参数radius和radacct,这两项是告诉pppd-radius要用RADIUS
进行验证。
(3)修改/etc/radiusclient/文件,具体如下:
auth_order radius,local #验证顺序
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/radiusclient/issue
authserver 10.65.65.19 #RADIUS Server的地址,可以是localhost
acctserver 10.65.65.19 clients/etc/raddb/clients #作为client的一些配置
login_radius /usr/sbin/
seqfile /var/run/
mapfile /etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
port_pool /etc/radiusclient/modem-pool
(4)修改/etc/raddb/clients文件,具体内容如下:
(5)在对应Client Name处写入Radius Server的IP地址,也就是在
/etc/radiusclient/文件中定义的authserver和acctserver的地址,在对应Key
处应加上保密字。


发布评论