Category: Linux

CentOS Linux VPS Kloxo/Lxadmin控制面板安装教程(以及mhash)

By admin, 2010年10月27日 2:04 上午

安装kloxo
wget http://download.lxlabs.com/download/kloxo/production/kloxo-install-master.sh

sh ./kloxo-install-master.sh

国内主机可能安装要慢点了,因为是在线安装(更新源在国外),使用美国主机的朋友们很快就能安装完了。
安装完后你除了安好Lxadmin,同时也基本安好了Apache、Lighttpd、MySQL、Xcache、Bind、Djbdns等一系列服务器软件。

yum install php-bcmath /*高精度数学运算组件,默认没安装,MD5运算时用到*/
yum install  php-mhash
yum install php-mbstring
yum check-update (检查更新)
yum update (更新所有更新)
yum install php-bcmath (比较重要的php组件,默认没安装)
yum clean all (清理安装包)

基本完成,可以把终端关闭了。我们来登录Lxadmin,第一次登陆用户名和密码都是admin,地址:

https://IP:7777/  /*安全连接,不过默认证书不受IE信任*/

http://IP:7778/  /*还是用这个普通链接吧*/

Zend可以在Lxadmin后台的PHPConfig里启用,Apache可以从SwichProgram里选择,建议先选择lighttpd和bind然后再选回apache和djbdns,否则你会看到内存占用量很高。

新手建议用Apache,99%能正常支持.htaccess的rewrite规则。

安装中文语言包看一参考本文:http://www.vpser.net/vps-cp/vps-lxadmin-chinese.html

安装完后需要修改/etc/httpd/conf/httpd.conf  查找:AddDefaultCharset UTF-8 改为:AddDefaultCharset OFF ,这样就会引起网页的乱码问题。

-bash: crontab: command not found的解决办法

By admin, 2010年10月13日 11:37 上午

今天vpsma在执行crontab时候,竟然提示:“-bash: crontab: command not found”,yum install crontabs还是不行,搜了好多文章,没有一个好好解决-bash: crontab: command not found问题的!只得靠英文搜索了!好在在一个英文网站上找到了解决办法:

yum -y install gcc gcc-c++ autoconf vixie-cron
yum -y install gcc gcc-c++ autoconf crontabs

  

  说明:
  vixie-croncron的主程序;
  crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的程序

  安装好之后,果然这个问题解决了。

Linux VPS下简单解决CC攻击

By admin, 2010年06月11日 4:45 下午

一,准备工作
1,登录进VPS控制面板,准备好随时重启VPS。
2,关闭Web Server先,过高的负载会导致后面的操作很难进行,甚至直接无法登录SSH。
3,以防万一,把设置的Web Server系统启动后自动运行去掉。
(如果已经无法登录进系统,并且重启后负载过高导致刚刚开机就已经无法登录,可联系管理员在母机上封掉VPS的IP或80端口,在母机上用虚拟控制台登录进系统,然后进行2&3的操作,之后解封)

二,找出攻击者IP
1,在网站根目录建立文件ip.php,写入下面的内容。

<?php
    $real_ip = getenv(‘HTTP_X_FORWARDED_FOR’);
    if(isset($real_ip)){
    shell_exec(“echo $real_ip >> real_ip.txt”);
    shell_exec(“echo $_SERVER['REMOTE_ADDR'] >> proxy.txt”);
    }else{
    shell_exec(“echo $_SERVER['REMOTE_ADDR'] >> ips.txt”);
    }

    echo ‘服务器受到攻击,正在收集攻击源,请在5分钟后访问本站,5分钟内多次访问本站有可能会被当作攻击源封掉IP。谢谢合作!’;
   
?>

 

2,设置伪静态,将网站下的所有访问都rewrite到ip.php。
Nginx规则:

    rewrite (.*) /ip.php;

Lighttpd规则:

    url.rewrite = (
    “^/(.+)/?$” => “/ip.php”
    )

3,启动Web Server开始收集IP
进行完1和2的设置后,启动Web Server,开始记录IP信息。
收集时间建议为3到5分钟,然后再次关闭Web Server。
real_ip.txt,这个文件中保存的IP有80%以上都相同的,这个IP就是攻击者实施攻击的平台的IP。
proxy.txt,这个文件中保存的是攻击者调用的代理服务器的IP,需要封掉。
ips.txt,这里记录的是未表现出代理服务器特征的IP,根据访问次数判断是否为攻击源。

