在Linux系统中安装系统日志服务器

早在1997年本人担任Linux管理员时,搭建集中式系统日志服务器是最先要完成的真正的系统管理任务之一。我当时的上司想获取来自众多硬件设备的日志文件,要求我使用正则表达式regexp),搜索日志文件寻找某些关键词。当年Linux还处于初期阶段,而我在空闲时一直在捣鼓Linux。于是,我不失时机地把Linux引入到了当时效力的那家公司。Linux行不行?当然行!本文要介绍的不仅仅是如何搭建集中式syslog-ng下一代系统日志工具)服务器,还要介绍为什么你要着手搭建这样一台服务器。

www.hj8828.com,公司最近不断地增加服务器,但大量的日志查看起来又非常不方便,通过一些专用的日志查看工具(multitail、System
Log
Viewer、swatch等)是方便不少,但一台一台的查看也很烦啊。针对这一点,我们现在就来把多个主机的系统日志集中收集到一个主机上来管理,即Linux上的中央系统日志服务器。一般意义上的日志服务器是指,S/C模式下用于专门存放系统日志或者程序日志的服务器。

对管理员来说,日志非常有用,但大量的日志又很麻烦。当一些事件运行错误时,日志可以对故障排除起到至关重要的作用,特别是在安全性相关问题上。但是如果攻击者危害到你的主机,日志将会告诉你,对于主机来说这很有用;你需要给数据中心发信息。保护日志非常重要,一个中央日志服务器会更容易管理、分析和查找它们。针对这一点,我将向你展示如何把多个主机的系统日志集中收集到一个主机上来管理,即Linux上的中央系统日志服务器。

那么,系统日志是什么东西?系统日志在Linux中用于将系统消息记入日志。下一代系统日志工具在1998年开发而成,只是对早期的系统日志工具作了改写。截至2010年,下一代系统日志工具仍由BalaBit
IT
Security公司在积极开发,拥有的功能特性要多得多,其中包括更好的TCP处理、对消息采取TLS加密以及将消息发送到数据库等等。一些Linux发行版允许你安装系统日志工具、rsyslog或者下一代系统日志工具。本文重点介绍下一代系统日志工具,因为这个工具更新颖;如果读者愿意,可以在之后选择拥有下一代系统日志工具软件的公司的企业版,以获得“支持”。

之前也有用过cacti的syslog插件来监控服务器的日志,但cacti主要是用来监控系统状态和服务的,大量的日志不断地传送到cacti服务器上,一旦弄不好cacti服务器就挂掉了,所以最好的办法就是将日志监控和cacti分开,这样就不会影响到cacti的正常监控了。

首先,所有集中的系统日志服务器都应该建成一个安全和硬化的主机。在主机上没有一点关于保护和集中化你们日志方面。其次,你怎样能从你的主机上获得日志呢?

刚才简要介绍了下一代系统日志工具,接下来谈谈你为何要用集中式下一代系统日志工具服务器。我就说说两个主要的理由。第一个是出于安全目的。如果你的路由器、防火墙、交换机、Linux服务器及/或其他硬件指向一台安全可靠的集中式下一代系统日志工具服务器,要是有人的确企图攻击上述的其中一个设备,可以把日志文件安全地存放到让人放心的异地位置。如果系统日志文件存放在设备上,这无异于让攻击者能够抹掉痕迹。诚然,攻击者能够禁用将日志文件发送到外部下一代系统日志工具服务器的功能,但是在此之前的所有连接都将位于集中式系统日志服务器上。另一个理由是为了方便起见。比如说,如果你有一台服务器崩溃了,毫无反应,你就可以检查集中式系统日志服务器上的内核错误日志。如果你想检查在一段较长时间内不同日期之间的系统日志模式,只要使用正则表达式,搜索来自集中式系统日志服务器的日志文件。

一、Linux系统日志简介

让我们开始安装中央系统日志服务器。我将举例说明如果使用rSyslog,实际的标准Linux系统日志。Ubuntu和红帽常使用它,并且通过文件/etc/rsyslog.conf进行管理。文件中包含许多指定的特殊系统日志:有的是控制台方面的,有的是文件方面或其它主机的。

那么,我平时怎么做的呢?实际上,这两种方法我在家里都用。我的设备和服务器不但把它们的所有系统日志文件转发到某个集中式位置,而且这个位置严加保护起来。所说的那台机器是一个虚拟机,只有1个端口开着系统日志端口),只能从本地机器来访问,系统日志文件而放在外部驱动器上。这么做是不是过于小心谨慎?也许有点吧。但我的确知道,在我家这个环境中,如果外部驱动器装满了太多的系统日志文件,它不会导致虚拟机崩溃。要是虚拟机果真出现了什么岔子,主机操作系统也不会受到影响。如果有人果真可以访问我的其中一个设备,他也没有办法访问我的系统日志服务器。没错,要是我的主机操作系统遇到了什么问题,那么访客虚拟机就会有问题;但是我们总是无法做到事事都能防备。我得承认,这么做太过小心谨慎了;对大多数人来说,这么做可能有些过了。

在Linux系统中,服务器会产生大量的日志,根据一般的日志的分类,可以把日志分为以下三种:

首先,我们需要载入合适的TCP和UDP插件以支持接收系统日志。把下面的代码添加到rsyslog.conf的头部:

开始入手之前,有必要先声明一下。首先,与我之前写的所有文章一样,这里的所有测试是用Debian来完成的。本文中,我针对Debian
6.0.1设置了虚拟机,因而你的情况可能不一样。另外,我不会深入探讨如何合理保护你的服务器、把系统日志文件放在哪里最合适,或者如何设置除下一代系统日志工具之外的一切。本文就介绍集中式下一代系统日志工具服务器的基本方面。

连接时间日志–由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。

$modload imtcp
$modload imudp
$InputTCPServerRun 10514
$UDPServerRun 514

进程统计–由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。

载入的这两个模块能支持监听TCP和UDP的端口,并且指定哪个端口来接受事件,在这种情况下,使用TCP的10514端口和UDP的514端口。你需要确认一下本地防火墙在你的主机和中央系统日志服务器之间的防火墙)

错误日志–由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。

下面我们需要指定一些规则来告诉rSyslog在哪放输入事件。如果你不添加任何规则,输入事件将按照本地的规则进行处理,并且与本地主机的事件交织在一起。我们需要在上面添加节之后和本地处理系统日志之前来正确的指定这个规则,例如: