本文 9872 pv

2

我在云服务器上的配置

© kekehu / 技术资源 / 2014.11.03 / 10:20 / 9872PV

更换云服务器有一阵了,相对于我以前的虚拟主机不是一个档次。就比如说我在虚拟主机上被人放了后门文件,我把虚拟主机上的文件传到云服务器的时侯云服务器立马就报警存在漏洞,最主要的还是可控性。
一些配置记录下:
一、配置Nginx处理日志
    1、设置nginx日志格式(data/server/nginx/conf/nginx.conf)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
    2、配置Nginx日志按天截断
         2.1、日志logrotate
/data/log/nginx/access/*.log {
    daily
    #dateext
    rotate 1
    missingok
    ifempty
    nocompress
    olddir /data/log/nginx/access/days
    sharedscripts
    postrotate
        [ ! -f /data/server/nginx/logs/nginx.pid ] || kill -USR1 `cat /data/server/nginx/logs/nginx.pid`
    endscript
}
取文件名为nginx,存放在/etc/logrotate.d目录下。logrotate方式比mv有很多优势,自行google.不多说。
        2.2、编写日志处理脚本
#!/bin/bash
/usr/sbin/logrotate -vf /etc/logrotate.d/nginx
time=$(date -d "yesterday" +"%Y-%m-%d")
cd /data/log/nginx/access/days
for i in $(ls ./ | grep "^\(.*\)\.[[:digit:]]$")
do
mv ${i} ./$(echo ${i}|sed -n 's/^\(.*\)\.\([[:digit:]]\)$/\1/p')-$(echo $time)
done
for i in $(ls ./ | grep "^\(.*\)\-\([[:digit:]-]\+\)$")
do
tar zcvf ${i}.tar.gz ./${i}
/bin/rm -rf ./${i}
done
find /data/log/nginx/access/* -name "*.tar.gz" -mtime 30 -type f -exec /bin/rm -rf {} \;
简单说明:执行Logrotate,把日志存放到/var/log/nginx/days目录,文件名末尾加上昨天的日期,打包成tar.gz格式,超过30天的文件自动删除
        2.3、向crontab中添加定时任务
crontab -e
1 0 * * * /data/shs/nginxlogcut.sh > /dev/null 2>&1

二、日志分析
    1、AWStats安装
如果YUM里已经添加了rpmforge的源就比较简单了,直接yum install即可,如果没有:
yum install perl-libwww-perl.noarch
wget http://prdownloads.sourceforge.net/awstats/awstats-7.0-1.noarch.rpm
rpm -ivh awstats-7.0-1.noarch.rpm
cd /usr/local/awstats/tools/
./awstats_configure.p
    2、Awstats配置
因为往往要分析多个站点的日志,为了简化操作
cp awstats.model.conf common.conf
修改其中几个选项:
    #vi common.conf    
    DNSLookup=0 #关闭DNSLookup可以提升99%的效率
    DirData="/data/awstats/data" #指定统计数据存放的目录
    SkipFiles="REGEX[^*\.gif] REGEX[^*\.jpg] REGEX[^*\.css] REGEX[^*\.js]" #不分析图片/样式表和js文件
    NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" #非页面文件  
    LoadPlugin="tooltips" #显示每个统计项目的提示
    LoadPlugin="decodeutfkeys" #UTF8编码问题
    LoadPlugin="qqhostinfo" #加装的利用纯真IP库判断方可归属地
修改LIMITFLUSH加快处理速度,有效提高统计的速度(减少磁盘IO),并避免按月汇总数据导致的统计文件过大
#vi /usr/local/awstats/wwwroot/cgi-bin/awstats.pl
    $LIMITFLUSH =
    50000; # Nb of records in data arrays after how we need to flush data on disk
3、我的统计实例
    #vi /etc/awstats/awstats.www.geekso.com.conf
    Include "common.conf"
    LogFormat=1 #指定日志格式,×nix为1,iis为2
    LogFile="zcat /data/log/nginx/access/days/geekso.log-%YYYY-24-%MM-24-%DD-24.tar.gz |"
    #LogFile="/var/log/iislogs/v/ex%YY-24%MM-24%DD-24.log"
    #LogFile="/var/log/nginx/crsay.geekso.log-%YYYY-24-%MM-24-%DD-24"
    SiteDomain="www.geekso.com"
    HostAliases="geekso.com"
    DefaultFile="index.html"
    DirData="/data/www/awstats/data"
    AllowAccessFromWebToAuthenticatedUsersOnly=1
    AllowAccessFromWebToFollowingAuthenticatedUsers="geekso"
    3、编写日志分析脚本
#!/bin/bash
ilog=/data/www/awstats/logcron/awstats_cron.log
awscripts=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
awpages=/usr/local/awstats/tools/awstats_buildstaticpages.pl
echo "">>$ilog
echo Starting Awstats on: $(date) >>$ilog

perl $awpages -update -config=www.geekso.com -lang=cn -dir=/data/www/awstats/geekso -awstatsprog=$awscripts

#perl $awscripts -update -config=site2
#perl $awscripts -update -config=site2 -databasebreak=day

#perl $awscripts -update -config=site3
#perl $awscripts -update -config=site3 -databasebreak=day

echo Ending Awstats on: $(date) >>$ilog
echo "------------------------------" >>$ilog
    4、向crontab中添加定时任务
#crontab -e
1 1 * * * /data/shs/awstats.sh > /dev/null 2>&1

附:
AWStats统计指标说明:
参观者:按来访者不重复的IP统计,一个IP代表一个参观者;
参观次数:一个参观者可能1天之内参观多次(比如:上午一次,下午一次),所以按一定时间内(比如:1个小时),不重复的IP数统计,参观者 的访问次数;
网页数:不包括图片,CSS, JavaScript文件等的纯页面访问总数,但如果一个页面使用了多个帧,每个帧都算一个页面请求;
文件数:来自浏览器客户端的文件请求总数,包括图片,CSS,JavaScript等,用户请求一个页面是,如果页面中包含图片等,所以对服 务器会发出多次文件请求,文件数一般远远大于文件数;
字节:传给客户端的数据总流量;
来自REFERER中的数据:日志中的参考(REFERER)字段,记录了访问相应网页之前地址,因此如果用户是通过搜索引擎的搜索结果点击 进入网站的,日志中就会有用户在相应搜索引擎的查询地址,这个地址中就可以通过解析将用户查询使用的关键词提取出来。
参考引用地址:http://www.crsay.com/network/analytics-nginx-log-with-awstats.html

三、防止跨目录访问
你的服务器www目录下有多个网站,当某一个网站被人攻进去后,如果你没有做跨目录访问,那么他都能看到www目录下的所有文件,甚至服务器上的系统目录文件。
做法是在nginx下的conf目录下为每个站点的conf设置open_basedir访问的目录
fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/:/data/www/geekso/";
四、禁用危险的函数
php.ini建议禁止的函数如下:
disable_functions = pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, eval, popen, passthru, exec, system, shell_exec, proc_open, proc_get_status, chroot, chgrp, chown, ini_alter, ini_restore, dl, pfsockopen, openlog, syslog, readlink, symlink, popepassthru, stream_socket_server, fsocket, chdir
五、PHP Zend Opcache 安装
opcache包下载地址:http://pecl.php.net/package/ZendOpcache
1、wget http://pecl.php.net/get/zendopcache-7.0.2.tgz

tar zxvf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
2、修改PHP.INI配置文件,在配置文件末尾添加:
[opcache]
zend_extension= "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.enable=1
保存后,重启服务。查看phpinfo是否加载了zendopcache
六、数据库
为每个网站配置只有访问当前网站数据库权限的用户名与密码。

本文有 2 篇评论

  1. @ OBNY 说 :
    2015.02.04 10:21
    avatar

    zan

  2. @ goodluck 说 :
    2015.01.20 10:57
    avatar

    zan

1/1 第一页 1 最后页

发表你的见解

打开HTML 打开UBB 打开表情 隐藏 记住我
emotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemot
emotemotemotemotemot