2007年4月2日星期一

建立基于Linux的RADIUS服务器

建立基于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提供的广告呢

加好后 通知我 帮你点击

互相帮助 谢谢