服务器 频道

Linux服务器安全策略详解之Apache配置

  6.3.7  管理Apache服务器访问日志

  1.相关配置文件说明

  一个优秀的Linux网络管理员会密切关注服务器日志系统,这些日志可以提供异常访问的线索。Apache可以记录所有的访问请求,同样,错误的请求也会记录。Apache配置文件中,需要关心的和日志相关的配置文件有两个:

  $ CustomLog /www/logs/access_log common  #记录对Web站点的每个进入请求#

  $ ErrorLog /www/logs/error_log  #记录产生错误状态的请求#

  CustomLog用来指示Apache的访问日志存放的位置(这里保存在/www/logs/access_log中)和格式(这里为common);ErrorLog用来指示Apache的错误信息日志存放的位置。对于不配置虚拟主机的服务器来说,只需直接在httpd.conf中查找CustomLog配置进行修改即可。而对于具有多个虚拟服务器的Web服务器来说,需分离各个虚拟服务器的访问日志,以便对各个虚拟服务器进行访问统计和分析,因此,需要在虚拟服务器配置中进行独立的日志配置。

  2.Web服务器日志轮循

  Web服务器日志轮循比较好的方式有三种:第一种方法是利用Linux系统自身的日志文件轮循机制logrotate;第二种方法是利用Apache自带的日志轮循程序rotatelogs;第三种是使用在Apache的FAQ中发展已经比较成熟的日志轮循工具cronolog。对于大型的Web服务器来说,往往使用负载均衡技术提高Web站点的服务能力,这样后台有多个服务器提供Web服务,大大方便了服务的分布规划和扩展。如果有多个服务器,需要对日志进行合并,统一进行统计分析。因此为了保证统计的精确性,需要严格按照每天的时段来自动生成日志。

  (1)用logrotate实现日志轮循

  首先讨论采用Linux系统自身的日志文件轮循机制logrotate的方法。logrotate是Linux系统自身带的一个日志轮循程序,是专门对各种系统日志(syslog、mail)进行轮循的程序。该程序是由运行程序的服务crond每天凌晨4:02运行的。在/etc/cron.daily目录下可以看到logrotate文件:

  #!/bin/sh/

  $ usr/sbin/logrotate /etc/logrotate.conf

  每天凌晨crond都会启动/etc/cron.daily目录下的logrotate脚本来进行日志轮循。在/etc/logrorate. conf中可以看到如下内容:

  # see "man logrotate" for details

  # rotate log files weekly

  weekly

  # keep 4 weeks worth of backlogs

  rotate 4

  # create new (empty) log files after rotating old ones

  create

  # uncomment this if you want your log files compressed

  #compress

  # RPM packages drop log rotation information into this directory

  include /etc/logrotate.d

  # no packages own wtmp -- we'll rotate them here

  /var/log/wtmp {

  monthly

  create 0664 root utmp

  rotate 1

  }

  # system-specific logs may be also be configured here.

  从logrotate的配置文件中可以看到,除了wtmp以外,需要滚动的日志的配置都保存在/etc/logroate.d目录下。因此只需要在该目录下创建一个名为apache的配置文件,来指示logrotate如何轮循Web服务器的日志文件即可。这种方法的优点是不需要其他第三方工具就可以实现日志轮循。但是对于重负载的服务器和使用负载均衡技术的Web服务器来说,这种方法不是很实用,因为它是对相应服务进程发出一个"-HUP"重启命令来实现日志的截断归档的,这样会影响服务的连续性。

  (2)用rotatelogs实现日志轮循

  Apache提供了不把日志直接写入文件,而是通过管道发送给另外一个程序的能力。这样就大大加强了对日志进行处理的能力。这个通过管道得到的程序可以是任意程序,如日志分析、压缩日志等。要实现将日志写到管道的操作,只需要将配置中日志文件部分的内容替换为"|程序名"即可,例如:

  # compressed logs

  $ CustomLog "|/usr/bin/gzip -c >> /var/log/access_log.gz" common

  这样就可以使用Apache自带的轮循工具rotatelogs来对日志文件进行轮循。rotatelogs基本是按时间或大小来控制日志的。

  $ CustomLog "|/www/bin/rotatelogs /www/logs/secfocus/access_log 86400" common

  上面内容表示,Apache访问日志被发送给程序rotatelogs;rotatelogs将日志写入/www/logs/ secfocus/access_log,并每隔86 400秒(1天)对日志进行一次轮循。轮循以后的文件名为/www/logs/ secfocus/access_log.nnn,这里nnn是开始记录日志的时间。因此,为了将日志按天对齐需要在凌晨00:00启动服务,使得每天轮循得到的日志刚好是完整一天的日志,以提供给访问统计分析程序进行处理。如果是00:00开始生成新的日志,那么轮循得到的日志就是access_log.0000。

  (3)用cronolog实现日志轮循

  首先需要下载和安装cronolog,可以到http://www.cronolog.org下载最新版本的cronolog。下载完毕以后,解压安装即可。这样就完成了cronolog的配置和安装,默认情况下,cronolog安装在/usr/local/sbin下。修改Apache日志配置命令如下所示:

  $ CustomLog "|/usr/local/sbin/cronolog /www/logs/secfocus/%w/access_log" combined

  这里%w表示按照日期在不同的目录下保存日志,这种方式会保存一周的日志。为了进行日志分析,需要每天将该日志文件复制(或移动,如果不希望保存一周的日志)到一个固定的位置,以方便日志分析统计文件进行处理(使用crontab -e)。添加定时任务如下:

  $ 5 0 * * * /bin/mv /www/logs/secfocus/`date -v-1d +\%w`/access_log

  /www/logs/secfocus/access_log_yesterday

  再使用日志统计分析程序,对文件access_log_yesterday进行处理。对于这种情况,各个服务器定义或移动日志文件时就不能使用access_log_yesterday了,而应该带上服务器编号(例如服务器IP地址等信息)加以区分。然后在各个服务器上运行网站镜像和备份服务rsyncd,再将每个服务器每天的安装配置文件通过rsyncd下载到专门进行访问统计分析的服务器上进行合并。合并多个服务器的日志文件(如log1、log2、log3),并输出到log_all中的方法是:

  $ sort -m -t " " -k 4 -o log_all log1 log2 log3

  -m表示使用merge优化算法;-k 4表示根据时间进行排序;-o表示将排序结果存放到指定的文件中。

  3.使用php MyVisites分析Apache日志

  (1)Apache日志分析的原理

  网站服务器日志记录了Web服务器接收处理请求及运行时的错误等各种原始信息。通过对日志进行统计、分析和综合,就能有效地掌握服务器的运行状况、发现和排除错误、了解客户访问分布等,更好地加强系统的维护和管理。Web访问机制非常简单,如图6-4所示。

 

  图6-4  Web访问机制

  ① 客户端(浏览器)和Web服务器建立TCP连接,连接建立以后,向Web服务器发出访问请求(如get)。根据HTTP协议,该请求中包含了客户端的IP地址、浏览器的类型、请求的URL等一系列信息。

  ② Web服务器收到请求后,将客户端要求的页面内容返回到客户端。如果出现错误,那么返回错误代码。

  ③ 服务器将访问信息和错误信息记录到日志文件里。

  日志在实际的Web服务器中有更多的用途,比较典型的是进行网站的流量统计和安全分析。在Web日志中找出攻击Web服务器的蛛丝马迹并不是非常容易的一件事,因为日志中条目繁多,这需要分析访问者的源IP地址和请求的页面,猜测访问者的企图,他是在进行站点镜像还是CGI漏洞扫描,进而做有针对性的查缺补漏。用户更关注的是Web服务器的性能,但对于商务网站来说,不能只在乎用户的要求,不能把精力全放在减少用户访问延迟和提高并发访问数目上。还要关注访问用户的地理分布、时间分布和某个页面的单击率。通过分析用户群和他们的访问行为,有助于对网站页面做出有针对性的改善,帮助商家提高网站质量,更好地为用户服务。日志可以帮你完成流量分析,给出上述关注内容的统计数字。直接去读日志文件仅适用于查找某一特定内容的情况,更多时候,我们要借助专用的日志分析工具。比较著名的工具有AWStats、Webalizer和phpMyVisites等,它们都是开源软件。它们不仅可以进行简单的基于访问时间和IP地址来源的分析,还可以发现自己的网站与搜索引擎的关系。

  phpMyVisites具有以下一些特性:

  -  phpMyVisites是一个用PHP/MySQL技术开发,采用Gnu GPL.方式发布的关于网站访问量统计的开源软件,所以它具有很高的运行效率。在主频为800MHz的机器上,每秒钟可以分析100 000条记录,所以分析一个400M大小的日志文件只需要25秒。

  - 可以支持多种语言,也可以自己进行本地化工作。

  - 支持多种平台,比如UNIX、Linux、Windows和Mac、OS等。

  相对于另外一个优秀的开放源代码的日志分析工具Webalizer,phpMyVisites的优势在于:

  - 界面友好,可以根据浏览器直接调用相应的语言界面(有简体中文版)。

  - 基于PHP,并且很好地解决了跨平台问题,系统本身可以运行在GNU/Linux上或Windows上(安装了PHP后);分析的日志直接支持Apache格式(combined)和IIS格式(需要修改)。Webalizer虽然也有Windows平台版,但目前已经缺乏维护;phpMyVisites可以完全实现用一套系统完成对自身站点不同Web服务器,如GNU/Linux/Apache和Windows/IIS服务器的统一统计。

  - 效率比较高,phpMyVisites输出的统计项目比Webalizer丰富了很多,速度仍可以达到Webalizer的1/2左右,对于一个日访问量百万级的站点,这个速度是足够的。

  - 配置/定制方便,系统提供了足够灵活但默认也很合理的配置规则,而且修改和扩展的插件也比较多;使用简单,不用再看让人头晕的Log日志,提供柱状图分析报表,形象生动。

  - 提供强大的IP库支持,了解访问用户的地区。

  (2)安装使用phpMyVisites

  phpMyVisites的官方网站是http://www.phpmyvisites.net/,最新版本为2.1。

  1)phpMyVisites软件下载。

  #cd var/www/html

  wegt http://www.phpmyvisites.net/index.php?part=download&lg=en

  #unzip  phpmyvisites_2_1.zip "建立一个目录"

  #mv phpmyvisites_2 phpmy2

  2)为phpmy2建立数据库。

  # mysql -u root -p

  Enter password: xxxxxxxxx

  Your Mysql connection id is 3 to server version: 4.11

  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

  Mysql> create database phpmy2 ;      "为phpbb2建立数据库"

  Query OK, 1 row affected (0.01 sec)

  Mysql>grant all privileges on phpmyv2.* to phpmy2@localhost identified by '76543981' ; "将建立的 bblog 权限给bblog 账号,并且设定密码"

  mysql>quit

  Bye

  3)开始安装phpMyVisites。

  安装前需要说明的是,MySQL服务器名称为localhost,这个是MySQL的服务器名称,不是Linux的服务器名称。MySQL数据库名称为phpmy2,MySQL账号为phpmy2,且密码为上面设定值。

  #cd /var/www/html/phpmy2  "进入到Apache 服务器的默认目录中"

  #chmod 777   install    #赋予安装文件和目录的可以执行权限#

  4)网络安装设定。

  网络安装一共九个步骤。

  ① "Welcome!":欢迎设定语言。

  网络安装非常简单,打开Linux的Firefox(火狐浏览器)在地址栏直接输入"http://主机名/phpmy2/ install/install.php"后,首先是语言设定,选择"Simplified Chinese"即可,如图6-5所示。

 

  图6-5  安装首页和管理员页面语言设定

  ② "System Requirements":系统检测。

  系统会自动检测MySQL、PHP、GD库是否设定完成,所有选项显示绿色表示通过。

  ③ "Database Setup":MySQL数据库设定。

  第3部分最为关键,如图6-6所示。

  ④ "Table Creation":数据库表设定。

  选择默认设置即可。

  图6-6  MySQL数据库设定界面

 

  ⑤ "General Setup":常规设定。

  主要设定管理员登录密码和管理员电子邮件,如图6-7所示。

 

  图6-7  常规设定界面

  ⑥ "Create Config File":生成配置文件。

  选择默认设置即可。

  ⑦ "Add First Website":首页显示设定。

  请根据爱好设定。

  ⑧ "Display Javascript code":JavaScript代码设定。

  选择默认设置即可。

  ⑨ "Finished!":安装结束。

  系统如果出现如图6-8所示的界面表示安装成功。

 

  图6-8  安装成功页面

  测试成功后系统提醒你出于安全考虑,删除安装文件(防止他人使用这些文件修改系统信息)。

  // rm -rf install ; // rm -rf install.Php

  ⑩ 管理员登录首页。

  用鼠标单击图6-8页面的链接"Go to phpMyVisites",然后使用管理员权限和密码登录首页即可。首页界面如图6-9所示。

 

  图6-9  phpMyVisites的首页界面

  图6-10是管理员控制面板。

 

  图6-10  管理员控制面板

  phpMyVisites可以分析下列信息:

  - 访问情况统计

  - 时间段汇总

  - 图示统计汇总

  -  Graph to show long term statistics summary 图示某时间段内访问者的访问量

  - 图示每小时服务器的访问量

  - 图示每小时访问者的访问量

  -  Frequency

  - 统计

  -  New vs Returning visits

  -  Graph to show New vs Returning visits

  -  Graph to show number of visits per visitor

  - 浏览页

  - 页浏览

  -  Time by page

  - 图示每页的访问量

  - 访问轨迹

  - 入口页

  - 退出页

  -  Single Pages visits

  - 访问来源

  - 世界地图

  - 访问国家汇总

  -  Internet服务提供商

  图6-11是phpMyVisites的工作界面。

 

  图6-11  phpMyVisites的工作界面

 

0
相关文章