采用Linux系统的Freeradius+MySQL实现RADIUS认证服务器

不需要使用昂贵的专业系统,采用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中使用带域名的全名进行认证。

最后,打开防火墙是必要的。缺省Radius认证服务器使用UDP 1812端口认证,UDP1813端口计费,应该开放UDP包的进出。

● CISCO路由器的设置

CISCO路由器是经典的RADIUS客户端,在VPDN拨号系统中LNS作为二次认证客户端。在clients.conf中定义客户端IP地址和共享密钥。对单网口的低级路由器来说,客户端的IP地址就是网口IP。对于中高级路由器来说,路由器缺省使用第一个网口IP作为客户端源IP,如果是不可路由的内网地址,则客户端无法收到认证应答包。要指定IP,使用如下语句:
ip radius source-interface FastEthernet0/1

其中FastEthernet0/1的IP指定作为认证客户端的源地址。一般做法是在VPDN-GROUP定义中使用source-ip 语句指定IP,不过重启路由器后必须重新设置RADIUS服务器才能生效。

另一个关于CISCO的设置是使用多个认证服务器。中高档路由器通常可支持不同的拨号接入。不同拨号接入使用不同的认证服务器。CISCO中使用不同的server-group实现。

aaa authorization network aaa-radius1 start-stop group radius1

aaa authorization network aaa-radius2 start-stop group radius2

也可根据需要定义authentication/accounting使用的server-group。

● 用户物理绑定的实现

实现用户物理绑定,特定用户只能在特定的电话号码或端口号上发起连接才能认证成功,可以大大提高认证安全性。在窄带系统中,LAC在拨入接入服务器LAC进行一次认证时,就向RADIUS服务器提供主叫号码,二次认证时该属性就被提交给RADIUS服务器。如电话号码为1234567,用户拨号,请求中包含属性Calling-Station-Id = "1234567"。为了实现主叫号码绑定,首先在radiusd.conf配置文件中起用对主叫号码的检查,即checkval {}中的内容。在使用users文件认证时,在用户名定义的同一行内加入Calling-Station-Id = "1234567"即可。使用MySQL认证时,在radcheck表中加入“Calling-Station-Id,”+=”,”1234567””这条记录即可。

对于ADSL宽带来说,不能使用电话号码绑定。不同宽带设备可提供不同的绑定方式。其实现要点也是必须在发出认证请求中包含其物理端口或其他物理信息,Radius服务器在字典定义该属性,在users文件或MySQL中加入约束值即可。

发表评论