Rootop 服务器运维与web架构

2014-09-05
发表者 Venus
nginx拒绝某个IP访问已关闭评论

nginx拒绝某个IP访问

最近发现有个ip一直对rootop.org站点扫描web,判为恶意攻击,那就用nginx拒绝其访问。
(iptables也可)

在nginx主配置文件或者虚拟主机的配置文件 server { } 段中加入一行:

include denyip.conf;  //可自定义名字比如 ip.txt

在nginx下的 conf 目录创建 denyip.conf 文件内容为:

deny 28.5.0.218;

保存退出,reload一下nginx生效。
多个ip的话就写多行,并且支持ip段写法。

deny IPADDR;          //拒绝单个
allow IPADDR;         //允许某个

deny all;              //拒绝所有IP
allow all;            //允许所有

网段写法:
deny 10.0.1.0/24;

允许某几个:
allow 192.168.0.100
allow 192.168.0.101
deny all;

加到deny中的IP再访问nginx的时候就提示403错误。
通过这种方法在线上环境中比较有用的是对phpmyadmin,或者网站后台之类的做权限控制,phpmyadmin的漏洞hacker们用的还是比较多的,反正我是因为phpmyadmin忘记关被黑了两次。这样一来限定指定IP可以访问phpmyadmin,相对提高了server安全性。
当然,把phpmyadmin做成单独一个虚拟主机,换个不常用的端口,甚至修改phpmyadmin名称让hacker无法猜出路径也是不错的办法。

2014-09-03
发表者 Venus
centos6.5安装docker已关闭评论

centos6.5安装docker

安装docker,添加epel源:
[root@varnish ~]# wget -c http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@varnish ~]# rpm -ivh epel-release-6-8.noarch.rpm
导入公钥:
[root@varnish ~]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
安装docker:
[root@varnish ~]# yum install -y docker-io
[root@varnish ~]# service docker start
[root@varnish ~]# chkconfig docker on

查看docker信息:

[root@varnish ~]# docker info
Containers: 2
Images: 33
Storage Driver: devicemapper
 Pool Name: docker-252:1-918311-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 1748.4 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 2.5 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 2.6.32-431.el6.x86_64

从docker网站下载ubuntu镜像
[root@varnish ~]# docker pull ubuntu

用ubuntu输出hello world
[root@varnish ~]# docker run ubuntu /bin/echo hello world

列出已有的镜像:

