1. RADIUS简介
RADIUS的全称为Remote Authentication Dial-In User Service,是一种能够让服务器验证各种接入用户身份的协议,RADIUS可以对用户身份进行集中管理,安全性更好,策略也更灵活,同时还可以记录用户的网络使用情况用于网管分析或者计费,已经成为比较常用的工业标准。在使用中,路由器、交换机等设备在需要验证用户身份的时候,向RADIUS服务器发送请求,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登录名和密码”。
配置步骤截图如下所示: