yongzai 2009-05-09
不需要使用昂贵的专业系统,采用PC服务器和Linux系统的Freeradius+MySQL就能可靠地实现RADIUS认证服务器。
RADIUS认证服务器(Remote Authentication Dial In User Service,远程用户拨号认证系统)是目前应用最广泛的AAA协议(AAA=authentication、Authorization、Accounting,即认证、授权、计费)。随着网络安全需求提高,中小企业的局域网集中用户认证,特别是使用VPDN专网的也逐渐需要建立自己的认证服务器以管理拨号用户。但这些用户不需要使用昂贵的专业系统,采用PC服务器和Linux系统的Freeradius+MySQL就能可靠地实现。
● Freeradius的安装
笔者采用FC4 for x86_64系统上的freeradius-1.1.2,在中档PC服务器上运行,系统运行稳定可靠。Linux FC4自带Freeradius和MySQL,不过实测不理想。FC4 MySQL对中文支持不好,而freeradius则仅支持其自带MySQL。所以,在编译MySQL时要加入选项“--with-charset=gb2312”以支持中文字符编码。编译Freeradius时可使用缺省选项。在64位Linux系统上编译前配置时需要加入选项“—with-snmp=no”,因为与库文件snmp相关的库对64位支持有问题(最新的FC7也许没有这些问题)。Freeradius提供了MySQL建库脚本——db-MySQL.sql,不过建nas库有1个语法错误,将“id int(10) DEFAULT‘0’; ”中的“DEFAULT ‘0’”去掉即可正常建立Radius库。
● Freeradius的设置
用户数量较少的情况下可使用Freeradius缺省的users文件配置用户,根据文件制定的规则工作。安装完毕后启动Radius服务: /usr/local/sbin/radiusd-X。本机运行radtest test test localhost 0 testing123发认证请求,得到回应表示Radius服务器工作正常。
Radius服务器缺省使用/usr/local/etc/raddb/users文件认证,简单易行。但如果管理几十个或更多用户,则应使用数据库,对于用户数少于一万的情况而言,MySQL是合适的选择。
● MySQL认证的设置
在配置文件radiusd.conf中,在authorize{}和accountingt{}设置中去掉sql前注释符。在sql.conf中设置MySQL的连接信息、用户/密码和地址、本机用localhost即可。还需要在users中对DEFAULT用户做如下设置: Auth-Type = Local,Fall-Through = 1。这样,才可正确使用MySQL进行认证。
在MySQL中设置用户的规则与users文件用户设置有对应关系。Radius认证是以Attribute = Value的形式提供认证和应答消息。在users文件中,与用户名位于同一行,以“,”分隔的各个属性是认证请求必须提供而且需要验证的属性。
实际使用时,往往使用username@domain形式用户进行认证。用文件方式时,可以通过设置剥离域名,只建立username认证即可。需要在radiusd.conf中加入一项realm domain { format=suffix… }域说明,并在proxy.conf中realm DEFAULT使用LOCAL认证。用MySQL认证时,缺省的sql.conf中使用带域名的全名进行认证。
freeradius的配置见前面的文章; global_defs { router_id LVS_DEVEL_TEST }. vrrp_sync_group LVS_RA { group { VI_1