各种App Engine的简单比较

前段时间想要申请看一下新版的ACE,但是ACE的工程师不给我邀请码,说等到正式公开测试的时候亲自给我邀请码,然后我就信了~~~

但是,看到新版的ACE上面明明写的可以发邮件申请嘛~于是就发了封邮件;

下面简单的对比一下GAE和国内各种App Engine的特点;

GAE:GAE近来刚加入对PHP的支持,可以自行配置PHP.INI,有少量的禁用函数,相对来说使用起来还是非常灵活的。GAE的SQL是GOOGLE自己的CLOUD SQL,使用起来也比较方便;GAE PHP提供一定量的免费配额,CLOUD SQL是收费的。同时GAE PHP也继续支持了java所支持的TASKQUEUE memcache等,使用起来都比较方便,只是在国内需要绑定域名才能正常访问。
SAE:国内发展较早的APP ENGINE,开始的时候基本模仿GAE的一些特性,率先支持PHP;支持PHP是走在了GAE的前面,非常的不错。继承有来自GAE的特性如:MC,TASKQUEUE,CRON等也有自己的许多特色服务比如KVDB;而且支持mysql(RDC),这是GAE所未支持的
BAE:虽然走在了SAE的后面,但也是发展迅速,从正式对外公测到现在将近一年半的时间,发展成为一个较为不错的app engine;拥有memcache,taskqueue,消息服务,mysql(RDS),等等;还有BAE周边的一些服务,比如BCS,这个相对于SAE的Storage来说还是较为强大的
ACE:之前先是公测,后来不知道为什么改为了内测,现在还是内测;现在拿到了邀请码,发现功能还不是非常多,可能还正在进一步的开发和测试中吧。
上面的GAE,SAE,BAE都对本地写有限制,SAE做出了一个云商店,支持本地写,BAE做了一个类似远程磁盘(NFS)的解决方案,支持本地暂时写和永久写,但是都不是非常好的解决方案,也很期待ACE能够在本地写上面有一个非常好的解决方案。

PHP进行子域名探测

因为不会bash,所以只好用PHP了,因为发现阿里云数据库可能存在的漏洞,这个脚本就是用来探测阿里云数据库所有的子域名。

<?php

/*
 * @author:CplusHua
 * @date:2013-4-27
 * @version:1.0.0
 * @URI:http://www.219.me
 */
$code=Array();
$j=48;
$bool=TRUE;
for($i=0;$i<36;$i++){
    $code[$i]=  chr($j++);
    if($j>57&&$bool){
        $j=97;
        $bool=FALSE;
    } 
}
print_r($code);
$arr=Array('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');
$domain='';
while(1){
    $domain='';

    for($s=0;$s<15;$s++){
        $domain.=$code[$arr[$s]];
    }
    $host=$domain.".mysql.aliyun.com";
    //echo $host;

    ping($host);
    $arr[0]++;
    for($i=0;$i<14;$i++){
        if($arr[$i]>35){
            $arr[$i]=0;
            $arr[$i+1]++;
        } 
    }
     if(10==$arr[14]){
            break;
      }
}
function ping($host){
    return system('ping -c 1 '.$host.">> ping.txt 2>>/dev/null");
}

?>

快速切换Nginx作为网站前端代理服务器

Nginx比起Apache的高性能高并发特性已经被广泛的应用于生产环境中,如果网站原来使用的是Apache,那如何快速的将Nginx作为前端代理服务器来提供服务呢?

使用一个非常简单的配置文件配置即可。这里摒弃复杂的切换,和生产环境中要考虑的其他诸多因素,单纯简单讲解实现方法。

找到Nginx配置文件,一般位于/usr/local/nginx/conf中,名字为nginx.conf,为了测试,先不改动Apache的任何配置,将Nginx服务在81端口。

找到server配置,修改为以下配置,其中的website.com是网站的域名

server {
        listen       81;
        server_name  website.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://website.com;
            #root   html;
            #index  index.html index.htm;
        }

为了安全,我们可以先测试一下配置文件是否有语法错误

执行下面的命令测试语法是否正确

sudo /usr/local/nginx/sbin/nginx -t

如果正确将会显示类似下面的内容

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

为什么一定要测试配置文件是否正确呢?