[root@varnish ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04.1 c4ff7513909d 3 weeks ago 213 MB
ubuntu latest c4ff7513909d 3 weeks ago 213 MB
ubuntu 14.04 c4ff7513909d 3 weeks ago 213 MB
ubuntu trusty c4ff7513909d 3 weeks ago 213 MB
ubuntu utopic 75204fdb260b 3 weeks ago 226.4 MB
ubuntu 14.10 75204fdb260b 3 weeks ago 226.4 MB

当镜像下载成功后,可以看到12位的hash值像c4ff7513909d,这是下载完整的镜像的精简ID。
这些短的镜像ID是完整镜像ID的前12个字符,可以使用docker inspect 或者 docker images -notrunc=true来获得完整的镜像ID

进入ubuntu命令行:
[root@varnish ~]# docker run -i -t ubuntu /bin/bash

安装apache:

root@70cc135faece:/# sudo apt-get install apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package apache2
提示找不到apache2这个包。
root@70cc135faece:/# sudo apt-get update //先更新软件包库
root@70cc135faece:/# sudo apt-get install apache2
root@70cc135faece:/# service apache2 start
root@70cc135faece:/# netstat -an | grep 80
tcp6 0 0 :::80 :::* LISTEN

执行exit退出容器,再执行 docker run -i -t ubuntu /bin/bash 发现apache没了。包括IP信息都变了。
这是因为刚才是根据ubuntu镜像启动了一个新的容器,退出时,也就关闭了。要继续使用的话,需要将其提交到仓库中。

查看之前启动的容器ID:

[root@varnish ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c230803e75f 140630ae71cc /bin/bash 30 minutes ago Exited (130) 5 seconds ago ecstatic_bardeen
c06c6365282d ubuntu:14.04 /bin/bash 32 minutes ago Exited (127) 32 minutes ago drunk_poincare
d4ea5b21512f ubuntu:14.04 /bin/bash 44 minutes ago Exited (0) 33 minutes ago happy_feynman
542b4a79ab7b ubuntu:14.04 /bin/bash 48 minutes ago Exited (130) 46 minutes ago

根据提示,5秒之前退出的应该是我之前安装过apache的容器。
将其提交到仓库中:

[root@varnish ~]# docker commit d4ea5b21512f apache //CONTAINER ID + 别名 用于描述容器作用
f8e04197e16217a6580c31b4cc23198fde93d299fc9c8a2b4f0318625f276721 //返回一个唯一字符串,可以自定义名字。
下次启动:
[root@varnish ~]# docker run -t -i f8e04197e16217a6580c31b4cc23198fde93d299fc9c8a2b4f0318625f276721 /bin/bash //或者用别名

暂时记录到这里,回头继续。

删除单个镜像:

[root@varnish ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04.1 c4ff7513909d 3 weeks ago 213 MB
ubuntu 14.04 c4ff7513909d 3 weeks ago 213 MB
ubuntu trusty c4ff7513909d 3 weeks ago 213 MB
ubuntu 14.10 75204fdb260b 3 weeks ago 226.4 MB
[root@varnish ~]# docker rmi c4ff7513909d //IMAGE ID
Untagged: ubuntu:14.04
Untagged: ubuntu:14.04.1
Untagged: ubuntu:trusty
Deleted: c4ff7513909dedf4ddf3a450aea68cd817c42e698ebccf54755973576525c416
Deleted: cc58e55aa5a53b572f3b9009eb07e50989553b95a1545a27dcec830939892dba
Deleted: 0ea0d582fd9027540c1f50c7f0149b237ed483d2b95ac8d107f9db5a912b4240
Deleted: d92c3c92fa73ba974eb409217bb86d8317b0727f42b73ef5a05153b729aaf96b
Deleted: 9942dd43ff211ba917d03637006a83934e847c003bef900e4808be8021dca7bd
Deleted: 1c9383292a8ff4c4196ff4ffa36e5ff24cb217606a8d1f471f4ad27c4690e290

删除所有镜像:

[root@varnish ~]# docker rmi $(docker images | awk '{print$3}' | grep -v "IMAGE")

删除单个容器:

[root@varnish ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9408857e0cee centos:centos6 /bin/bash 3 seconds ago Up 2 seconds condescending_tesla
8d5a7b7a509c centos:centos6 /bin/bash About a minute ago Up About a minute focused_franklin
7a160e291b0c apache/centos6:latest /bin/bash 8 minutes ago Up 8 minutes loving_sammet

首选需要停止容器运行
[root@varnish ~]# docker stop 9408857e0cee //停止容器
9408857e0cee
[root@varnish ~]# docker rm 9408857e0cee //rm删除
9408857e0cee

[root@varnish ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d5a7b7a509c centos:centos6 /bin/bash 2 minutes ago Up 2 minutes focused_franklin
7a160e291b0c apache/centos6:latest /bin/bash 9 minutes ago Up 9 minutes loving_sammet

删除所有容器:

[root@varnish ~]# docker stop $(docker ps -a | awk '{print$1}' | grep -v "CONTAINER" )
8d5a7b7a509c
7a160e291b0c
[root@varnish ~]# docker rm $(docker ps -a | awk '{print$1}' | grep -v "CONTAINER" )
8d5a7b7a509c
7a160e291b0c
[root@varnish ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@varnish ~]#

2014-08-30
发表者 Venus
Permission denied: /mnt/data/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable已关闭评论

Permission denied: /mnt/data/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable

这个错误比较奇怪,也是第一次遇到,在apache中创建了一个新的站点,目录为/mnt/data/test ,发布以后,访问提示权限错误,打不开项目。检查日志发现错误:

Permission denied: /mnt/data/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable

说无法检查htaccess文件,可以这个是静态网站,没有伪静态规则,其次资料说是权限问题,把网站根目录权限改为755,但是根目录已经是755,后来发现,上级目录权限不对,因为data也是新建的,但是不知道权限为什么默认为700,把/mnt/data目录改为755解决。

分析:

data目录默认为700,root拥有所有权限,其他组几其他用户没有权限访问,导致apache运行账户没有权限访问网站根目录,导致报错。

其次,为什么root创建的目录会为700,linux默认的umask值为0022,但是这台机器创建的文件夹权限为755,不知道umask值怎么改变的。

原因:

默认linux下/etc/profile对umask定义为:

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 umask 002
else
 umask 022
fi

但是这台机器配置为:

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 umask 077
else
 umask 077
fi

不知道是万网修改的还是别人改的。

2014-08-15
发表者 Venus
nagios添加新的主机监控刷新显示再刷新几次又不显示已关闭评论

nagios添加新的主机监控刷新显示再刷新几次又不显示

nagios添加新的主机监控刷新显示再刷新几次又不显示,这个问题弄的无比纠结,以为是浏览器缓存问题,换了几个还是这样,重启nagios服务还是如此,无意间ps了一下,发现启动了两个nagios进程。

找到问题了,用kill杀死,重新启动,问题解决。

至于为什么这样,可能是之前重启服务器的时候没找到锁文件,导致启动了俩进程,一个进程是没添加之前的另一个是添加之后的,导致出现问题。

之前出现的错误:

[root@nagios objects]# service nagios restart
Running configuration check…done.
Stopping nagios: No lock file found in /usr/local/nagios/var/nagios.lock
Starting nagios:This account is currently not available.
done.

2014-08-14
发表者 Venus
ustack-技术在于折腾-测试小型负载项目已关闭评论

ustack-技术在于折腾-测试小型负载项目

最近闲来无聊,画了个拓扑图,照着做了。正好发现北京一家公司基于openstack做二次开发,现在公测,申请邀请码,充值开始测试,现在充多少返多少!

ustack官网:https://www.ustack.com/

上图。

抛开防火墙、交换。ustack已经把网络该做的都搞定了。只需要部署项目即可。

想法:

用户请求数据,数据先发送到nginx反向代理,反向代理配置了两台后端lamp服务器,为啥用apache呢?因为我赶脚它跑php还是比较稳定的,问题相对nginx来说要少。让nginx去处理高并发,apache去解析动态请求。然后通过nginx负载均衡策略,默认轮询,分发到第一台lamp机器,服务器建立会话,将用户session放到memcached中共享,解决了session会话保持功能,这里没用nginx自带的ip_hash。下一步服务器开始请求php去解析动态请求,开始去mfs中找,所有的程序及媒体资源都在mfs中。这样解决了服务器之间数据一致性问题,也可以解决程序版本更新的重复性。如果并发又高了,可以采用fastdfs了,相率更高一些。我这里只是小小的测试玩玩而已。用户开始登陆了,会话分发到第二台服务器,查询资源,身份认证,去公共的mysql服务器上查询了。因为环境的问题,这里mysql没有做高可用,可以做mysql读写分离或者是mysql集群。这里以前都测试过,只是ustack中配额限制10台云主机,默认20个vcpu,50G内存。懒得再去申请,要不可以再把mysql集群加上。或者再延伸一下,再加一组nginx负载均衡,再加2台web服务器。通过dnspod域名解析实现dns轮询。这样用户负载又可以提高了。上午测试,将nginx带宽提高到30M,配置4核4G,压力测试到350,还可以撑起来,再高,就打不开了。当然其中需要内核优化,mysql优化。apache和nginx的优化,总之就是调参数调参数。

技术在于折腾~~~

http://ustack.rootop.org   (不敢保证啥时候就下线了。木有钱啊~~~撑起这么多机器,每天的费用对于个人来说不少了。)

说说ustack,按量计费,特别的精确,默认提供20个vcpu,50G内存。10台云主机,3个ip,可以在线申请提高配额。

在微博里@了一下 程辉 ,UnitedStack联合创始人 & CEO 。很热心有木有。

总体来说,平台开发的还不错。我这只是在于折腾~结束。