三,对上一段的补充
如果VPS上启用了WEB日志,可以查看日志文件的增长速度来判断是哪个站点被攻击。
如果没有启用日志,并且站点数量很少,临时启用日志也很方便 。
如果没有启用日志,并且站点数量过多,可以使用临时的Web Server配置文件,不绑定虚拟主机,设置一个默认的站点。然后在ip.php里加入下面一行

    shell_exec(“echo $_SERVER['HTTP_HOST'] >> domain.txt”);

四,开始封堵IP
建立文件ban.php

<?php
$threshold = 10;
$ips = array_count_values(file('ips.txt'));
$ban_num = 0;
foreach($ips as $ip=>$num){
if($num > $threshold){
$ip = trim($ip);
$cmd = "iptables -I INPUT -p tcp --dport 80 -s $ip -j DROP";
shell_exec($cmd);
echo "$ip baned!\n";
$ban_num ++;
}
}

$proxy_arr = array_unique(file('ips.txt'));
foreach($proxy_arr as $proxy){
$proxy = trim($proxy);
$cmd = "iptables -I INPUT -p tcp --dport 80 -s $ip -j DROP";
shell_exec($cmd);
echo "$ip baned!\n";
$ban_num ++;
}

echo "total: $ban_num ips\n";
?>

 

用下面的命令执行脚本(确保php命令在PATH中)

    php ban.php

这个脚本依赖于第二段中ips.txt里保存的结果,当其中记录的IP访问次数超过10次,就被当作攻击源给屏蔽掉。如果是代理服务器,则不判断次数直接封掉。
封完IP之后,把所有的网站设置恢复正常,站点可以继续正常运行了。

五,一些细节
为保持对操作过程的描述尽量简洁,没有在上面的内容中加入过多的解释,留在这段统一讲述。
1,关于“代理服务器”的一些本质
两个与TCP&HTTP协议相关的值,REMOTE_ADDR和HTTP_X_FORWARDED_FOR。
(1)REMOTE_ADDR总是取离Web服务器最接近的一台主机的IP,如果没有使用代理,这个值就是访问者本身的IP,如果使用了代理,这个值就是代理服务器的IP,如果通过多个代理服务器进行的连接,这个值就是到达Web服务器前最后一台代理服务器的IP。
REMOTE_ADDR是由TCP/IP层决定的,不能修改不能伪造。
(2)HTTP_X_FORWARDED_FOR,因为这个值是属于HTTP部分,而不是TCP/IP,所以这个值不管是什么,都不影响数据的传输。事实上,一般情况下,如果是访问者直接访问Web服务器,这个值为空;通过透明代理的时候,这个值会被代理服务器设置为访问者的IP;通过匿名代理连接时,这个值可能为代理服务器的IP也可能是空的也有可能是随机的。
HTTP_X_FORWARDED_FOR可以被任意修改。大多数代理服务器都是透明代理,也就是说,会把这个值设置为最原始访问者的IP。

2,关于解决CC攻击的层面问题
按处理效率从高到低排列。
(由于本文是针对VPS服务器所写,而VPS简单来说就是服务器的低端替代品,内存和CPU等资源普遍偏低,当然是处理效率越高越好。)
(1)网络传输层。也就是本文所用的iptables,这个工具本身是工作于系统内核,在建立网络连接时直接把攻击者的连接给否了。在这一层面上将攻击源处理掉后,消耗掉的资源几乎可以忽略不计。
(2)Web Server层,大多数Web Server都可以设置禁止访问的IP。在这一层上解决的意义和上面的差不多,但是效率要差些。
(3)脚本层,从脚本程序上制定适合于本身的策略过滤掉攻击源。网络上有很多流传的在这一层面的解决方案,但是不太适用于VPS,而且设置难度可能要增加几倍或者几十倍。

3,为什么不是从日志收集IP?
主要是考虑两点,一是大多数VPS使用者都因为硬盘空间过小,经常清除日志很麻烦,而直接禁止了日志。
二是如果从日志收集IP,脚本复杂程度要高很多,而且可能要根据情况做些调整,考虑到将要读到本文的人大多数都未必掌握更多的技术,本文的目的就是按部就班的依本文进行操作,即可解决问题。

六,其他
本文版权归www.diahosting.com所有,转载请保留超链接。

 http://www.31sky.net/node/389

VPS上自动备份网站数据并发送到远程FTP服务器

By admin, 2010年06月11日 4:42 下午

