RADIUS服务器在Linux上的搭建

1. RADIUS简介

RADIUS的全称为Remote Authentication Dial-In User Service,是一种能够让服务器验证各种接入用户身份的协议,RADIUS可以对用户身份进行集中管理,安全性更好,策略也更灵活,同时还可以记录用户的网络使用情况用于网管分析或者计费,已经成为比较常用的工业标准。在使用中,路由器、交换机等设备在需要验证用户身份的时候,向RADIUS服务器发送请求,RADIUS服务器则返回用户的相关信息,交给路由器、交换机等设备处理。

Drawing_Roaming_RADIUS

在本文中,我们将基于Ubuntu(Linux的一个比较流行的发行版本),以FreeRADIUS+MySQL+OpenSSL搭建一个RADIUS服务器,其认证方式是PEAPv0/EAP-MSCHAPv2。

本文中所用的Linux及软件的版本如下:

OS:Ubuntu 8.04 (Linux Kernel 2.6.24-21)

FreeRADIUS:FreeRADIUS 1.1.7

FreeRADIUS-MySQL:FreeRADIUS-MySQL 1.1.7

MySQL:MySQL 5.0.51a

OpenSSL:OpenSSL 0.9.8g (操作系统自带)

2. 安装RADIUS

安装完Ubuntu8.04后,首先更新管理器,在终端输入如下命令:

sudo apt-get update

sudo apt-get dist-upgrade

安装基本的编译环境,命令如下:

sudo apt-get install build-essential autoconf automake1.9 cvs subversion

apt-get install dpkg-dev

安装MySQL,命令如下:

sudo apt-get install mysql-server mysql-client

#安装过程中按提示设定管理MySQL数据库的密码(如123456)

安装FreeRADIUS:

从FreeRADIUS的官方网站http://freeradius.org下载FreeRADIUS 1.1.7。然后在终端输入如下命令:

tar zxvf freeradius-1.1.7.tar.gz

cd freeradius-1.1.7

fakeroot dpkg-buildpackage -b –uc

#提示缺少什么包就通过 apt-get install 安装什么包

cd ..

dpkg -i freeradius_1.1.7-0_i386.deb freeradius-mysql_1.1.7-0_i386.deb

3. 配置FreeRADIUS

修改配置文件:/etc/freeradius/radiusd.conf(注意如果在文件末尾修改的话,后面的值不会覆盖前面的值,所以要直接在原位置上修改),需更改的几个log项:

log_auth = yes

log_auth_badpass = yes

log_auth_goodpass = yes

适当延长发送认证失败消息之前的暂停秒数,防止暴破,默认为1秒。

reject_delay = 5

把authorize、accounting、session、post-auth几个部分中sql一句前的注释取消掉,启用MySQL认证。

修改配置文件:/etc/freeradius/clients.conf,设置允许使用radius服务的设备,一般是AP的IP地址,secret是AP连接radius的密码,在配置文件最后添加如下语句:

client 192.168.0.0/24 {     secret = testing123     shortname = dlink     nastype = other }

修改配置文件:/etc/freeradius/eap.conf,将tls,ttls,peap三段的注释全部取消,这是启用PEAP的关键。

修改配置文件:/etc/freeradius/users,修改users文件中的如下内容:

#DEFAULT Auth-Type = System

#Fall-Through = 1

修改配置文件:/etc/freeradius/sql.conf,设置与MySQL相关的信息:

server = "localhost"

login = "radius"

password = "radius"

4. 配置MySQL

先建库和用户,命令如下:

mysql -u root –p123456

…………

mysql> create database radius;

mysql> GRANT ALL PRIVILEGES ON radius.* to radius@localhost IDENTIFIED BY ‘radius’;

mysql> FLUSH PRIVILEGES;

mysql> exit;

创建radius相关的表和初始数据:

将/usr/share/doc/freeradius/examples/mysql.sql.gz解压,将解压后的mysql.sql导入radius数据库,命令如下:

cd /usr/share/doc/freeradius/examples/

mysql -u radius -pradius radius <./mysql.sql

表结构创建好之后,就可以创建使用者账号了,默认是存储在radcheck表中的,可以使用这样的命令和sql语句:

mysql -u radius -pradius radius

mysql> insert into radcheck (username,attribute,op,value) values (‘test’, ‘User-Password’, ‘:=’, ‘test’);

…………

mysql> select * from radcheck

+-+-----------+-----------------+--+-----+

|id|UserName|Attriubute   |op |Value|

+-+-----------+-----------------+--+-----+

| 1|test     |User-Password|:= |test  |

+-+-----------+-----------------+--+-----+

现在重启freeradius服务,可以简单测试一下(test1/test1是错误的用户名/密码,testing123是默认在clients.conf中定义的本机用户的secret),在终端输入如下命令:

radtest test1 test1 localhost 0 testing123

Sending Access-Request of id 5 to 127.0.0.1 port 1812        

User-Name = "test1"        

User-Password = "test1"        

NAS-IP-Address = 255.255.255.255        

NAS-Port = 0

Re-sending Access-Request of id 5 to 127.0.0.1 port 1812        

User-Name = "test1"        

User-Password = "test1"        

NAS-IP-Address = 255.255.255.255        

NAS-Port = 0

rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=5, length=20

可以看到服务器接收到了请求,并返回了用户名/密码=test1/test1的reject信息。

5. 无线AP的设置

主要设置项如下:

Secrity Mode: WPA2

Clipher Type: AES(比TKIP方式更加安全)

RADIUS Server IP/Secret: RADIUS服务器所在的IP以及在“clients.conf”中设置的对应的“secret”。

6. 客户端设置

无线网络连接属性->无线网络配置Tab页->首选网络(属性)->关联Tab页,网络验证:WPA2,数据加密:AES;

然后在“验证”Tab页,EAP类型:受保护的EAP(PEAP),在属性中,不选“验证服务器证书”,选择“启用快速重新连接”,验证方法:安全密码(EAP-MSCHAP v2),并在“配置”中不选择“自动使用windows登录名和密码”。

配置步骤截图如下所示:

Client_Config-Step1

Client_Config-Step2

Client_Config-Step3

Client_Config-Step4

Client_Config-Step5

Client_Config-Step6 登录的时候,状态栏上会弹出提示用户更换凭证的小图标,其实就是提示用户输入用户名/密码(如test/test)。

Client_Config-Step7