1.Nginx配置文件的每一行后面都有一个分号,许多初次使用者会忘记添加分号,此时可能会出现一些莫名其妙的错误,比如提示缺少括号 }
2.Nginx运行时配置文件错误的载入可能会导致进程不受控制,即使使用stop命令都无法停止进程,所以一定要先测试配置文件是否正确
(ps:如果真的不受控制了,那只好强制杀死进程了,可以使用这条命令杀死进程 sudo killall nginx )

配置文件测试正确之后,reload配置文件即可使配置生效

sudo  /etc/init.d/nginx reload

配置文件已经成功载入
打开浏览器,输入上面配置的网站的域名(原来网站的域名)+端口号81,例如配置文件中给出的website.com,可以使用http://website.com:81来访问,这样之后就将Nginx设置为前端代理服务器了。
如果是Chrome浏览器,可以打开控制台,找到Network,查看加载的第一个文件的Response Header是否已经是Nginx
这里是我的截图,可以看到Server行已经变成Nginx

nginx-proxy

 

 

移动飞信接收消息类掉线问题

之前写过一个飞信接收消息的类(http://www.219.me/posts/1098),这个类能够接收飞信消息并做处理(其实其中写了许多的方法,基本能够实现所有飞信的功能),但是这个类的实例总是每半个小时掉线一次,排查了很久没有发现逻辑上存在问题,而且使用相同的cookie再次提取消息没有提示cookie不允许。也就是说cookie是有效的,但是没有办法提取消息了。

经过连续长时间的观察发现,中国移动对用户端的验证还是比较多的,消息中存在拉取group和分组好友的过程,本以为这个过程不会对登陆有影响,但是也正是因为缺少了这个过程,导致飞信无法保持在线,会在半小时后掉线。

最后加入拉取Group和List的过程,能够保持较长时间的在线状态,但是几个小时之后还是会掉线,所以又采取了一些措施,使用Cookie每个小时重新退出登录一次,目前已经测试两天,一个账号已经能够保持每小时登录一次,天天在线,另外一个账号会在退出登录的时候无法再次登录,原因目前未知。两个账号一个账号放在阿里云云服务器,另一个放到SAE。SAE的比较正常一些,阿里云的会掉线。

有人会说现在不是已经有微信了吗?是的,但是某些时候还是会有飞信的需求,而且据我所知,目前许多大学生班级的通知都是使用飞信通知,但许多同学不是移动的号码,所以不能接收到飞信短信,但是有了飞信在线接收消息的类,我们就可以在自己的服务器上开着cron挂着飞信,将飞信消息转发到自己的邮箱或者其他能够通知到自己的地方。
目前已经将飞信与小黄鸡对接,实现飞信机器人的功能,但是小黄鸡API没有有使用量的限制,所以会在一定的对话后失效,这里给出一个飞信机器人的测试账号,如果账号不在线就是无法使用了,如果是手机在线就是机器人在线了,账号是:293609988

服务器安全防护

互联网上每时每刻都存在着各种各样的扫描和攻击,但其中绝大多数的扫描都是盲扫,也就是说有的黑客或者不法分子希望能够猎获更多的服务器或者用户主机来完成一些事情,所以盲扫就是一种猎获大量主机的最好的方法。那在互联网上如何抵御盲扫,尽可能降低服务器沦陷的风险呢?本文将就互联网攻击展开部分讨论,并以部分数据来证明方法的合理性和可行性。

我们都知道,Linux服务器的默认ssh服务端口是22端口,而且国内售卖的绝大多数的vps或云主机提供商提供的服务器默认情况下都是没有对服务器做加固处理,而且系统的相关服务都是采用默认的方式来提供给用户,所以安全防护大多数需要用户自己去做。但是许多新站长都是没有充分经验的或者之前在这方面的经验不足,所以在服务器安全方面的意识不是很高。这是十分危险的事情,因为很可能你的服务器此时正面临着攻击或者已经被黑客攻击。那该如何预防或减少此类攻击事件的发生呢?我们将从以下几个方面来讨论说明如何来对我们的服务器进行加固。

1.更改非公用服务端口

或许你会想问,仅仅只是简单的更改服务端口有什么用呢?

其实我可以使用一段数据来证明,更改服务端口是多么的有用,而且这样做对于抵御盲扫攻击是多么的见效。

小编手里有一台服务器,小编常常用这台服务器做一些对公网的测试。从小编的服务器日志来看,服务器每天经受大量的扫描攻击和主机密码暴力破解,而且尝试主机的root账户登录的现象非常频繁,几乎每天都有成百上千次尝试,当然这只是粗略统计。小编认证查看了这些登录记录,还好没有用户能够成功登录主机,因为小编服务器的密码是字母数字和特殊字符的随机组合产生的随机密码,所以被破解的可能性非常小。但是看到这样的暴力破解,小编心里还是很不爽,一来浪费服务器的资源,虽然帐号登录尝试浪费不了很多的服务器资源,但是每天总是有这样多的一些垃圾日志,小编看着也头痛。所以小编就决心更改ssh服务端口到别的端口,在更改了端口之后,观察了数天,没有发现任何其它人的ssh登录尝试的记录,都是小编自己的成功登录主机的记录,这个数据是完全来自于真实的互联网环境的服务器的数据,完全具有实际的说服力。所以更改非公用服务,比如ssh这样只为管理员提供的服务的端口对于防止网络上的盲扫攻击是十分有用的。这里是更改服务端口之后的记录,每天只有小编自己的登录日志。

ssh-1

而在之前,非法登录是非常多了,包括各种用户口令的猜解,在图中可以看到,该ip使用了不同的用户名来登录主机,而且是在仅仅的几秒之内,而且还可以看到的是,小编也在此时成功登录了主机,却在登录的时候没有察觉到攻击的存在,但日志却很明显的展示给我们主机密码暴力破解时刻存在,包括你正在登录着你的主机的时候,如果不看日志是很难察觉到的。ssh-2

2.开启防火墙策略

防火墙对于拒绝网络攻击也是一个非常有用的工具,许多新站长或主机管理员并未意识到防火墙的重要性,以为只要管理好自己的服务器帐号密码即可保障服务器的安全,其实这是一种十分不对的想法,帐号密码可以用来登录主机,使用主机服务,但是帐号密码的安全性又如何能够保证好呢?如果你的主机上运行着一个web服务程序,而这个web程序存在漏洞,被攻击,不法分子从你的web程序获取到了数据库的帐号密码,那是不是就可以轻而易举的登录你的数据库了呢?

是的。事实绝对是这样的,你的主机数据库也随之沦陷,小编曾经对一台服务器做过安全测试,这台服务器是某地存储几万人当前个人信息和上百万人的历史信息的数据服务器,是sunos,OracleDB,这台服务器的管理员几乎没有对该服务器做任何的安全措施。从而小编轻而易举的登录了主机,从自动备份脚本中获取了数据库的帐号和密码,远程连接数据库,拥有完全的操纵权限,小编当时也感到十分的震惊!

先不讨论上面的服务器存在的诸多安全隐患,返回来说防火墙策略的重要意义。数据库服务器在提供web服务的同时,如果没有对于公网提供直接的数据库访问权限的必要,一定要记得使用防火墙将公网的访问禁止,也就是禁止公网带该主机数据库端口的入站连接。这样即使不法分子通过不法渠道拿到了你的数据库的帐号和密码,也很难直接在公网远程登录你的数据库,这样可以在一定程度上防止黑客的入侵。当然这不是完全之策,最好的方法当然还是有一个足够强度的密码和没有安全漏洞的系统,当然即便是这样,也存在被入侵的可能性,如果能够在此基础上在加一层防火,难道不是更好吗?

小编为了维护主机的安全,也曾涉足过安全渗透领域,了解一些基本的渗透思想和要领,所以在此方面拥有一定的经验,防火墙对于系统安全的重要性十分重要。如果能够将防火墙使用好,你的系统完全可以抵御绝大部分的黑客攻击。

举一个简单的例子,黑客的盲扫工具非常多,在这里不进行说明,但是其中的一些工具有一个基本思想,他们也考虑到效率所以在攻击之前会先确定对方主机是否存活,所以会使用ping命令对对方主机是否存活进行确认,如果没有返回信息则会摒弃对该主机的扫描,进而提高命中率。而如果你的主机开启了防火墙,对外来icmp包不进行响应,则完全可以在一定程度上免于扫描和暴力破解的发生。

好了,今天的这篇文章就先到这里,其实服务器安全防护是一个很大的话题,涉及的领域非常广泛。小编其实是一个比较懒的人,懒得敲下许多文字去记录,所以博客里的文章大多是粗略的概述,其实每一篇文章都是发生在一件非常有意义或者对小编印象非常深刻的事情之后的,小编也非常希望能够有朋友来多多交流经验。