大家都知道,在godaddy注册域名的时候都会送一个10G的空间,但是用它来建站的时候,就会在所有的页面上显示一个顶部的广告,所以用来建站是不太合适的,但是我们可以利用他来做备份网站数据用,今天在VPS上写了个shell脚本,利用crontab来对网站的数据进行自动备份。下面就是我所用到的shell脚本(注:shell脚本名称为backup.sh,放在/root目录下,mysql的安装目录为/usr/local/mysql,网站的根目录为/home/wwwroot/31sky.net,请根据你自己的实际情况修改shell脚本):

#!/bin/bash
/usr/local/mysql/bin/mysqldump -u mysql用户名 -p mysql密码 mysql数据库名 > /home/wwwroot/31sky.net/$(date +%Y%m%d)-31sky.sql
cd /home/wwwroot/31sky.net
tar -zcvf $(date +%Y%m%d)-31sky.net.tar.gz ./*

echo "open ftp的ip地址
      user ftp用户名 ftp密码
      bin
      prompt off
      mput $(date +%Y%m%d)-31sky.net.tar.gz
      printf "\n"
      close
      bye"|ftp -i -n
rm -rf $(date +%Y%m%d)-31sky.sql $(date +%Y%m%d)-31sky.net.tar.gz

然后修改backup.sh的权限,使其有可执行的权限

chmod +x backup.sh

最后设置crontab:

crontab -e

在里面添加一行(每天的00:10分开始备份):

10 00 * * * /root/backup.sh

注意:有些情况下设置crontab后,但是并不运行,这时你可以重新启动一下crontab:

service crond restart

iptables开放端口

By admin, 2010年04月26日 6:24 上午

修改/etc/sysconfig/iptables文件,增加如下一行:

 -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 7778 -j ACCEPT

使用s3sync自动备份服务器上重要数据到Amazon S3 云存储上

By admin, 2010年04月24日 5:12 下午

    我在网上看到好多人用虚拟主机如DreamHost等空间来备份VPS或者独立服务器上面重要的数据, 如每日数据库的备份等等。 我个人认为这个方法不是很经济, 可靠性也不是很高。
     一般虚拟空间总要4美元左右一个月, 而4美元一个月在Amazon S3 上可以备份10g左右的数据, 但是一般的服务器应该用不到这么大的备份, 而S3就是按需收费的,这样每个月的费用就大大降低了,正常一两元人民币就ok了。 而可靠性个人认为S3要稳定的多,毕竟很多大公司都把存储服务放在S3上, 肯定是有他的道理的, 而一般虚拟空间丢失数据的情况常有发生。
     如何自动备份数据到S3上面呢? 可以使用 s3sync 工具进行同步。具体步骤如下:
第一步:创建Amazon S3账号
      登入 http://www.amazon.com/s3 网站,创建好自己的账号, 接受信用卡支付。 创建好账号后得到你自己的Access Key ID 和Secret Access Key。 上传下载文件需要用到这两个key,相当于你账号的密码。
第二步:安装 s3sync
     s3sync需要ruby支持, Debian/Ubuntu系统可以通过  “$ sudo apt-get install ruby libopenssl-ruby” 安装, CentOS可以通过yum命令安装。
     下载 s3sync 并解压 

$ wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
$ tar xvzf s3sync.tar.gz
进入 s3sync目录下载安装ssl证书,以便加密传输数据。
$ mkdir certs
$ cd certs
$ wget http://mirbsd.mirsolutions.de/cvs.cgi/~checkout~/src/etc/ssl.certs.shar
$ sh ssl.certs.shar
$ cd..
第三步:创建备份数据脚本
建议先在本机上做备份, 比如保存最近10天的备份。
$ touch backup.sh
$ chmod +x backup.sh
内容如下:
#!/bin/sh
cd /var/backup/db

#导出数据库
mysqldump -h 127.0.0.1 -u root -ppassword dabaseName| gzip > $(date +%Y%m%d).sql.gz

#保留最近10天的备份
rm -f $(date +%Y%m%d –date=’10 days ago’).sql.gz

第四步:创建上传脚本

$ touch upload.sh
$ chmod +x upload.sh
内容如下:
cd /var/s3sync
export AWS_ACCESS_KEY_ID= 你的S3 的keyId
export AWS_SECRET_ACCESS_KEY=你的S3的Secret Access key
export SSL_CERT_DIR=/var/s3sync/certs
ruby s3sync.rb -r –ssl /var/backup/ yourBucket:AutoBackup

第五步: 在cron里定时运行
crontab 里面加入:

1 0 * * * /var/backup/backup.sh
1 1 * * * /var/s3sync/upload.sh

这样就不用担心服务器里面的数据了, 每天会定时备份,平时如何浏览下载删除Amazon S3 里面的备份文件呢,有很多客户端工具, Windows/Linux下面推荐使用 S3 Browser, Mac下面推荐使用 S3 hub

Kloxo/Lxadmin教程系列之——安装ZendOptimizer

By admin, 2010年04月16日 2:13 下午

在Kloxo下安装ZendOptimizer,当然第一步就是以root帐号和密码通过SSH登录到你的VPS上,然后再按照下面步骤来进行安装配置(下面加了颜色部分就是命令)。

一、进入相应目录

[root@sayhosts ~]#cd /usr/local/src

二、获取ZenOptimizer包

 

[root@sayhosts ~]#wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz

三、解压

[root@sayhosts ~]#tar -xzvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz

四、安装

[root@sayhosts ~]#./ZendOptimizer-3.3.3-linux-glibc23-i386/install.sh

五、配置

执行完上面步骤后,会出现蓝色的安装界面,如果是Apache就可以直接按enter键一直到执行完毕

安装完成,进入配置php.ini

[root@sayhosts ~]# vi /etc/php.ini
如果进去在最下面有
[Zend]
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.3
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.3
zend_optimizer.version=3.3.3
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so

上面这段代码说明已经安装成功了

这个是系统php.ini的,还要把这段代码手工配置到你的域名下的php.ini里面

[root@sayhosts ~]# vi /home/httpd/你的域名/php.ini

在每个域名目录的php.ini里最后面粘贴上上面复制的那段zend的代码
退出vi

六、重启Apache

[root@sayhosts ~]# service httpd restart

[Zend]
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.3
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.3
zend_optimizer.version=3.3.3
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so

最后输入以下命令重启webserver即可生效
[root@sayhosts ~]#/etc/init.d/lighttpd restart

如何在RedHat based系统中快速绑定一段IP[ifcfg-eth0-range0]

By admin, 2010年04月14日 3:27 上午

大家都知道,在基于 RedHat 的 linux 系统中,给网卡多绑定一个IP,一般方法是在 /etc/sysconfig/network-scripts/ 目录中, copy 网卡配置文件 ifcfg-eth0 为 ifcfg-eth0:x ,然后修改一下即可,如:

vi /etc/sysconfig/network-scripts/ifcfg-eth0:0

DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.100
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
TYPE=Ethernet

与上面例子类似,如果我想绑定 一段连续的IP,比如100个IP,该如何快速简单的设置呢?

RedHat based系统,提供了一个非常简便的方法,来绑定一段IP,如下:

1)新建一个文件:/etc/sysconfig/network-scripts/ifcfg-eth0-range0

IPADDR_START=192.168.0.100
IPADDR_END=192.168.0.200
CLONENUM_START=0
NETMASK=255.255.255.0

其中:

IPADDR_START 是起始IP地址,
IPADDR_END 是结束IP地址,
CLONENUM_START 是起始IP别名网卡名(本例中是 eth0:0)

如果需要,你还可以再建立一个 ifcfg-eth0-range1 的文件,用于设置绑定另一段IP地址。但是要注意 CLONENUM_START 的值设置,不要覆盖到上一段IP地址的网卡别名

2)创建好配置文件后,重启网络服务即可:

nohup service network restart &

安装kloxo后无法访问,可能是iptables的原因

By admin, 2010年04月13日 12:10 下午

新购买了一台侠客的独立服务器,安装好了kloxo控制面板后,一直不能访问kloxo登陆页面,很是郁闷,结果执行service iptables stop就好了,以后安装了不能访问,检查下是不是iptables的原因。

安装kloxo中文语言包教程

By admin, 2010年04月11日 7:32 下午

1.使用ssh登陆您的VPS

2.进入lang目录:
$ cd /usr/local/lxlabs/kloxo/httpdocs/lang

3.下载语言包:
$ wget http://www.hostloc.com/pack/lxadmin_cn_pack.zip

4.解压:
$ unzip lxadmin_cn_pack.zip
(如果没有安装unzip命令请执行yum -y install unzip进行安装)

5. 访问http://你的IP:7778/ 进行lxadmin语言设置

在Appearance->Language里选择Chinese,然后点击update确认.如下图所示:

Panorama Theme by Themocracy