分类: 网络与安全
2010-01-21 20:54:35
企业在进行VPN组网时,不可避免地要面对用户认证的问题,这是网络安全的重要组成部分。如何利用开源Freeradius程序,在Linux系统下实现具有固定IP分配和线路自动绑定功能的认证服务器?
开发认证服务器提高组网安全性
■ 广西福利彩票发行中心 林岗
Freeradius系统的安装使用
FreeRdius源程序可从官方网站下载获得。使用较新的freeradius-server-2.1.4版 本,复制源程序到安装了Linux系统的PC服务器上,编译时需要先安装OpenSSL。编译安装过程很简单,按照文档执行 Configure;make;make install就可完成。
对于企业VPN应用,需要认证的发起者通常是担当LNS(L2TP Network Server L2TP)的路由器。如果只有少数几个用户,或者在所有用户使用相同账号的情况下,可在路由器本地认证。不过这种情况一般不能满足一般企业有成百上千用户 且要求每用户具有单独账号的需求。这种情况下,必须使用认证服务器,对所有用户进行认证。
MySQL数据库
实现认证固定IP分配
FreeRadius可用于对大量用户账号进行认证,支持多种认证手段,常用的两种是文件认证和数据库认证。在用 户数量较少的情况下,可在users文件中添加相应条目实现,改变users需要重起认证服务器,故只适合少量固定用户一般调测时使用。对于大量的、动态 变化的用户认证,数据库认证方式是最佳手段。
FreeRadius支持4种数据库,msSQL、MySQL、oracle、postgreSQL。系统已预设 这些数据库的连接和查询语句,安装时缺省为支持MySQL数据库。用开源的MySQL5.1Community即可以可靠快速地支持100000以上级别 用户认证。
系统缺省不支持SQL认证。要在配置文件./etc/raddb/sites-enable/default中去 掉authorize {}中SQL的注释。由于不同用户认证请求和响应有很多相同部分,为减少认证时查找数据库的时间,减少认证相应时间,应使用用户分组方式。组认证相应表中 内容为对组内所有用户相同的内容,认证响应表内容为对每个用户不同内容,认证相应相关表内容设置如下:
radusergroup:为每个用户定义所属组。
radgroupcheck:同组用户检查内容,如防止账号重用。
radgroupreply: 组应答内容,如MTU, 帧格式等。
radcheck: 用户检查内容,如用户/密码,主叫号码等。
radreply:每用户的应答。典型为绑定IP应用时分配的IP。
为了实现固定IP分配,在radreply表为每个用户增加Framed-IP-Address:=‘IP地址’,认证成功后即可获得固定分配的IP地址。
既然实现每用户使用单独账号,就不希望同一账号被多次使用,即要求禁止账号重用。实现方法是在 radusergroup加入Simultaneous-Use:=1。系统缺省使用radutmp文件记录已登录账号,确保一个账号同时只有一个登录会 话。文档说明采用sql方式检查账号重用比radutmp文件快很多,故采用sql方式,并在etc/raddb/sites-enabled /default session {}注释radutmp,去掉sql注释,在etc/raddb/sql/mysql/dialup.conf中去掉simul_count_query 的注释。启用禁止账号重用功能可防止账号重复使用,不过可能因网络等原因丢失,形成挂断信号系统不能清除账号占用标志,即已断线的账号 acctstoptime IS NULL仍为真,从而使断线后重拨长时间失败,形成“吊死”现象。所以需要认证管理系统有清除标志的功能,通过人工或自动判断机制解决吊死问题。
自动线路
绑定技术实现
由于企业广域网一般分散分布,需要物理绑定技术防止账号被盗用。绑定对象应该是与拨号终端或其接入设备有关内容。 对于窄带VPDN拨号网络来说,绑定对象当然就是CallingStatonID,即电话号码。对于宽带ADSL来说,情况比较复杂。采用 CallingStatonID是与拨号终端MAC地址有关的值,更换网卡就涉及绑定对象改变,不是很合适。采用CalledStatonID是与接入端 口有关的值,比较合适。遗憾的是接入设备种类较多的情况下,一部分线路拨号时不能提供CalledStatonID/CallingStatonID数 据,从而对一部分用户线路无法绑定。一种实现方法是用接入设备的接入端口NasPortId,不过这仅适用于第一次认证的情况,二次认证时,采用动态的虚 拟接口端口,无法实现绑定。
在广域网应用下,人工搜集设定绑定项目是不可行的,且通信运营商更改接入设备导致绑定对象改变,会导致认证失败。所以需要采取自动绑定技术,初始设置为非线路绑定状态,系统自动记录非绑定状态下第一次成功拨号时的线路绑定信息,作为认证线路绑定检查条件。
设CalledStatonID为选定的绑定对象,要实现自动绑定,需要以下步骤:
(1) 加入线路绑定信息;
(2)设置自动绑定;
(3)开发解线路绑定功能: 该功能用于修改线路接入端口或账号已在其他线路拨号测试产生已有线路绑定信息与系统登记内容不符导致认证失败的情况。
以上通过改变原系统的postauth_query功能实现线路自动绑定。如果需要保留原系统的postauth_query功能,则需要修改源程序,在认证流程中增加新的查询语句,实现自动绑定。
用修改源程序方法可在保留原系统功能条件下高效率实现线路自动绑定功能。
认证服务器管理
系统和jRadius
添加一个用户,需要同步更新几个表,人工更改数据库操作麻烦而且易出错,对于固定IP地址分配功能,也需要IP池管理系统为不同用户分配不同IP。要开发使用的认证服务器应用,必须要开发认证服务器管理系统。
管理系统主要是通过数据库操作方便认证用户的添加、删除、查看、解除绑定、清除吊死用户、分配IP等功能。用JSP开发Web界面的认证管理系统是可行的选择,JSP处理数据库操作部分是成熟的应用。
认证管理的一个重要功能是用户账号测试。可利用开源软件jRadius实现,省去Radius协议编程的麻烦。
jRadius提供的TestRadiusClient类中是java应用程序,调用 basicAuthenticate和 advAuthenticate两个程序进行认证过程。为了在JSP web应用中使认证,需要参照TestRadiusClient源程序编写自己的javabean类,调用 basicAuthenticate,advAuthenticate进行认证。basicAuthenticate,advAuthenticate两 个程序使用直接从终端读取测试属性值的方法,并不适用于JSP web应用,需要改写为从网页或系统数据库中读取认证请求的属性值,如用户名、密码、绑定信息等。
利用开源软件Freeradius、jRadius、MySQL等,可开发功能与商用Radius认证服务器相比美的认证服务系统,很大程度上提高了中小企业组建VPN网络的水平,降低了组网成本。