chap-secrets文件来静态地保存用户名和密码,这样我们没有办法知道各个用户连接VPN的时间,上传下载的数据量等信息,所谓用户跟踪管理完全就是一笔糊涂账。我们将目光转向一种更加高级的用户验证手段——RADIUS服务,用它就能实现完善的用户跟踪管理功能。本文以CentOS 5.5操作系统上的PoPToP VPN服务为例讲述配置FreeRADIUS服务,使用MySQL数据库管理用户验证信息,安装Web管理界面daloRADIUS的方法,其他VPN例如L2TP、OpenVPN等类似。本文内容参考了诸多资料,恕不一一列出。
前置条件
首先要保证使用chap-secrets验证的PPTP服务能够正常使用。关于配置简单PPTP VPN的方法不在本文的范围之内,请参考这篇文章或其他相关教程。其次,你需要在服务器上安装好HTTP+PHP+MySQL环境,本例中使用Apache作为HTTP服务器。此外PHP需要安装PEAR。
科普时间
PPP:Point-to-Point Protocol,点对点协议,是工作在数据链路层的连接协议。常见的ADSL连接时使用的PPPoE便是指的以太网上的点对点协议(Point-to-Point Protocol over Ethernet)。而我们创建连接VPN时也会通过PPP来进行,*nix操作系统上的pppd能够完成这一任务,其进行用户验证的默认方法便是chap-secrets文件。配置完FreeRADIUS后,我们需要把用户验证这一环节交给RADIUS服务器来完成。RADIUS:Remote Authentication Dial In User Service,远程用户拨号验证服务,基于RFC2865和RFC2866。具体的工作原理挺复杂的,仔细阅读这两个RFC标准应该可以搞明白。简单的说,它是一个兼顾验证(authentication)、授权(authorization)及记账(accounting)三种服务的协议,即AAA协议。RADIUS运行在应用层,使用UDP进行传输,它被广泛用于ISP和企业用来控制Internet或内部网络、无线网络的访问。
daloRADIUS:是一个FreeRADIUS的Web挂历程序,使用PHP编写。
安装配置流程
配置FreeRADIUS
1. 登入终端后,首先安装FreeRAIUS,一般源里两个版本,其中FreeRADIUS 1.x已经不被支持了,我们安装的是freeradius2。yum install freeradius2 freeradius2-mysql freeradius2-utils |
/etc/raddb/users,在文件开头加上:testing Cleartext-Password := "password"。Tips:你需要了解如何使用SSH终端,和终端里文本编辑的方法,例如Vim的使用。3. 启动radiusd,第一次启动会生成密钥,稍等片刻即可。使用
-X参数可以让调试信息直接输出屏幕:radiusd -X |
radtest testing password 127.0.0.1 0 testing123 |
/etc/raddb/clients.conf,将client localhost段下的ipaddr改为服务器的IP,而不是127.0.0.1。测试连接成功后,我们可以把
users里临时加上去的第一行删除。5. 下载ppp源码,因为要用到其中的配置文件:
1
2
3
| wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.5.tar.gztar zxvf ppp-2.4.5.tar.gzcp -R /root/ppp-2.4.5/pppd/plugins/radius/etc/ /usr/local/etc/radiusclient |
/usr/local/etc/radiusclient/servers,加上一组服务器和密钥,本例中为“MyVPN”:
1
| localhost MyVPN |
/usr/local/etc/radiusclient/dictionary,将最后一行改为:INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft可以再添加一行:INCLUDE /usr/local/etc/radiusclient/dictionary.merit8. 编辑
/etc/raddb/clients.conf,把client localhost段下的secret改成刚才指定的密钥。9. 编辑
/etc/raddb/radiusd.conf,找到$INCLUDE sql.conf,去掉前面的#;找到$INCLUDE sql/mysql/counter.conf,去掉前面的#。10. 添加MySQL用户及数据库,你可以使用现成的phpMyAdmin等工具,也可以在终端下操作。本例中,创建了radius的用户和同名的数据库:
1
2
3
| CREATE USER 'radius'@'localhost' IDENTIFIED BY '***';CREATE DATABASE IF NOT EXISTS `radius` ;GRANT ALL PRIVILEGES ON `radius` . * TO 'radius'@'localhost'; |
/etc/raddb/sql.conf,配置login(用户名),password(密码),radius_db(数据库名)等字段,并找到readclients一行,设为yes并去掉注释符号#。12. 编辑
/etc/raddb/sites-enabled/default,根据下面的说明注释或取消注释相应的行:authorize段,关掉files,打开sql,也可以把unix关掉preacct段,关掉filesaccounting段,打开sql,也可以把unix关掉session段,打开sqlpost-auth段,打开sqlpre-proxy段,关掉files
配置daloRADIUS
13. 首先下载并安装daloRADIUS,其中需要安装一个Pear-DB的包:wget http://sourceforge.net/projects/daloradius/files/daloradius/daloradius-0.9-8/daloradius-0.9-8.tar.gzpear install DBmkdir /usr/share/daloRadiustar zxvf daloradius-0.9-8.tar.gzmv daloradius-0.9-8/* /usr/share/daloRadius/rm -r daloradius-0.9-8 |
mysql -uroot -p radius < /usr/share/daloRadius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql |
/usr/share/daloRadius/library/daloradius.conf.php,这是daloRADIUS的配置文件。首先是MySQL登录信息:
1
2
3
4
| $configValues['CONFIG_DB_HOST'] = 'localhost';$configValues['CONFIG_DB_USER'] = 'radius';$configValues['CONFIG_DB_PASS'] = '***'; // 设为自己的密码$configValues['CONFIG_DB_NAME'] = 'radius'; |
$configValues['CONFIG_DB_TBL_RADUSERGROUP'] = 'radusergroup'; |
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/usr/share/daloRadius/var'; |
/etc/httpd/conf/httpd.conf,加入:
1
2
3
| Alias /vpn "/usr/share/daloRadius/"<Directory "/usr/share/daloRADIUS"></Directory> |
1
2
| service httpd restartservice mysqld restart |
http://your.domain/vpn),使用默认用户名administrator和密码radius登录。daloRADIUS似乎写的不怎么样,最新稳定版已经是三年之前的了,不过作者直到现在还在更新SVN,下次有机会可以用最新的SVN版本试试看。在Management中添加一个新用户,注意密码类型选择Cleartext-Password。
19. 在终端里再次启动
radius -X,同时在另一个终端中用radtest username password localhost 0 MyVPN测试一下,看看现在是不是还能正常接通,如果没问题就OK,让我们把这套系统接驳到PPP上。配置pppd
20. 编辑/etc/ppp/options.pptpd,里面已经有许多配置选项了,我们要保证有下面的几行,如果没有就添加上去,为了保障用户登录的安全我们限制只使用MS-CHAPv2:
1
2
3
4
5
| refuse-paprefuse-chaprefuse-mschaprequire-mppe-128require-mschap-v2 |
1
2
3
| plugin radius.soplugin radattr.soradius-config-file /usr/local/etc/radiusclient/radiusclient.conf |
启动服务
21. 一切完成后我们不需要使用debug模式启动radiusd了:service radiusd start |
1
2
| chkconfig radiusd onchkconfig pptpd on |
没有评论:
发表评论