2011年9月7日星期三

vps管理面板ssh安装命令

包括vps管理面板:VePortal,SolusVM,Parallel Plesk,HyperVM,xensystem,vtonf
=========================================================================

VePortal

安装命令:
setenforce 0
wget http://mirror.veportal.com/install.sh;sh install.sh
申请试用码:
https://clients.veportal.com/cart.php
十四天试用码:
vePortal-TR6f6191cee26
=========================================================================

SolusVM

安装命令:
yum remove mysql mysql-client mysql-server
setenforce 0
wget http://soluslabs.com/installers/solusvm/install
chmod 755 install
./install
cd /usr/local/solusvm/language/client
wget http://www.yishanhome.com/wp-content/uploads/2011/05/Chinese.txt
cd $HOME
申请试用码:
https://www.soluslabs.com/clients/cart.php
十四天试用码:
SVMTL-O08J7-569JM-0CS89-BKH50-WH1TI-G4QO1
=========================================================================

Parallel Plesk

http://www.parallels.com/cn/products/plesk/
安装命令:
wget http://download1.parallels.com/Plesk/PP10/10.0.1/CentOS5/parallels_installer_v3.7.1_build101103.18_os_CentOS_5_i386
chmod 777 parallels_installer_v3.7.1_build101103.18_os_CentOS_5_i386
./parallels_installer_v3.7.1_build101103.18_os_CentOS_5_i386
wget http://download1.parallels.com/Plesk/PP10/10.0.0/CentOS5/vztemplates/pp10-centos-5-x86-ez.tar.gz
=========================================================================

HyperVM

http://lxcenter.org/software/hypervm/hypervm-installation
安装命令:
setenforce 0
wget http://download.lxcenter.org/download/hypervm/production/hypervm-install-master.sh
sh ./hypervm-install-master.sh --virtualization-type=xen/openvz/NONE
=========================================================================

xensystem

官方网站:http://www.xensystem.com
安装视频:http://my.xensystem.com/flash/XenSystem_Win2003_installing.htm
安装包:http://my.xensystem.com/download/XenSystem_Full.rar
十天试用
=========================================================================

vtonf

setenforce 0
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
rpm –import http://download.openvz.org/RPM-GPG-Key-OpenVZ
yum search ovzkernel
yum -y install ovzkernel
yum -y install vzctl vzquota
cp /etc/sysctl.conf /etc/sysctl.bak
cat > /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.default.forwarding = 1
EOF
sysctl -p
yum -y install vzpkg expect
wget -c http://mesh.dl.sourceforge.net/sourceforge/vtonf/vtonfinstaller.1.0-beta1.tar.gz
tar zxvf vtonfinstaller.1.0-beta1.tar.gz
cd vtonfinstaller.1.0-beta1
./install
wget http://download.linuxzh.org/xyj/Downloads/vtonf-cn-1.0.tar.bz2
tar xvfj vtonf-cn-1.0.tar.bz2
cd vtonf-cn
./vtonf-cn.sh /usr/local/vtonf

VPN三合一安装包(PPTP,L2TP,OpenVPN)

2011.8.5更新:添加对centos 6.0支持
2011.7.2更新:添加验证已安装mysql的root用户密码是否正确;添加Daloradius,RadiusManager,apache。详细安装可以看图示。
wget http://www.yishanhome.com/wp-content/uploads/2011/06/vpn3in1.sh;sh vpn3in1.sh


2011.5.8更新:添加可选使用本机freeradius服务或者使用远程freeradius服务器,如果使用远程则不会在本机安装freeradius及mysql服务;
提高Mysql是否安装识别,去除Nginx,phpMyAdmin,daloradius安装,这些功能建议单独安装,还原OPENVPN端口为1194。
数据库缺点: L2TP不能记录callingstationid,OPENVPN使用UDP端口不能记录acctstoptime
根据palfans修改而成,http://www.palfans.net/3-in-1-vpn-package/

开启mysql远程帐号脚本

mysql -u root -proot;
grant all on *.* to username@'%' identified by 'password';
flush privileges;
其中 all 指定相关的操作, *.*说明数据库和表名, username表示用户名,‘%’这里写Host名称,允许所有就用‘%’,‘password’是密码。这里改成相应的值后进行操作就可以开启远程帐号访问

修改VPN服务器radius认证为远程服务器

修改参数在VPN服务器运行下面脚本
radius_server="radius服务器IP"
secret_key="yishanhome.com"
etc_dir="/usr/local/etc"
sed -i -e "s/name=127.0.0.1/name=$radius_server/" /etc/openvpn/radiusplugin.cnf
sed -i -e "s/sharedsecret=testpw/sharedsecret=$secret_key/" /etc/openvpn/radiusplugin.cnf
sed -i -e "s/localhost:1812/$radius_server:1812/" $etc_dir/radiusclient/radiusclient.conf
sed -i -e "s/localhost:1813/$radius_server:1813/" $etc_dir/radiusclient/radiusclient.conf
mv -f $etc_dir/radiusclient/servers $etc_dir/radiusclient/servers.bak
cat >> $etc_dir/radiusclient/servers <<EOF
$radius_server $secret_key
EOF
修改参数在radius服务器运行下面脚本
client_ip="VPN服务器IP"
secret_key="yishanhome.com"
etc_dir="/usr/local/etc"
iptables -A INPUT -i eth0 -p udp -s $client_ip --dport 1812 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s $client_ip --dport 1813 -j ACCEPT
cat >> $etc_dir/raddb/clients.conf <<EOF
client localhost {
 ipaddr = $client_ip
 secret = $secret_key
 require_message_authenticator = no
 nastype  = other
}
EOF

安装LNMP

wget -c http://soft.vpser.net/lnmp/lnmp0.7-full.tar.gz
tar zxvf lnmp0.7-full.tar.gz
cd lnmp0.7-full/
sh centos.sh | tee lnmp.log
sh ionCube.sh

安装daloradius及中文包

为现有的网站添加一个daloradius管理freeradius.
DALORADIUS是一种先进的网络管理应用的RADIUS在管理热点和通用的ISP部署的目的。它具有用户管理,图形报表,会计,一个计费引擎及与地理定位将GoogleMaps集成。
#修改为你的网站目录
www_dir="/home/wwwroot"
#mysql服务器IP
mysql_servser="127.0.0.1"
#mysql数据库登录名
mysql_root_user="root"
#mysql数据库登录密码
mysql_root_pwd="root"
#mysql执行路径
mysql_bin="/usr/local/mysql/bin/mysql"
#php.ini位置
php_ini="/usr/local/php/etc/php.ini"
#php-fpm位置
php_fpm_dir="/usr/local/php/sbin"
#radius_secret_key
secret_key="testing123"
yum -y install php-pear-DB
echo "include_path=\".:/usr/share/pear:/usr/share/php\"" >>$php_ini
$php_fpm_dir/php-fpm restart
cd $www_dir
wget http://nchc.dl.sourceforge.net/project/daloradius/daloradius/daloradius-0.9-8/daloradius-0.9-8.tar.gz
tar -zxvf daloradius-0.9-8.tar.gz
rm -rf daloradius-0.9-8.tar.gz
chmod 777 daloradius-0.9-8/library/daloradius.conf.php
chmod 666 /var/log/messages
echo "create database radius;" | $mysql_bin --user=$mysql_root_user --password=$mysql_root_pwd
$mysql_bin --user=$mysql_root_user --password=$mysql_root_pwd radius < daloradius-0.9-8/contrib/db/mysql-daloradius.sql
echo "delete from radius.operators where username='liran';" | $mysql_bin --user=$mysql_root_user --password=$mysql_root_pwd radius
sed -i -e "s/\['CONFIG_DB_HOST'\] = '127.0.0.1'/\['CONFIG_DB_HOST'\] = '$mysql_servser'/" daloradius-0.9-8/library/daloradius.conf.php
sed -i -e "s/\['CONFIG_DB_USER'\] = 'root'/\['CONFIG_DB_USER'\] = '$mysql_root_user'/" daloradius-0.9-8/library/daloradius.conf.php
sed -i -e "s/\['CONFIG_DB_PASS'\] = ''/\['CONFIG_DB_PASS'\] = '$mysql_root_pwd'/g" daloradius-0.9-8/library/daloradius.conf.php
sed -i -e "s/testing123/$secret_key/" daloradius-0.9-8/library/daloradius.conf.php
sed -i -e "s/freeradius/radius/" daloradius-0.9-8/library/exten-radius_log.php
cd daloradius-0.9-8
wget http://deluxsola.googlecode.com/files/daloradius-0.9-8-hh.tar.gz
tar -zxvf daloradius-0.9-8-hh.tar.gz
rm -rf daloradius-0.9-8-hh.tar.gz

