建立基于Linux的RADIUS服务器
一、引言
RADIUS是目前广泛使用的集中认证和记帐协议,本文介绍了在Linux服务器上安装和配置RADIUS服务器软件的过程,并使用MySQL数据库来存放用户信息。
二、RADIUS简介
RADIUS的全称为Remote Access Dail-In User Service,是对远程用户进行认证和记帐的一种协议,主要用在ISP处,可以集中对用户进行认证和记费。RFC2865、RFC2866定义了RADIUS的认证和记帐标准。通常用户访问NAS(Network Access Server)时,NAS会向RADIUS服务器发送认证请求,并传送用户名和口令给RADIUS服务器,RADIUS服务器要再询问用户数据库以核对用户名及口令,如果正确,就返回给NAS认证通过的信息。这时NAS再向RADIUS服务器发送记帐请求,并发送用户记帐信息,RADIUS服务器收到信息后存入用户数据库中。
三、获取软件
gnu-radius-0.96.4.tar.gz
http://ftp.gnu.org/gnu/radius/
注:需要系统上已安装有MySQL,如果没有请自行安装,这里就不介绍MySQL的安装和配置了。
四、编译安装
1、解压缩软件包
tar xzvf gnu-radius-0.96.4.tar.gz
2、配置编译选项
cd gnu-radius-0.96.4/
./configure --enable-yydebug --enable-pam --with-mysql --enable-nls
在这里我们选择编译时支持PAM和MySQL,缺省还会支持shadow password。请确认已安装了PAM和MySQL的开发支持包,否则配置程序无法正确完成。
3、编译安装
make
make check
make install
安装后执行文件在/usr/local/sbin和/usr/local/bin目录下,配置文件在/usr/local/etc/raddb目录下。
五、配置使用
1、生成数据库
这里我们使用已经装好的MySQL数据库,要为RADIUS生成MySQL的数据库和表。进入gnu-radius-0.96.4/db目录,编辑config.m4文件以符合你的环境的实际情况,内容如下:
define({server},{localhost})
define({port},{3306})
define({CREATOR},{root})
define({CREATOR_PASSWORD},{default})
define({DB_USER},radius)
define({DB_PWD},guessme)
这里定义了MySQL服务器在本地,端口是3306,MySQL管理帐号是root,口令是default,要创建的RADIUS数据库用户名为radius,口令为guessme。
编辑完后执行make mysql命令,就会自动生成名为RADIUS的MySQL的数据库了。数据库表结构见此目录下的mysql.struct文件。
2、配置RADIUS
RADIUS的配置文件都在/usr/local/etc/raddb目录下。我们主要修改几个文件就可以了。
/usr/local/etc/raddb/client.conf文件是本地客户端程序使用的,定义了与RADIUS服务器共享的key(foobar)和RADIUS服务器的端口(1812和1813),内容如下:
server local 127.0.0.1 foobar 1812 1813
source_ip 127.0.0.1
timeout 3
retry 1
/usr/loca/etc/raddb/clients文件定义了允许到RADIUS服务器认证的客户端的主机名或IP地址,还有共享的key,这里添加了一台Cisco 2600路由器的地址,我们要用它来测试。内容如下:
# This is a list of clients which are allowed to make authentication
# requests.
# Each record consists of two fields:
# i. Valid hostname.
# ii. The shared encryption key for this hostname.
#
#Client Name Key
#---------------- -------------------
localhost foobar
192.168.0.39 cisco
/usr/local/etc/raddb/sqlserver文件定义了RADIUS服务器访问MySQL数据库的信息,其中需要确认的内容:
interface mysql
server localhost
port 3306
login radius
password guessme
doauth yes
auth_db RADIUS
doacct yes
acct_db RADIUS
/usr/local/etc/raddb/users文件定义了认证用户的信息,这里指定了使用SQL数据库存放认证信息,并且使用DES或MD5的机制来加密口令,内容如下:
# This is the users database.
DEFAULT Auth-Type = Crypt-Local,
Password-Location = SQL
Service-Type = Framed-User,
Framed-Protocol = PPP
如果数据库中不希望存放加密的口令,可以使用“Auth-Type = Local”来设定。
以上文件都修改好后,就可以执行“/usr/local/sbin/radcrl start”命令来启动RADIUS服务器了,log信息可以看/var/log/radius.log文件。要停止RADIUS服务器,就执行“/usr/local/sbin/radcrl stop”命令。
3、本地测试
在测试前,我们先把用户信息加入数据库中:
mysql -u radius -pguessme RADIUS
>INSERT INTO passwd VALUES ('test', 'Framed-PPP', ENCRYPT('12345678', now()), 'Y');
>quit
因为我们要使用加密的口令,所以使用了MySQL的encrypt()函数。
接下来就使用命令“/usr/local/sbin/radauth -v test”来测试了,输入口令后,显示:
server 127.0.0.1:1812
send code 1 (RT_AUTHENTICATION_REQUEST)
send: User-Name = test
send: Password = 12345678
send: NAS-Port-Id = 0
recv code 2 (RT_AUTHENTICATION_ACK)
recv: Service-Type = Framed-User
recv: Framed-Protocol = PPP
expect 2
got 2
PASS
说明认证已经通过了。这时,我们可以看到数据库的calls表中没有任何记帐信息,因为radauth程序只是请求认证,没有要求RADIUS记帐。我们会在下面使用Cisco 2600路由器来进一步测试。
4、网络测试
我们使用一台Cisco 2600路由器作为Network Access Server(NAS)来实际测试RADIUS服务器。要求Cisco的串口使用PPP协议,对链路对端设备进行PAP认证,并向RADIUS服务器记帐。
Cisco上的配置如下:
!
aaa new-model
aaa authentication ppp test1 radius
aaa accounting network test2 start-stop radius
!
interface FastEthernet0/0
ip address 192.168.0.39 255.255.255.0
!
interface Serial1/1
ip address 10.0.0.2 255.255.255.0
no ip directed-broadcast
encapsulation ppp
ppp authentication pap test1
ppp accounting test2
!
radius-server host 192.168.0.250 auth-port 1812 acct-port 1813
radius-server key cisco
!
RADIUS服务器的IP地址是192.168.0.250,认证端口是1812,记帐端口是1813。Cisco以太口的IP地址是192.168.0.39,共享的key是cisco,和上面的clients文件中对应。
经测试RADIUS服务器工作正常,数据库的calls表中也记录了相应的记帐信息。
六、参考资料
http://www.gnu.org/software/radius/manual/
1 条评论:
你好 为什么 不加上Google提供的广告呢
加好后 通知我 帮你点击
互相帮助 谢谢
发表评论