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>