Freeradius用户非正常下线的问题

当Freeradius设置了Simultaneous-Use := 1,限制用户连接数为1时,用户非正常下线以及NAS意外掉电导致用户重新登录时无法通过验证。
通过查找相关文档,FreeRadius是靠radacct表中的acctstoptime字段来判断用户是否在线,如果acctstoptime为null表示用户在线。用户非正常断线,NAS没有向radius发送“Acct-Status-Type = Stop”的计费数据包,radius就没有更新acctstoptime字段,造成用户无法通过认证。
通过cron定时任务执行mysql脚本,来更新数据库中的acctstoptime字段。
UPDATE radacct SET acctstoptime = acctstarttime + acctsessiontime WHERE
((UNIX_TIMESTAMP(acctstarttime) + acctsessiontime + 120 – UNIX_TIMESTAMP())<0)
AND acctstoptime IS NULL;
注:acctstarttime(开始时间) + acctsessiontime (会话时间) + 单位时间 < 当前时间
表示用户已经断开了。就将acctstoptime更新为acctstarttime(开始时间) + acctsessiontime (会话时间)。单位时间为NAS向radius发送计费信息的间隔时间(Interim Update)

VPN(pptp+radius+mysql) 安装笔记总结

软件:pptp+radius+mysql
平台:linux,可以是各发行版,内核最好是2.6以上的
我的测试平台是RHEL5 beta1,内核 2.6.18-1.2747.el5xen
这个版本有个好处,就是内核已支持MPPE,不用再安装
首先要确定内核是否支持mppe
方法: modprobe ppp-compress-18 && echo ok
如果显示ok,即表示内核已具备了mppe支持
如不支持,需要升级内核以支持mppe
软件下载
http://sourceforge.net/project/showfiles.php?group_id=44827
下载2个rpm包。
dkms-2.0.10-1.noarch.rpm
kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
dkms是一个新的软件,能让你在不编译内核的基础上,外挂一些内核的模块。
kernel_ppp_mppe就是mppe支持的内核模块
OK后最好重起下你的系统
安装pppd
也可以在上面的地址下载,但只可以下载RPM包,最高版本为 ppp-2.4.3-5.rhel4.i386.rpm,也有FC的
源码下载可以到
http://samba.org/ppp/download.html
,最新版本为 ppp-2.4.4b1.tar.gz
最新版已支持 mppe,不用再打补丁
如不支持,可以到此下载
http://mppe-mppc.alphacron.de/#AEN56
,包括ppp和内核补丁
检查pppd是否支持mppe
[root@localhost]# strings `which pppd`|grep -i mppe|wc –lines
42
结果大于36,即表示支持
解压安装
tar -zxvf …
configure,make,make install
用 make install-etcppp 来安装范例配置文件
安装pptpd
下载
http://sourceforge.net/project/showfiles.php?group_id=44827
最新版本,源码包的是 pptpd-1.3.4.tar.gz
RPM包的是 pptpd-1.3.3-1.rhel4.i386.rpm,FC6
解压安装 tar -zxvf …
configure,make,make install
配置
pppd 的配置文件 /etc/ppp
pptpd 的配置文件 /etc/pptpd.conf
在pptpd.conf
localip 10.10.10.1
remoteip 10.10.110.2-100
localip是pptpd的对外服务的ip,也就是客户端需要拨号的ip
remoteip是拨号服务器分配给拨号用户的ip ,可以用-表示ip范围
添加测试用户 /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
test pptpd test *
认证方式设置 /etc/ppp/options.pp
默认就可以用,如果不mppe,或是不用加密,可以在此文件设置
为方便测试,请打开debug和dump调试,并查看/var/log/messages 文件
启动pptpd后,就可以在XP建立连接测试了
以上一个简单的VPN就完成了.
结合radius
软件下载
http://www.freeradius.org
当前最新版本为 freeradius-server-2.0.4.tar.bz2
但与1.X的配置方式上,有比较大的区别.
我开始是用2.X测试的,但没成功,最后用了1.X的.有空再研究2.X的.
解压安装
tar -zxvf …,configure,make,make install
配置
从pppd的源码目录把下面这个目录复制到/etc/radiusclient/
cp -R ppp-2.4.4b1/pppd/plugins/radius/etc /etc/radiusclient/
修改 options.pptpd
在最后加入
plugin /usr/local/lib/pppd/2.4.4b1/radius.so
配置 /etc/radiusclient中的servers和radiusclient.conf
在servers中,你需要增加一个radiusd的地址和密码
localhost vpn
这里localhost表示你的radiusd就在本机,并且访问的密码是vpn
在radiusclient.conf中 加入
authserver localhost:1812
acctserver localhost:1813
确认上面也是本地的,默认就是本地,所以一般不需要修改。
同时确保这个文件中radiusclient相关的路径所有的路径都是 /etc/radiusclient 开头的。
配置freeradius
在 freeradius/etc/raddb 下
修改clients.conf
这里说明一下,所有的nas都是radiusd的client,nas就是那个pptpd,所以这个文件就是配置pptpd的登陆权限的。
client 127.0.0.1 {
secret = vpn
shortname = mm
nastype = other
}
修改127.0.0.1部分为上面的样子。secret就是我们刚才在/etc/radiusclient中servers里设置的那个。这两个要一致
在users文件的最上面加入一个用户
ww Auth-Type:= MS-CHAP, User-Password==”ww”, Simultaneous-Use:=1
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 255.255.255.254,
Framed-IP-Netmask = 255.255.255.0
说明一下 ww是用户名
auth-type是验证的类型
第二个ww是密码
Simultaneous-Use是允许这个用户名同时登陆的个数
所有这些都是check属性,要写在第一行
然后第二行开始用tab开头,是服务器返回给radius客户端的(也就是返回给pptpd)时reply属性。
其中ip地址设置为255.255
用debug模式运行radiusd
sbin/radiusd -x
测试,在XP建个VPN连接,用户密码均为 ww
结合mysql
mysql安装略过.
建立一个radius数据库,把结构导入即可
库结构文件在 freeradius16/share/doc/freeradius/examples/mysql.sql
配置sql.conf 在安装目录下的etc/raddb
修改sql.conf的连接信息
# Connect info
server = “192.168.8.53″
login = “radius”
password = “radius”
# Database table configuration
radius_db = “radius”
去掉下面的simul。。。。前面的#
打开sql的用户同时连接数测试的语句
# Uncomment simul_count_query to enable simultaneous use checking
simul_count_query = “SELECT COUNT(*) FROM ${acct_table1} WHERE UserName=’%{SQL-User-Name}’ AND AcctStopTime = 0″
配置radiusd.conf
注释掉 authorize {
的files
去掉sql前的注释
注释掉 preacct {
的files
注释掉 accounting {
的radutmp
去掉sql前面的#
注释掉 session{
的radutmp
去掉sql前面的#
去掉 post-auth {
sql前的#
总之就是去掉files模块,开启sql模块
在数据库中添加用户
在usergroup中添加一个test用户,组名为vpn
在radgroupcheck中添加一个vpn组,
attribute为Simultaneous-Use
op为:=
value为1
的纪录
在radcheck中添加
username为test
attribute为 User-Password
op为==
value为test
这样就添加了一个用户为test,组为vpn,密码为test
并且所有的组用户的都只能1个用户名登陆一次
测试
用debug模式启动radiusd

freeradius中rlm_sqlcounter模块对时间和流量限制

实验环境
fedora6 kernel:2.6.18-1.2798.fc6
mysql 5.0.22
freeradius 1.1.7
该模块可以生成一个临时的check属性,该属性的值通过sql语句从sql数据库中的raddacct表统计数据,然后将它与数据库radcheck或者 radgroupcheck表中的该属性的值(已经被添加到check items中)进行比较,符合规则的才会通过authorize。
eg.
sqlcounter noresetcounter {
counter-name = Max-All-Session-Time #没有发现有什么用
check-name = Max-All-Session #对应radcheck表中的attribute
reply-name = Session-Timeout #返回给NAS的attribute type,这里为Session-Timeout
sqlmod-inst = sql #指定查询类型
key = User-Name #
reset = never #sqlcounter重置频率,通常为hourly, daily, weekly, monthly,never
query = “SELECT SUM(AcctSessionTime) FROM radacct WHERE UserName=’%{%k}’”
}
将上边的内容加到radiusd.conf的modules中(在modules中已经有sqlcounter的示例),并在authorize中加入noresetcounter,这样在认证过程中就会调用这个sqlcounter,radius
会去计算radacct表中该用户的所有AcctSessionTime之和,也就是累计上线时间,并与radcheck表中该用户的Max-All-Session进行比较,如果Max-All-Session大于
AcctSessionTime之和,就会将差值(正数)指定为Session-Timeout的value,返回给NAS,反之拒绝登陆。这就实现了限制该用户最大的上线时间,累计时间达到了Max-All-Session的话便会拒绝的登陆。
示例中有reset为daily, weekly, monthly,如果是daily的话,这个时间限制只对当天有效,第二天就会重置数据了。关于这个没有做详细的实验,据说因为重置时间的原因计算的差值可能会有错误。具体可以看我在另一篇blog里( some mail about freeradius sqlcounter limit the octets)摘录的有关信息。
sqlcounter对时间的计算和限制登陆已经在freeradius的wiki里有详细的说明了,这里还要说一下对流量的限制。
根据流量来限制登陆可以在radreply表中添加Chillispot-Max-All-Octets(我用的NAS为coova-chilli)属性,该账号流量在达到这个值后,会被chilli强制下线。这里的流量包括上行和下行,如果只限制下行,则需要Chillispot-Max-Input-Octets,对应的上行则是Chillispot-Max-Output-Octets,这是coova-chilli的属性。实践证明,coova官网说:
ChilliSpot-Max-Output-Octets:Maximum number of octets the user is allowed to receive,ChilliSpot-Max-Input-Octets:Maximum number of octets the user is
allowed to transmit,这个正好说反了,但是在chillispot之前的版本中,比如chillipot 1.1.0却的确是这样的。
如果要防止流量已经达到了最大数值的账号再次登陆的话,上边的方法就不行了。因为上边只对当次登陆给了对应的属性来让他自动掉线,并没有对其他有任何的限制。这就要借用sqlcounter来实现。事实上,上边的方法完全是没有必要的。我们只需要设置一个sqlcounter,并在radreply不要再重复添加Chillispot-Max-All-Octets属性。这样就既可以限制本次也会对以后的登陆进行计算.
限制下行流量的sqlcounter
sqlcounter octets {
counter-name = Max-All-Session-Octets #没有发现有什么用
check-name = Chillispot-Max-Input-Octets #对应radcheck表中的attribute
reply-name = Chillispot-Max-Input-Octets #返回给NAS的attribute type,这里为Session-Timeout
sqlmod-inst = sql #指定查询类型
key = User-Name #
reset = never #sqlcounter重置频率,通常为hourly, daily, weekly, monthly,never
query = “SELECT SUM(AcctInputOctets) FROM radacct WHERE UserName=’%{%k}’”
}
最后别忘了将octets加入authorize中。
两点说明
1. 我在freeradius-1.1.3版本中测试时发现,reply-name被默认固定成了Session-Timeout,我们指定的reply-name没有效果,所以就不能用它来进行流量限制了。
2. 网上查到的资料还有一项参数,是error-msg还是reply-message,意思是返回给NAS的错误信息,但是我在1.1.7版本中没有实验成功,源码中好像也没有这样的参数,不能确定

固定时间更新免费VPN的密码

环境介绍:
本人有两台VPS,一台就是本博客所在的VPS(OpenVZ,我们假设为VPS1),另外一台专门用了提供PPTPd VPN服务的VPS(Xen,我们假设为VPS2),假设提供PPTP VPN服务的VPS的IP地址为123.123.123.123。
第一步 :在VPS2上安装PPTPd VPN
#wget http://www.diahosting.com/dload/pptpd.sh
#chmod +x pptpd.sh
#./pptpd.sh
第二步 :在VPS2上安装expect,用于生产随机密码
#yum install expect
第三步:在VPS2上安装httpd
#yum install httpd
#service httpd start
第四步:在VPS2上的/root/目录下编写shell脚本,文件名为vpn.sh,用于自动更新密码,以下是脚本源码
#!/bin/bash
pass=`mkpasswd -l 8 -d 8 -c 0 -C 0 -s 0`
year=`date “+%Y”`
month=`date “+%m”`
day=`date “+%d”`
hour=`date “+%H”`
min=`date “+%M”`
sec=`date “+%S”`
sed -i “3s/.*/vpn pptpd $pass */” /etc/ppp/chap-secrets
/etc/rc.d/init.d/pptpd restart-kill
cat /dev/null > /var/www/html/vpninfo.txt
echo $year >> /var/www/html/vpninfo.txt
echo $month >> /var/www/html/vpninfo.txt
echo $day >> /var/www/html/vpninfo.txt
echo $hour >> /var/www/html/vpninfo.txt
echo $min >> /var/www/html/vpninfo.txt
echo $sec >> /var/www/html/vpninfo.txt
echo $pass >> /var/www/html/vpninfo.txt
第五步:设置crontab,每30分钟执行一次脚本
#crontab -e
将以下代码加入crontab
0,30 * * * * /root/vpn.sh
至此VPS2上的设置已经完成,然后就是在vps1上部署,很简单,就是几行php代码,主要是设置循环倒计时的代码,至于页面的美化我就不写了:
<?php $file=”http://123.123.123.123/vpninfo.txt”;
$filetext=file($file);
$timestamp=mktime($filetext[3],$filetext[4],$filetext[5],$filetext[1],$filetext[2],$filetext[0]);
$timestamp=$timestamp+1800;
$year=date(“Y”,$timestamp);
$month=date(“m”,$timestamp);
$day=date(“d”,$timestamp);
$hour=date(“H”,$timestamp);
$min=date(“i”,$timestamp);
$sec=date(“s”,$timestamp);
?>
<html>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″ />
<title>Free VPN</title>
<meta name=”description” content=”Free VPN” />
<meta name=”keywords” content=”Free VPN” />
</head>
<body>
<embed src=”http://www.clocklink.com/clocks/9001e-blue.swf?TimeZone=GMT0800&Target=<?=$year?>,<?=$month?>,<?=$day?>,<?=$hour?>,<?=$min?>,<?=$sec?>&Title=%E8%B7%9D%E4%B8%8B%E4%B8%80%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%AF%86%E7%A0%81&Message=%E5%AF%86%E7%A0%81%E5%B7%B2%E6%9B%B4%E6%96%B0%EF%BC%8C%E8%AF%B7%E5%88%B7%E6%96%B0%EF%BC%81&” width=”320″ height=”20″ wmode=”transparent” type=”application/x-shockwave-flash”>
</body>
</html>

使用tekradius为VPN服务器验证

http://www.tekradius.com/download.html
1,安装tekradius就不用写了,这里贴出几张我如何设置的图片
注意tekradius目前仅支持mssql

建议先在mssql2005服务器上创建好数据库,然后在到这里点“Create Tables"




添加一个授权secret,等下vpn服务器需要使用

添加一个测试拨入的用户密码,都是test


2,设置radiusclient
vi /usr/local/etc/radiusclient/radiusclient.conf
修改下面二行
	authserver      192.168.111.104:1812
	acctserver      192.168.111.104:1813
如图

vi /usr/local/etc/radiusclient/server
注意,其中的 yishanhome就是上面的授权secret,如图

最后测试如图

2011年9月6日星期二

SSH安装radiusmanager 3.9.0(集成中文及破解)


测试环境 centos 5.5。快速安装 apache,php,ioncube,mysql,freeradius 2.1.8,radiusmanage 3.9.0。
请注意,radiusmanage依旧是采用自动修改mac地址进行破解。安装完成后需要重启服务器生效
wget 下面这个脚本sh。
后台管理 http://你的IP/admin.php 默认管理员帐号 admin 密码 1111

#!/bin/bash
clear
cd $HOME
mkdir ram39-temp
cd ram39-temp
#安装 apache
yum install -y httpd mod_ssl php php-common php-gd php-pear php-pecl-memcache php-mhash php-xml gcc gcc-c++
yum install -y mysql-devel curl php-mysql php-mcrypt compat-libstdc++-33 libtool-ltdl-devel
#设置服务自动启动
chkconfig httpd on
service httpd start
#添加ioncube支持
php_version=`php -r 'echo PHP_VERSION;'`
php_version=${php_version:0:3}
sysinfo=`uname -i`
if [ $sysinfo = "x86_64" ]; then
  sysinfo="x86-64"
  else
   sysinfo="x86"
fi
wget http://www.dmasoftlab.com/cont/download/ioncube_loaders_lin_$sysinfo.tar.gz
tar zxvf ioncube_loaders_lin_$sysinfo.tar.gz
cp -rf ioncube /usr/local/
cat >>/etc/php.ini << END
zend_extension=/usr/local/ioncube/ioncube_loader_lin_$php_version.so
END
#安装及配置mysql
  ret=`rpm -qa|grep mysql|wc -l`
  ret1=`service mysql stop|wc -l`
if [ $ret = "0" ] || [ $ret1 = "0" ]; then
yum install -y mysql-server
fi
chkconfig mysqld on
service mysqld start
cat >> mysql-temp.sql << END
CREATE DATABASE radius;
CREATE DATABASE conntrack;
CREATE USER 'radius'@'localhost' IDENTIFIED BY 'radius123';
CREATE USER 'conntrack'@'localhost' IDENTIFIED BY 'conn123';
GRANT ALL ON radius.* TO radius@localhost;
GRANT ALL ON conntrack.* TO conntrack@localhost;
END
mysql -u root < mysql-temp.sql
#安装freeradius
wget http://www.dmasoftlab.com/cont/download/freeradius-server-2.1.8-dmamod-1.tar.gz
tar xvf freeradius-server-2.1.8-dmamod-1.tar.gz
cd freeradius-server-2.1.8
./configure
make
make install
chmod 644 /usr/local/etc/raddb/dictionary
chown apache /usr/local/etc/raddb
chown apache /usr/local/etc/raddb/clients.conf
nohup radiusd -X&
sleep 30
#修改网卡mac破解radiusmanager
cat >>/etc/rc.d/rc.sysinit<<END
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether 00:D0:09:B8:B7:34
/sbin/ifconfig eth0 up
END
#/sbin/ifconfig eth0 down
#/sbin/ifconfig eth0 hw ether 00:D0:09:B8:B7:34
#/sbin/ifconfig eth0 up
#安装radiusmanager3.9.0包含中文语言包
service httpd restart
wget http://deluxsola.googlecode.com/files/radiusmanager-3.9.0.tar.gz
tar zxvf radiusmanager-3.9.0.tar.gz
cd radiusmanager-3.9.0/
chmod 755 install.sh
./install.sh

限制pptp vpn用户单个连接的简单方法

linux系统上提供的pptp vpn服务默认采用的是chap认证方式。这种认证方式比较简单,只要用户名和密码正确即可进行连接,不能对一个账户的连接数目,流量,速度进行限制。如 果要实现这众多的限制,可以采用freeradius认证方式。但是我个人感觉配置freeradius可不是一般的繁琐啊,花了某个晚上的几个小时后我 最终放弃了…

不过如果仅仅只是对同一个账户的连接数目进行限制,倒是有一个简单的办法。这里提供的方法改自某个英文网站。当用中文搜索不到自己想要的东西时,用英文搜下说不定能有新发现呢。

实现方法很简单。只要在/etc/ppp文件夹下面建立一个名为auth-up的文件。在里面写入如下内容即可:


Click to closeBASH CODE

#!/bin/sh
# get the username/ppp line number from the parameters
  REALDEVICE=$1
  USER=$2
# create the directory to keep pid files per user
  mkdir -p /var/run/pptpd-users
# if there is a session already for this user, terminate the old one
  if [ -f /var/run/pptpd-users/$USER ]; then
    kill -HUP `cat /var/run/pptpd-users/$USER`
  fi
# copy the pid file of current user to /var/run/pptpd-users
  cp "/var/run/$REALDEVICE.pid" /var/run/pptpd-users/$USER
这样只要一个帐号进行了连接,就在/var/run/pptpd-users目录下记录下来了。而一旦这个帐号在他处再次登录,旧有的连接就被杀掉了。所以后面的连接具有优先权。

流量控制CentOS + L2TP/IPSec + FreeRadius

原载http://innercalm.info  
安装好vpn三合一安装包的情况下, 我们就已经配置好了一个可以提供L2TP(OpenVPN, PPTP)+FreeRadius的服务器了, 可以在Windows下整一个客户端连接试试看是否成功.


第二步是对用户的流量进行控制, 下面的步骤参考了FreeRADIUS 流量限制 这篇文章, 增加了自己理解的一部分内容.


  1. 启用 Rlm sqlcounter
    • 首先在 /etc/raddb/radiusd.conf ,去掉下面这一行的注释

      $INCLUDE sql/mysql/counter.conf
      #这里表示让freeradius启动counter(统计功能?)

  2. 添加流量统计器
    • vim /etc/raddb/sql/mysql/counter.conf
      在末尾添加如下代码

      sqlcounter monthlytrafficcounter {
      counter-name = Monthly-Traffic
      check-name = Max-Monthly-Traffic
      reply-name = Monthly-Traffic-Limit
      sqlmod-inst = sql
      key = User-Name
      reset = monthly
      query = "SELECT (SUM(AcctInputOctets + AcctOutputOctets))
      FROM radacct WHERE UserName='%{%k}'
      AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
      }
      #这里是自定义的一个流量统计规则,例子中是按月统计. 可以看到query后面的那条SQL语句表示:从数据库的radacct表中,根据用户名将所有input和outpu流量累加
  3. 添加字典
    • vim /etc/raddb/dictionary
      添加下面两行

      ATTRIBUTE Max-Monthly-Traffic 3003 integer
      ATTRIBUTE Monthly-Traffic-Limit 3004 integer
      #增加字典,字典具体是干什么用的还不清楚,大概是将Max-Monthly-Traffic映射成一个integer的变量? 尚需研究下流程才能明白
  4. 启用Traffic Counter
    • vim /etc/raddb/sites-enabled/default
      在authorize里添加monthlytrafficcounter(上面添加的流量统计器),像下面这样

      authorize {
      ...
      monthlytrafficcounter
      }
      #这里是将刚刚定义的规则,加入到验证的的规则组中去,应该是表示用户接入时也会判断这个条件
  5. 添加CHECK ATTRIBUTE
    • 在数据库的radcheck(用户规则)里添加如下规则

      Max-Monthly-Traffic := 1073741824

      // 1073741824 bytes=1 Gbyte, 填写时以byte为单位
      这一步建议使用Web管理界面做,也方便以后管理
      个人推荐用ARA (ASN RADIUS admin),也可以用daloRADIUS
      #这里我是直接用phpMyAdmin写入到MySQL数据库中的,因为两个Web管理都没用过,daloRadius摸不着头脑... 在radcheck表里插入如下项,表式给test用户每个月的流量是1G. 不过如其所说,这样不方便管理用户,应该学习下使用上述两个Web管理软件

6. 重启一下radiusd,万事大吉~
另外还要补充的一点是:
rlm sqlcounter的统计数据是在每次登陆时检查
因此使用过程中超流量不会强制下线,而是在下一次登陆时被拒绝

#的确是登录是检查, 试了下设成1,用户就无法接入了.

到此, 初步的流量控制就OK了, 可以依照上面的流程再增加按年,按日限流量的,应该问题不大.
在前面的基础上, 已经安装好l2tp+freeradius了, 基本的流量控制也搞定了, 可以按月或按日来限制流量了,稍微深入研究下counter的功能..

以下面这个counter为例子,这个是个按月做流量限制的例子, 问题是如何以此为基础生成可以根据你所需要的时间长度来限制流量?


01 sqlcounter monthlytrafficcounter {
02 counter-name = Monthly-Traffic
03 check-name = Max-Monthly-Traffic
04 reply-name = Monthly-Traffic-Limit
05 sqlmod-inst = sql
06 key = User-Name
07 reset = monthly
08 query = "SELECT (SUM(AcctInputOctets + AcctOutputOctets))
09 FROM radacct WHERE UserName='%{%k}'
10 AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
11 }


其实关键的问题就在reset这个字段, 上面这个例子里reset=monthly表示这个计数器会按月清空. 也就是说这些流量的统计会按月去清空一次. freeradius当然也提供了自定义的手段
我们可以将 reset的值改成我们想要的任意值.
如:

1 reset = 9h #表示9小时
2 reset = 9d #表示9天
3 reset = 9w #表示9周
4 reset = 9m #表示9个月

counter依旧用上面的代码应该没有问题,把里面相关名称改改就行. 详细的counter内容可以参考freeradius wiki的 Rlm sqlcounter .

目前不知道用户超过流量之后, 有没有办法管理员及时知道,钩子之类的,再行研究吧...


前面设置了流量统计器来做用户认证的, 用户使用超过限制的流量之后,认证就会失败. 但没有在时间上对用户作为限制. freeradius提供了一个密码过期的功能.默认已经启用了,可以在
/etc/raddb/sites-enabled/default 里的 authroize 可以查到 expiration这一项, 证明这项认证已经启动了.
freeradius会在用户登录的时候, 查找用户是否有Expiration的Atrributes. 如果有, 则将登录时间(获取当前系统时间) 与用户Expiration 的时间比较.
所以如果想让某个用户在某一时间密码不再有效, 只需要在radius数据库中的radcheck中增加一条记录.

SQL语言:
1 INSERT INTO `radius`.`radcheck` (
2 `id` ,
3 `username` ,
4 `attribute` ,
5 `op` ,
6 `value`
7 )
8 VALUES (
9 NULL , 'test', 'Expiration', '==', '19 Mar 2011'
或者phpMyAdmin插入也一样.

然后, test用户在2011年三月19日就无法再登录了...
注:感觉Expiration也可以配置在其他地方, 如某个配置文件中, 不一定非是数据库中. 无奈freeradius无详细文档,后续再研究...


FreeRADIUS 流量限制

现在我用 freeradius2-mysql 管理 PPTP/L2TP/OpenVPN
因为VPS有流量限制,所以就想到用freeradius实现流量控制
我是在 freeradius2-mysql 下配置的,利用的是 rlm sqlcounter 这个模块
以限制每个帐号每月流量1Gbyte为例,具体操作如下:
//假设 freeradius2-mysql 已经配置好
  1. 启用 Rlm sqlcounter
    • 首先在 /etc/raddb/radiusd.conf ,去掉下面这一行的注释
      $INCLUDE sql/mysql/conter.conf
  2. 添加流量统计器
    • vim /etc/raddb/sql/mysql/counter.conf
      在末尾添加如下代码
      sqlcounter monthlytrafficcounter {
      counter-name = Monthly-Traffic
      check-name = Max-Monthly-Traffic
      reply-name = Monthly-Traffic-Limit
      sqlmod-inst = sql
      key = User-Name
      reset = monthly
      query = "SELECT (SUM(AcctInputOctets + AcctOutputOctets))
      FROM radacct WHERE UserName='%{%k}'
      AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
      }
  3. 添加字典
    • vim /etc/raddb/dictionary
      添加下面两行
      ATTRIBUTE Max-Monthly-Traffic 3003 integer
      ATTRIBUTE Monthly-Traffic-Limit 3004 integer
  4. 启用Traffic Counter
    • vim /etc/raddb/sites-enabled/default
      在authorize里添加monthlytrafficcounter(上面添加的流量统计器),像下面这样
      authorize {
      ...
      monthlytrafficcounter
      }
  5. 添加CHECK ATTRIBUTE
    • 在数据库的radcheck(用户规则)里添加如下规则
      Max-Monthly-Traffic := 1073741824
      // 1073741824 bytes=1 Gbyte, 填写时以byte为单位
      这一步建议使用Web管理界面做,也方便以后管理
      个人推荐用ARA (ASN RADIUS admin),也可以用daloRADIUS
  6. 重启一下radiusd,万事大吉~
    另外还要补充的一点是:
    rlm sqlcounter的统计数据是在每次登陆时检查
    因此使用过程中超流量不会强制下线,而是在下一次登陆时被拒绝

关于radius

Radius Manager 和Freeradius实时记录流量
1、修改user文件 vim /usr/local/etc/raddb/users

在第50行处找到如下内容
DEFAULT Auth-Type = Local
Acct-Interim-Interval = 60,
在此行回车在51行添加如下内容,注意在头部TAB留空格,后面有逗号,保存退出
如果没有以上内容可以添加,如下
DEFAULT Auth-Type = Local
        Acct-Interim-Interval = 600,
    Exec-Program-Wait="/usr/local/bin/rmauth \"%{NAS-IP-Address}\" \"%{User-Name}\" \"%{Calling-Station-Id}\""
注意:添加如上内容可能会出错,这是由于没有通过radiusmanager的web页面添加NAS(手动在clients.conf文件中添加的似乎无效),添加NAS即可解决问题。

另外这里60是指每60秒查看一次流量是否增加,这里为了测试用,建议这个值不少于600

2、打开vim /usr/local/etc/radiusclient/dictionary

在ATTRIBUTE属性的底部添加如下行

ATTRIBUTE Acct-Interim-Interval 85 integer

重启freeradius和vpn server即可生效。
 
pptp和l2tp无法获得正确NAS IP
 
VPN建立好之后,一直受到这个问题的困扰,后经同事提醒发现是需要修改hosts文件。
打开hosts文件,vim /etc/hosts
在里面添加 本机IP地址 主机名 这样即可,比如我的机器添加如下
192.168.0.96 linux96



radiusmanager 设置NAS的时候raddb和client.conf不能读取

如果在设置NAS的时候发现raddb不能读取或者clients不能读取,请参照如下修改权限
chown nobody:nobody /usr/loca/etc/raddb chown nobody:nobody /usr/local/etc/raddb/clients.conf
如果还不行请适当修改权限
chmod 755 /usr/local/etc/raddb



pptp和l2tp无法获得正确NAS IP
RT VPN建立好之后,一直受到这个问题的困扰,后经同事提醒发现是需要修改hosts文件。
打开hosts文件,vim /etc/hosts在里面添加 本机IP地址 主机名 这样即可,比如我的机器添加如下192.168.0.96 linux96



radiusmanager无法控制用户的线路和流量控制
# vim /usr/local/etc/raddb/sites-enabled/default 取消152行的files的注释即可。


PPTP设置在radiusmanager中显示在线
1、修改/etc/options.pptpd,添加如下内容 require-mschap-v2 require-mppe-128
2、配置Freeradius服务器 修改 /usr/local/etc/raddb/sites-enabled/default中,去掉对mschap的注释 修改/usr/local/etc/raddb/modules/mschap中,去掉对如下代码的注释 mschap { use_mppe = yes require_encryption = yes require_strong = yes }
3、修改 /usr/local/etc/radiusclient/dictionary
注释掉下面这行
INCLUDE /usr/local/etc/radiusclient/dictionary
4、重启pptpd,如果提示dictionary.microsoft有错误,请到官方拷贝新的dictionary.microsoft





linux上控制p2p下载
在centos上安装了VPN,并使用VPN代理上网,但p2p下载是个头痛的问题,所以就使用tc和iptables对其
进行了限速。命令行如下,已经成功限制了p2p,肯定存在很多不足之处,请各位指正。
#iptables -I PREROUTING -t mangle -p tcp -s 10.8.0.0/24 -j MARK --set-mark 1
#tc qdisc del dev eth0 root
#tc qdisc add dev eth0 root handle 100: cbq bandwidth 10Mbit avpkt 1000
#tc class add dev eth0 parent 100:0 classid 100:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight
1Mbit prio 8 maxburst 8 avpkt 1000 bounded
#tc class add dev eth0 parent 100:1 classid 100:2 cbq bandwidth 10Mbit rate 300Kbit allot 1513 weight
30Kbit prio 5 maxburst 8 avpkt 1000 bounded
#tc qdisc add dev eth0 parent 100:2 sfq quantum 1514b perturb 15
#tc filter add dev eth0 parent 100:0 protocol ip prio 1 handle 1 fw classid 100:2
#tc qdisc del dev tun0 root
#tc qdisc add dev tun0 root handle 200: cbq bandwidth 10Mbit avpkt 1000
#tc class add dev tun0 parent 100:0 classid 200:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514
weight 2Kbit prio 8 maxburst 8 avpkt 1000 bounded
#tc class add dev tun0 parent 100:0 classid 200:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514
weight 2Kbit prio 8 maxburst 8 avpkt 1000 bounded
#tc class add dev tun0 parent 200:0 classid 200:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514
weight 2Kbit prio 8 maxburst 8 avpkt 1000 bounded

#tc -s qdisc ls dev eth0
#tc -s qdisc ls dev tun0
以上是对92上的openvpn进行的控制。
做了大致的测试,对迅雷能有效控制,其他p2p下载工具暂未测试。
http访问,视频网站,http下载均正常。
此方法对p2p有较好的控制效果,而且对正常的网络访问和视频网站没用任何影响。另外在设置的过程中要注意不同机器不同的IP地址,不同的网卡地址。
注意点:
如果在防火墙规则中添加了类似A RH-Firewall-1-INPUT -s 10.8.0.0/255.255.0.0 -j ACCEPT规则,则控制失效。
可以根据需要开启不同的访问端口来代替这条规则。
比如,我们的VPN,需要通过VPN服务器访问web网络,只需要在防火墙中添加开启80端口的规则即可。


pptp,l2tp更换freeradius验证服务器
在openvpn,pptp,l2tp建设过程中,需要更换freeradius服务器进行验证,由于是测试所用就不管数据库里面的数据。
需要更改的地方有
第一:/usr/local/etc/radiusclient/radiusclient.conf文件,找到如下内容并修改成新的radiusd服务器地址
authserver 192.168.0.85:1812
acctserver 192.168.0.85:1813
第二:修改/usr/local/etc/radiusclient/servers文件,修改内容如下,把IP地址改成新radiusd验证服务器的地址;把加密改成和radiusd服务器一致,即testing123
192.168.0.85 testing123

pptp使用远程freeradius验证
 

环境

主机A上装有freeradius,mysql等相关软件,进行用户验证。在主机B上安装pptp,使用主机A上的freeradius进行验证登陆。

步骤

1、在主机B上编译安装pptp,具体步骤请参照之前的文章
2、在主机B上对freeradius-client编译安装配置
(1)、编译安装
tar -jxvf freeradius-client-1.1.6.tar.bz2
cd freeradius-client
./configure –prefix=/usr/local
make
make install
(2)、配置option.pptpd
按如下配置修改该文件,但插件和配置文件的路径要对name pptpd refuse-pap refuse-chap refuse-mschap proxyarp lock nobsdcomp novj novjccomp nologfd ms-dns 8.8.8.8 ms-dns 4.4.4.4 plugin /usr/lib/pppd/2.4.4/radius.so plugin /usr/lib/pppd/2.4.4/radattr.so radius-config-file /usr/local/etc/radiusclient/radiusclient.conf (3)、配置radiusclient.conf文件
严格按照如下配置进行,如果该配置文件中没有的,请用警号注销掉,如果路径不对,请自行更改 auth_order radius login_tries 4 login_timeout 60 nologin /etc/nologin authserver 192.168.0.85:1812 //这里是freeradius的IP地址 acctserver 192.168.0.85:1813 //这里是freeradius的IP地址 servers /usr/local/etc/radiusclient/servers dictionary /usr/local/etc/radiusclient/dictionary seqfile /var/run/radius.seq mapfile /usr/local/etc/radiusclient/port-id-map default_realm radius_timeout 10 radius_retries 3 login_local /bin/login
(4)、更改/usr/local/etc/radiusclient/servers文件
改成 192.168.0.85 testing123
这里的IP地址是freeradius的IP地址 和 加密密码
(5)、修改 /usr/local/etc/radiusclient/dictionary
添加如下内容,具体路径根据实际情况填写
INCLUDE /usr/local/etc/radiusclient/dictionary INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft INCLUDE /usr/local/etc/radiusclient/dictionary.merit
dictionary.microsoft文件freeradius-client没有,可以在freeradius-server中找到,拷贝过来就可以了,如果server中的使用中有问题,可以从官方拷贝,具体网址是http://wiki.freeradius.org/PopTop#The_radiusclient_setup_part_.28on_the_Poptop_server.29

3、在主机A上添加防火墙允许主机B远程访问的规则
-A RH-Firewall-1-INPUT -p udp -m udp --dport 1812 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 1812 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 1813 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 1813 -j ACCEPT
4、在主机B上设置允许防火墙NAT转换
官方dictionary.microsoft文件

freeradius+pptp+daloradius+mysql

环境准备

centos5
xampp-linux-1.7.1.tar.gz
freeradius-mysql

pptp编译安装

请查看本博客其他文章

freeradius编译安装配置

请查看本博客其他文章

freeradius-client编译安装

1、编译安装
tar -jxvf freeradius-client-1.1.6.tar.bz2
cd freeradius-client
./configure –prefix=/usr/local
make
make install
2、配置option.pptpd
按如下配置修改该文件,但插件和配置文件的路径要对
name pptpd
refuse-pap
refuse-chap
refuse-mschap
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
ms-dns 8.8.8.8
ms-dns 4.4.4.4
plugin /usr/lib/pppd/2.4.4/radius.so
plugin /usr/lib/pppd/2.4.4/radattr.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf
3、配置radiusclient.conf文件
严格按照如下配置进行,如果该配置文件中没有的,请用警号注销掉,如果路径不对,请自行更改
auth_order radius
login_tries 4
login_timeout 60
nologin /etc/nologin
authserver localhost:1812
acctserver localhost:1813
servers /usr/local/etc/radiusclient/servers
dictionary /usr/local/etc/radiusclient/dictionary
seqfile /var/run/radius.seq
mapfile /usr/local/etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
4、更改/usr/local/etc/radiusclient/servers文件
改成 localhost testing123
5、修改 /usr/local/etc/radiusclient/dictionary
添加如下内容,具体路径根据实际情况填写
INCLUDE /usr/share/freeradius/dictionary INCLUDE /usr/share/freeradius/dictionary.microsoft INCLUDE /usr/share/freeradius/dictionary.merit
6、修改/usr/local/etc/raddb/radiusd.conf
去掉$INCLUDE sql.conf前的#


在PPTP VPN服务器上配置FreeRADIUS+daloRADIUS实现用户跟踪管理

现在很多拥有国外VPS的朋友都纷纷安装了VPN服务来方便自己上网,有时候我们还会共享出一些帐号给自己的同学、朋友使用。使用VPN来上网、玩网游等能够有效地解决某些线路上的问题,但是用的人一多难免会出现资源分配不均的情况,这时合理的管理手段就显得很有必要了。不过拿常见的PPTP VPN来说,最简单的配置就是使用PPP的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,远程用户拨号验证服务,基于RFC2865RFC2866。具体的工作原理挺复杂的,仔细阅读这两个RFC标准应该可以搞明白。简单的说,它是一个兼顾验证(authentication)、授权(authorization)及记账(accounting)三种服务的协议,即AAA协议。RADIUS运行在应用层,使用UDP进行传输,它被广泛用于ISP和企业用来控制Internet或内部网络、无线网络的访问。
FreeRADIUS:是一个实现RADIUS协议的软件,基于GPLv2开源。它是目前部署最广泛的开源RADIUS软件。
daloRADIUS:是一个FreeRADIUS的Web挂历程序,使用PHP编写。

安装配置流程

配置FreeRADIUS

1. 登入终端后,首先安装FreeRAIUS,一般源里两个版本,其中FreeRADIUS 1.x已经不被支持了,我们安装的是freeradius2。
yum install freeradius2 freeradius2-mysql freeradius2-utils
2. 安装完后,我们编辑/etc/raddb/users,在文件开头加上:testing Cleartext-Password := "password"
Tips:你需要了解如何使用SSH终端,和终端里文本编辑的方法,例如Vim的使用。
3. 启动radiusd,第一次启动会生成密钥,稍等片刻即可。使用-X参数可以让调试信息直接输出屏幕:
radiusd -X
4. 新打开一个SSH终端,测试服务器是否连通:
radtest testing password 127.0.0.1 0 testing123
如果看到Access-Accept就说明连接成功了。如果看到类似“Ignoring request to authentication address * port 1812 from unknownclient”的文字,可能需要去修改/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.gz
tar zxvf ppp-2.4.5.tar.gz
cp -R /root/ppp-2.4.5/pppd/plugins/radius/etc/ /usr/local/etc/radiusclient
6. 编辑/usr/local/etc/radiusclient/servers,加上一组服务器和密钥,本例中为“MyVPN”:
1
localhost MyVPN
7. 编辑/usr/local/etc/radiusclient/dictionary,将最后一行改为:
INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft可以再添加一行:
INCLUDE /usr/local/etc/radiusclient/dictionary.merit
8. 编辑/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';
11. 编辑/etc/raddb/sql.conf,配置login(用户名),password(密码),radius_db(数据库名)等字段,并找到readclients一行,设为yes并去掉注释符号#
12. 编辑/etc/raddb/sites-enabled/default,根据下面的说明注释或取消注释相应的行:
  • authorize段,关掉files,打开sql,也可以把unix关掉
  • preacct段,关掉files
  • accounting段,打开sql,也可以把unix关掉
  • session段,打开sql
  • post-auth段,打开sql
  • pre-proxy段,关掉files
到这一步,我们的FreeRADIUS就算配置好了,用户信息都将保存在MySQL数据库中。至于数据库中的表,我们在后面统一导入。

配置daloRADIUS

13. 首先下载并安装daloRADIUS,其中需要安装一个Pear-DB的包:
wget http://sourceforge.net/projects/daloradius/files/daloradius/daloradius-0.9-8/daloradius-0.9-8.tar.gz
pear install DB
mkdir /usr/share/daloRadius
tar zxvf daloradius-0.9-8.tar.gz
mv daloradius-0.9-8/* /usr/share/daloRadius/
rm -r daloradius-0.9-8
14. 这时我们将daloRADIUS中附带的sql文件导入MySQL数据库,别忘了输入密码:
mysql -uroot -p radius < /usr/share/daloRadius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql
15. 编辑/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';
下面有一个daloRADIUS的bug,默认配置中有一个表名和我们导入的不一样,把它改过来:
$configValues['CONFIG_DB_TBL_RADUSERGROUP'] = 'radusergroup';
然后修改daloRADIUS的路径:
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/usr/share/daloRadius/var';
16. 添加Apache虚拟主机,如果有Web控制面板什么的自然就方便多了,不然就编辑/etc/httpd/conf/httpd.conf,加入:
1
2
3
Alias /vpn "/usr/share/daloRadius/"
<Directory "/usr/share/daloRADIUS">
</Directory>
17. 重启重启Apache和MySQL:
1
2
service httpd restart
service mysqld restart
18. 打开浏览器,进入daloRADIUS的管理页面(本例中为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-pap
refuse-chap
refuse-mschap
require-mppe-128
require-mschap-v2
在配置文件最后加上3行:
1
2
3
plugin radius.so
plugin radattr.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf

启动服务

21. 一切完成后我们不需要使用debug模式启动radiusd了:
service radiusd start
22. 当然,我们可以把radiusd和pptpd设为开机启动服务:
1
2
chkconfig radiusd on
chkconfig pptpd on
至此,PPTP+FreeRADIUS+MySQL+daloRADIUS全部配置完毕,我们在本机上使用添加的用户名和密码拨入VPN,可以正常使用。在daloRADIUS中,还可以看到各个用户每次连接的时长,上传和下载的数据量统计等。daloRADIUS其他的使用方法,本文不再叙述。
VN:F [1.9.9_1125]
 

Poptop + FreeRADIUS + daloRADIUS的组合配置

总概:
本文主要介绍Poptop + FreeRADIUS + daloRADIUS的组合配置,CentOS平台。openvpn、l2tp类似。




1.程序下载:
Poptop: http://poptop.sourceforge.net/
FreeRADIUS: http://freeradius.org/download.html
daloRADIUS: http://sourceforge.net/projects/daloradius/files/

示例中这些源文件我在服务器中存放的路径为(后面有些地方会提到,以免不知所措):
/opt/poptop
/opt/freeradius-server
/opt/daloradius

2.安装:
安装需求:因为下面介绍的是编译安装,所以编译安装环境是前提,缺少什么可以看编译出错信息。另外最终是web管理,所以需要web服务器和MYSQL环境,本文以Apache为例。

安装没什么可说的,Poptop和FreeRADIUS都直接在源码目录执行以下命令:
# ./configure
# make
# make install
编译出错的话,请自行解决。

3.配置:
Poptop配置:
文件路径:/etc/ pptpd.conf
复制内容到剪贴板
代码:
ppp /usr/local/sbin/pppd #pppd所在路径
option /etc/ppp/options.pptpd #options.pptpd所在路径
localip localhost #VPN服务器对外IP,可以为IP段,请指定IP
remoteip 10.0.0.101-200 #分配给客户端的内网IP
文件路径:/etc/ppp/options.pptpd
复制内容到剪贴板
代码:
name pptpd
refuse-pap #拒绝pap
refuse-chap #拒绝chap
refuse-mschap #拒绝mschap
require-mschap-v2 #要求mschap-v2
require-mppe-128 #要求mmpe-128
ms-dns 8.8.8.8 #客户端首要DNS
ms-dns 8.8.4.4 #客户端次要DNS
lock
nobsdcomp
novj
novjccomp
nologfd
plugin /usr/local/lib/pppd/2.4.5/radius.so #pppd radius插件路径
plugin /usr/local/lib/pppd/2.4.5/radattr.so #pppd radius扩展属性插件路径
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf #radiusclient配置文件路径
radiusclient设置:
文件路径:/usr/local/etc/radiusclient/radiusclient.conf
复制内容到剪贴板
代码:
auth_order radius
login_tries 4 #重试次数
login_timeout 60 #超时时间
nologin /etc/nologin
issue /usr/local/etc/radiusclient/issue
authserver localhost:1812 #用户验证服务器(如果不是本机,请指定IP)(可以为多个,依次尝试)
acctserver localhost:1813 #用户账户记录服务器(如果不是本机,请指定IP)
servers /usr/local/etc/radiusclient/servers #FreeRADIUS服务器和VPN服务器之间通讯的密钥配置文件
dictionary /usr/local/etc/radiusclient/dictionary #字典文件
login_radius /usr/local/sbin/login.radius
seqfile /var/run/radius.seq
mapfile /usr/local/etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
文件路径:/usr/local/etc/radiusclient/servers
复制内容到剪贴板
代码:
localhost pr74uJak #FreeRADIUS服务器地址(如果不是本机,请指定IP)及通讯密钥
文件路径:/usr/local/etc/radiusclient/dictionary
在此文件的最后加入下面的内容
复制内容到剪贴板
代码:
INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft
FreeRADIUS设置:
文件路径:/usr/local/etc/raddb/radiusd.conf
去掉$INCLUDE sql.conf前的注视符号#
去掉$INCLUDE sql/mysql/counter.conf前的注视符号#

文件路径:/usr/local/etc/raddb/sql.conf
在这个文件中配置你的MYSQL信息,相关行如下:
复制内容到剪贴板
代码:
server="localhost" #MYSQL服务器地址
#port=3306 #MYSQL服务器端口(一般不需要修改)
login="radius" #MYSQL服务器登陆用户名
password="radpass" #MYSQL服务器登陆密码
radius_db="radius" #MYSQL服务器radius_db所在数据库
其它的只要用daloRADIUS目录中的相应文件覆盖掉FreeRADIUS设置目录中的相关文件即可
/opt/daloradius/contrib/configs/freeradius-2.1.8/cfg1/raddb --> /usr/local/etc/raddb

daloRADIUS配置:
建立FreeRADIUS数据库,可直接使用/opt/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql这个SQL文件来建立:
复制内容到剪贴板
代码:
mysql -uroot -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "radpass";
exit
cd /opt/daloradius/contrib/db/
mysql -uroot -p radius < fr2-mysql-daloradius-and-freeradius.sql
把/opt/daloradius/下的全部文件拷贝到/var/www/daloradius/目录中

配置apache以便可以web访问
文件路径:/etc/httpd/conf.d/daloradius.conf
复制内容到剪贴板
代码:
#
# Web application to manage RADIUS
#

< Directory "/var/www/daloradius">
Order Deny,Allow
# Deny from all
Allow from all
< /Directory>

Alias /daloradius /var/www/daloradius
文件路径:/var/www/daloradius/library/daloradius.conf.php
可能需要更改的行如下:
复制内容到剪贴板
代码:
$configValues['CONFIG_DB_HOST'] = 'localhost'; /*MYSQL服务器地址*/
$configValues['CONFIG_DB_USER'] = 'radius'; /*MYSQL服务器登陆用户名*/
$configValues['CONFIG_DB_PASS'] = 'radpass'; /*MYSQL服务器登陆密码*/
$configValues['CONFIG_DB_NAME'] = 'radius'; /*MYSQL服务器radius_db数据库名*/
$configValues['CONFIG_FILE_RADIUS_PROXY'] = '/usr/local/etc/raddb/proxy.conf';
$configValues['CONFIG_PATH_RADIUS_DICT'] = '/usr/local/share/freeradius';
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/var/www/daloradius/var';
$configValues['CONFIG_LOG_FILE'] = '/tmp/daloradius.log'; /*daloRADIUS日志路径*/
至此整个安装配置过程完成,启动pptpd、FreeRADIUS以及MYSQL和Apache服务:
复制内容到剪贴板
代码:
# service mysqld start
# service httpd start
# pptpd
# radiusd
访问http://localhost/daloradius/以进行web管理PPTP VPN