Linode下从0开始调教centos6.6

最近手痒弄了台1G内存的Linode来玩玩,我最近正好在补linux有关的知识,也打算写点自己的东西放上面。本来打算买国内阿里云的,可是阿里云实在是太贵了,而且感觉备案还忒麻烦。

Linode是东京机房的,用chinaz的ping工具发现国内各地的响应时间在50~100ms,完爆Digital Ocean的200~300ms,就是容易被墙,我开通的Linode的默认IP就是被墙了的,给发ticket提交了mtr网络检测报告后换了个IP才正常的。

现在手里是一台裸的只有ssh的root账号的centos6.6,我会把它从0开始配置成对我来说比较顺手的生产环境。

我用的ssh客户端是putty,用putty连ssh有个技巧是Connection选项里“Sending of null packets to keep session active”这里写上几十秒就能避免很久不操作putty导致ssh断掉的情况。

用putty连上centos之后,首先安装EPEL源:

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

然后用crontab每天2点定时凌晨更新:

crontab -e
//进入vim加入:
0 2 * * * yum update -y
//wq退出

然后修改时区:

[root@li741-102 ~]# cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime

修改完后用date指令得到中国北京时间。

然后,还是先把舰娘环境搞起来吧~
最近封vpn封的厉害,所以还是傻瓜式的shadowsocks代理来吧,shadowsocks感觉最方便的还是python环境的,那么开始:

yum install python-pip -y
pip install shadowsocks

简单2行就搞定了,然后是按照shadowsocks.org的官网指导写好配置文件:
config.json

{
    "server":"0.0.0.0",
    "server_port":443,
    "password":"yourpassword",
    "timeout":600,
    "method":"aes-256-cfb",
    "workers":5
}

server的iP全为0可以适应自己的任何ip,比较合适;然后server_port设置为443我的主观直觉是和https混淆,也许有助于是流量逃过GFW的眼睛吧;method官网说了aes-256-cfb最安全;至于官网列出的”local_port”参数我改了一下发现没用,浏览器都是走本地的8118的端口;然后workers我上了5个,基本就这样了。然后在当前config.json路径下运行ssserver,ssserver这只python程序会在当前路径下读取config.json参数,然后提供shadowsocks代理服务。

shadowsocks的客户端挺多的,安卓我用的影梭,windows客户端我用的一款yingwa的GUI,连上后发现速度比Digital Ocean快很多。

当然了vps在shell里启动ssserver之后程序一直占用这bash,当然可以nohup ssserver &这样,不过如果nps关机了就失效了,于是加上开机启动选项。在/etc/rc.local里加上:

nohup ssserver -c /home/shadowsocks/config.json &

那么reboot一下,没问题~

google查看了一下自己的IP的确是日本IP,然后访问舰娘的page,发现自己ip仍然被认为是国内,然后百度了一下自己的ip是国内ip……google和百度的结果居然不一样,大概是google默认你的ip是代理服务器的ip吧,也就是说百度、google和舰娘的dmm站点都能知道我在用代理并且知道我的源ip的。这样岂不是搞了半天还是玩不上游戏么?
其实我用的yingwa客户端有个选项是tunnel all traffics,勾选上后百度自己的ip就变成日本ip了,然后去舰娘dmm主页可以开玩了了。

因为使用ssh密码登录可能被人穷举密码,实际上我开通linode的这一天时间里通过lastb |wc -l就有10000多次尝试。所以这里我开启ssh密钥登录,下面选择文件夹保存密钥直接回车默认会保存在/root/.ssh下,passphrase空白回车生成没有passphrase的密钥。其实这个passphrase只是对称加密了你的私钥,你用私钥登录时如果设置了passphrase就会要求你用这个passphrase来解密得到私钥,但是有些软件不支持带passphrase的私钥,比如filezilla的sftp,所以这里我把passphrase留空:

[root@li741-102 log]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

用filezilla的sftp登录主机,把私钥id_rsa复制下来,把id_rsa删掉,并且把id_rsa.pub权限改成400,并且重命名为authorized_keys。然后在/etc/ssh/sshd_config中把这两行的注释去掉:

