本博文于2011-10-10更新
什么是FreeRADIUS?
RADIUS是Remote Access Dial In User Service的简称。
RADIUS主要用来提供认证(Authentication)机制,用来辨认使用者的身份与密码 –> 确认通过之后,经由授权 (Authorization)使用者登入网域使用相关资源 –> 并可提供计费(Accounting)机制,保存使用者的网络使用记录。
FreeRADIUS是一款OpenSource软件,基于RADIUS协议,实现RADIUS AAA(Authentication、Authorization、Accounting)功能。
1、安装openssl
2、安装mysql
安装完成后执行
启动mysql。
安装过程中一般会提示输入mysql的root密码,若没有的话,则直接mysql -p即可进入
然后执行
正确执行后退出检验一下密码
3、安装freeradius server
最新的freeradius的版本是2.1.12,下载地址:ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.12.tar.gz
下载后解压缩,进入解压缩后的目录:
安装完后,可以使用命令
进入radiusd服务器的调试模式,如果能进入则安装成功。一次不行可以尝试两次。
安装成功后freeradius的配置文件的路径是:usr/local/etc/raddb/
日志文件的路径是:usr/local/var/log
一般以上过程不会出问题,主要的问题在于配置。
4、配置过程
进入mysql后,执行:
来创建名为radius的数据库
exit退出数据库。
再进入usr/local/etc/raddb/sql/mysql下导入和建立表结构
建议不用单独给radius设置一个mysql账号跟密码,麻烦的要死,碰到权限问题神马的你就完蛋了
(注意,2.1.12版本的数据库文件是scheme.sql ,这跟其他版本不同,1.1.7版本之前的数据库文件是mysql.sql ,或者rlm_mysql.sql,而且存放路径不同,2以上的版本是放在/usr/local/etc/raddb/sql/mysql里面)
导入完成后,可以在用命令
可以看到如下的表结构
+------------------+
| Tables_in_radius |
+------------------+
| radacct |
| radcheck |
| radgroupcheck |
| radgroupreply |
| radpostauth |
| radreply |
| radusergroup |
+------------------+
MySQL中表结构的定义
针对FreeRadius2,数据表的设计和结构定义在下面的文件中:
/etc/raddb/sql/mysql/schema.sql 主数据库定义,7个表,包括
radcheck 用户检查信息表
radreply 用户回复信息表
radgroupcheck 用户组检查信息表
radgroupreply 用户组检查信息表
radusergroup 用户和组关系表
radacct 计费情况表
radpostauth 认证后处理信息,可以包括认证请求成功和拒绝的记录。
/etc/raddb/sql/mysql/nas.sql 网络设备定义,只有一个表
nas 网络设备表
下面的表用于一些扩展功能,可以按需导入。
ippool.sql ip池
wimax.sql wimax设备支持
cui.sql cui 支持
详细的表定义参见: http://wiki.freeradius.org/MySQL_DDL_script
修改usr/local/etc/raddb/site_enabled下的defoult文件(2.1.1与1.1.7不同,radius.conf被分成了几个部分,authorize 被放在了defoult文件下,请注意),把authorize{} 、accounting {}中的sql前面的#去掉,并把authorize{} 中的files前加#;文件部分如下:
修改与mysql数据库连接的配置文件/usr/local/etc/raddb/sql.conf,
修改客户端信息配置文件:/usr/local/etc/raddb/clients.conf
127.0.0.1是本机,可以测试用用;192.168.1.5是你的radius client的ip
修改radius的配置文件,在目录/usr/local/etc/raddb/radiusd.conf中
否则在radiusd -X总会报错加载模块
Failed to load module "sql".
错误,靠,堵了老子一天,网上几乎都没说,只有这位大哥说了
http://hi.baidu.com/yan__jh/blog/item/47b0341c0593ea71f724e4c3.html
同理,要是在debug时出现load module的任何相关错误,都要取消radiusd.conf中的那一行module的注释,否则不会加载。
还有别忘了,在对应模块那,要去编译安装一下,sql的目录是在安装目录/src/modules/rlm_sql/drivers/rlm_sql_mysql。其他模块也在差不多这个目录的一层中,注意找找。
在数据库中加入测试帐号
创建了一个用户,用户名密码都是“test”
若希望一个账号只允许一个用户登陆,需添加这行;不添加则一个账号可以多个用户同时登陆
有一些value是可以强制指定的,比如Framed-IP-Address属性,由于验证过程中,是先跟sql数据库比对属性值,然后在检查本地文件,若下面两个命令执行了的话,那么user里再指定Framed-IP-Address将无效
5、 测试radius
要重新开一个shell终端来执行下面的命令
若显示如下信息,则说明radius server安装没有问题
6、排错
如果接收到类似于这样的信息:rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=222, length=38。
可以到usr/local/var/log去查看freeradius的日志。在安装过程我就接收到这样的信息,百思不得其解,以为是安装出了问题,后来是查看日志,发现如下信息:
141 WARNING: Found User-Password == "...".
142 WARNING: Are you sure you don't mean Cleartext-Password?
143 WARNING: See "man rlm_pap" for more information.
144 rlm_sql: Failed to create the pair: Invalid octet string "Yes,Good!" for attribute name "Repley-Message"
145 rlm_sql (sql): Error getting data from database
146 [sql] SQL query error; rejecting user
147 rlm_sql (sql): Released sql socket id: 1
从而发现我在表radrepley中的数据记录内容是错误的,删除这条记录后,问题得到解决
出错
1、如果出现“rlm_sql (sql): Could not link driver rlm_sql_mysql: rlm_sql_mysql.so: cannot open shared object file: No such file or directory
”找不到驱动包的错误,就要
a:先安装mysql-devel
b:然后进入到freeradius的安装文件目录下的src/modules/rlm_sql/drivers/rlm_sql_mysql 运行命令:./configure --with-mysql-dir=/usr/share/mysql/ --with-mysql-lib-dir=/usr/lib/mysql/
c:make;make intall 这时候会把rlm_sql_mysql的驱动安装到/usr/local/lib目录下,但是必须把这些驱动copy到/usr/lib目录下才能正常运行:#cp -a /usr/local/lib/rlm_sql_mysql* /usr/lib
还有可能出现关于eap的错误,说什么server.pem证书读取失败,实际上server.pem证书根本没有.进到/usr/local/etc/raddb/certs/目录下.运行里面的bootstrap文件#./bootstrap 会自动创建证书.实在不明白,里面还有个README文件可做参考.