RSAAuthentication yes
PubkeyAuthentication yes

重启sshd,service sshd restart。
下载下来的id_rsa私钥和putty格式不同,这里使用puttygen.exe里load选定id_rsa,其余选项默认,然后save private key。程序会警告你你passphrase为空,这是预料之中的无视之,即可得到ppk拓展名的putty格式的私钥。
接下来打开putty,填上主机ip,然后在”Connect”->”SSH”->”Auth”里面”Browse”选定刚才生成的putty私钥,连接到主机后以root登录就不需要密码提示登录成功了。
现在只需要关闭用密码登录ssh就行了,在/etc/ssh/sshd_config里把PasswordAuthentication yes 修改成 PasswordAuthentication no,然后重启sshd就OK了。
现在已经无法使用密码登录主机了,到此成功设置了密钥登录主机。

现在这台centos6.6的linode VPS基本上就调教的差不多了,EPEL源装上了,这里直接yum install就可以把iftop和htop工具装上了。
完了后free -m发现基本干净的centos6.6占100M的内存吧,iftop查看了一下流量没有问题。
最后rpm -Va查看了一下各个软件包的修改情况,都没问题,这样基本上就把这台主机调教好了。

最后再说一说我最近的一些心得吧,之前读到一篇因为php文件上传导致的漏洞,对于cms本身限制php文件上传的保险如果失效的情况下,我们可否在nginx里面限制呢?

这篇博客提到了location匹配upload的办法,我实际中配置的时候发现如果我这里匹配了upload,那我另外还有一个防盗链的也是在upload路径下无法匹配也就失效了,这里我想了一下觉得直接在location *~ \.php这里过滤比较好,wordpress的上传目录是wp-content/uploads,我试了一下find . -name ”*uploads*“发现只有该目录含有uploads关键字,所以可以这样配置nginx虚拟机:

		location ~ \.php$ {

		#防止上传目录执行php文件

		if ( $uri ~ uploads ) {
			return 403;
		}
    		root           /home/qsalg;#/usr/share/nginx/html;
			fastcgi_pass   127.0.0.1:9000;
			fastcgi_index  index.php;
		#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
			fastcgi_param SCRIPT_FILENAME /home/qsalg$fastcgi_script_name;
			include        fastcgi_params;
		}

我配置上面规则之前在uploads目录下做了一个:

echo "<?php phpinfo()" > index.php

然后访问http://qsalg.com/wp-content/uploads/index.php发现可以解析php,配置规则之后就返回了403了,达到了我的需求……最后必须吐槽一下wp-statistics这个插件,把php文件生成在uploads下是搞笑么……

最后这几天复习了一下鸟哥的linux私房菜,准备在linode上试试selinux,结果发现无法启动,一搜才知道原来linode定制的centos没有把selinux编译进内核,在知乎上看selinux的thread也都是倾向于把selinux关掉的声音,看来selinux很不受欢迎啊……最后按照《鸟哥的linux私房菜》一样在另一台vps上把selinux装上了,把setroubleshoot之类的工具套件熟悉了一下,在根目录下随便建立一个这样的php:

<?php
$f=fopen("/etc/passwd", 'r');
while(!feof($f))
{
echo fgets($f);
}

然后发现php还是成功的解析了passwd,我比较无语,不打算深究这个东西,把selinux套件卸载了。

但是这也反映了我的php环境的确不太安全,所以在php.ini里面把一些函数禁用,大概有:[phpinfo,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source],然后建立了一份.user.ini在网站根目录下来限制php的文件访问路径。其实不要指望这个有太大作用,因为如果被人拿到了webshell,这个也只是限制php的当前路径,别人依然可以访问主机里的任何资源。但是如果我们禁用了php的一些危险函数,那么webshell就会被限制在.user.ini目录下,而且无法调用linux指令,算是一点补救的办法吧。

顺便把定期把网站源码打包下载以及mysql数据库备份
顺便安装remi源:

rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

安装nginx:http://nginx.org/en/linux_packages.html
mysql直接安装remi源,用remi源安装php56和php-fpm56注意先search,默认是php54的

Linode下从0开始调教centos6.6》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注