构建日志系统 |
| 来源:本文出自: 作者: (2001-10-11 12:00:02) |
|
log是管理员每日需要查看的文件记录。里面记载了大量系统正常和不正常的运行信息,
对管理员分析系统的状况,监视系统的活动是一个相当重要的部分。如何有效的利用
系统的log来 分析和定位攻击的可能呢?我将在下面的文章,介绍一下有关syslog如
何配置和如何使用第三方 工具检查问题。
/etc/syslog.conf文件
设备.行为级别 [;设备.行为级别] 记录行为
注意各栏之间用[Tab]来分隔,用空格是无效的。
注释:
第一栏:设备 描述
auth认证系统,即询问用户名和口令
cron 系统定时系统执行定时任务时发出的信息
daemon某些系统的守护程序的syslog,如由in.ftpd产生的log
kern 内核的syslog信息
lpr 打印机的syslog信息
mail 邮件系统的syslog信息
mark 定时发送消息的时标程序
news 新闻系统的syslog信息
user本地用户应用程序的syslog信息
uucp uucp子系统的syslog信息
local0..7 种本地类型的syslog信息,这些信息可以又用户来定义
*:代表以上各种设备
第二栏:行为级别 描述(危险程度递加)
debug 程序的调试信息
info 信息消息
notice 要注意的消息
warning 警告
err 一般性错误
crit 严重情况
alert 应该立即被纠正的情况
emerg紧急情况
none 指定的服务程序未给所选择的
第三栏:记录归属(举例) 描述
/dev/console send messages to devices 控制台,实际上是可以任何合法的设备名
/var/adm/messages write messages to files 写入/var/adm/messages,定义这里可
以分类
写到不同的log文件中@loghost forward messages to a loghost 其他的日志记录服
务器. 也叫loghost主机fred,user1 send messages to users 传送消息给某用户
(但此用户正登陆的时候可以看到)
*:send messages to all logged-in users 传送消息给所有的在线用户
@符号后面可以是ip,也可以是域名,默认在/etc/hosts文件下loghost这个别名已经指
定给了本机。
另外这一栏也支持m4的宏,下面我们看到的是一个标准的m4宏。在syslog.conf里可以通过
define(`LOGHOST`,hostname)来定义LOGHOST这个常量,注意的是这个LOGHOST可以不是
/etc/hosts下 的loghost这个别名所指向的主机.
ifdef(`LOGHOST', ,
user.err /dev/sysmsg
user.err /var/adm/messages
user.alert `root, operator'
user.emerg *
)
如果用打印机来记录日志文件,可以采用如下方法:
把打印机连接到终端端口/dev/ttya上,在/etc/syslog.conf中加入配置语句.
Auth.notice /dev/ttya
如果是记录到log文件中,一定要注意此文件必须存在,且文件属性为600,否则无法记
录log信息
配置举例
这里举一个比较通用的例子,某一台主机的log记录要求,所有的认证信息存到auth.log ,
各个deamon 的log,包括telnet,ftp的连接和状态记录到deamon.log,mail log单独记录
到maillog.log文件,其他 信息记录与messages里面.另外所有的这些log同样要传到一台
特定的loghost主机。我们首先在 /etc/hosts中定义一台主机的别名为loghost(当然你
可以也可以直接在syslog.conf里指定loghost)
如
192.168.1.88 deepin.nsfocus.com loghost
下面是符合条件的 syslog.conf的内容: *.info;mail.none;auth.none;deamon.none
/var/adm/messages *.info;mail.none;auth.none;deamon.none @loghost
auth.notice /var/log/auth.log
auth.notice @loghost
deamon.info /var/log/deamon.log
deamon.info @loghost
mail.debug /var/log/mail.log
mail.debug @loghost
改好syslog.conf以后,在定义的目录下确认log文件是否存在,不存在,就用
touch /var/log/auth.log;chmod 600 /var/log/auth.log来建立一个.另外..不要忘记给
syslog发 一个-HUP的信号.用ps –ef |grep syslogd找出syslogd的PID,再用
kill –HUP (刚才查到的)PID 来让syslogd重新读取syslog.conf.定义的loghost需要配置吗?
还是要作一点工作的.实际上最简单 的方法是用*.info /var/log/all.log 把所有主机各种
级别的log记到一个大文件里面。如果你在loghost上也想分类,按照常规写就是了。 在log
记录中会有一个域标识主机名来区别来源于不同主机的log记录。
是不是比想像的简单?实际上也没有必要用m4的宏,直接写也很明了。要注意的是按照syslog
的man 里面的说明,notice级别比info,waring低,但notice级别并不被Info包括也就是说用
auth.waring或 auth.ifo是无法记录在认证时的系统信息的,不过这是在solairs下使用的结
果,在linux和solairs 又不一样,auth.waring可以记录认证信息。
那么local0-7这几个设备名是怎么回事呢? 实际上用他们来记录自己开发的程序的信息是很
方便的。例如在你写的某个shell脚本里,使用类似 与:
logger –p local0.notice –t [tag]…这样的语句,可以利用syslogd帮你记录运行的信息,
当然你的syslog.conf也要加上一条 local0.notice牋牋/var/log/myapps.log 具体logger的
用法,man logger看看就知道了。
Logcheck
由于业务繁忙的主机log往往相当巨大,很多无用的信息会把值得注意的log信息淹没起来,
对于管理 员审计log相当不便,所以一些“偷懒”的管理员们往往自己写上一些脚本来作log
的分类和整理工作。 当然,这些脚本也很容易在 internet上找到,一个易于使用且功能比较
强大的工具是logcheck。 Logcheck可以在
http://www.psionic.com/tools/logcheck-1.1.1.tar.gz 获得,安装是相当简便的, 仅仅只
有一个标准的c程序需要编译,主要运行部分是一个shell脚本。
解开压缩包以后,运行make,按照它的提示选择你所使用的操作系统以后重新make以后,很快
就能安装 完毕。配置文件和主运行脚本均默认安装在/usr/local/etc下主要是 logcheck.sh
主要运行脚本,负责分析本次的log并汇报结果 logcheck.hacking可能有人攻击而在log记录
中出现的关键词 例如,此文件里面默认包括了以下一些关键词
"wiz"
"WIZ"
"debug"
"DEBUG"
ATTACK
nested
VRFY bbs
VRFY decode
VRFY uudecode
VRFY lp
VRFY demo
VRFY guest
VRFY root
VRFY uucp
VRFY oracle
VRFY sybase
VRFY games
vrfy bbs
vrfy decode
vrfy uudecode
vrfy lp
vrfy demo
vrfy guest
vrfy root
vrfy uucp
vrfy oracle
vrfy sybase
vrfy games
expn decode
expn uudecode
expn wheel
expn root
EXPN decode
EXPN uudecode
EXPN wheel
EXPN root
LOGIN root REFUSED
rlogind.*: Connection from .* on illegal port
rshd.*: Connection from .* on illegal port
sendmail.*: user .* attempted to run daemon
uucico.*: refused connect from .*
tftpd.*: refused connect from .*
login.*: .*LOGIN FAILURE.* FROM .*root
login.*: .*LOGIN FAILURE.* FROM .*guest
login.*: .*LOGIN FAILURE.* FROM .*bin
login.*: .*LOGIN FAILURE.* FROM .*uucp
login.*: .*LOGIN FAILURE.* FROM .*adm
login.*: .*LOGIN FAILURE.* FROM .*bbs
login.*: .*LOGIN FAILURE.* FROM .*games
login.*: .*LOGIN FAILURE.* FROM .*sync
login.*: .*LOGIN FAILURE.* FROM .*oracle
login.*: .*LOGIN FAILURE.* FROM .*sybase
attackalert
同样,你可以自己分析系统的log,删除或增加必要的关键词
logcheck.violations 系统运行时出现的异常信息的关键词 logcheck.violations.ignore
系统出现异常信息,但包含在这个文件中的关键词的log记录视为正常, 并不作为logcheck
报告异常信息的一部分logcheck.ignore 系统出现可能攻击的记录,但由于包含在 这个文件
中的关键词的log记录视为正常,并不作为logcheck报告攻击部分的一部分
在安装完成以后,你还需要作以下两件事,一个是修改logcheck.sh中的一些参数使它符合你
的要求, 一个是在你的cron任务里增加定时检测的任务。
Logcheck,sh里面注意的参数主要是:
# Person to send log activity to.
SYSADMIN=root
默认把logcheck的报告发给本机的root..当然你可能希望发给自己的信箱,改这里就可以了,
如果你 希望把结果发给几个人,自己定义mial的别名去吧。
另一个位置:
# SunOS, Sun Solaris 2.5
$LOGTAIL /var/log/syslog > $TMPDIR/check.$$
$LOGTAIL /var/adm/messages >> $TMPDIR/check.$$ 这个是sun标准存放log的地方,当然,
我们不是自己定义过log的存放地点吗?加上我们自己要检查的log文件
$LOGTAIL /var/log/auth.log >> $TMPDIR/check.$$
$LOGTAIL /var/log/deamon.log >> $TMPDIR/check.$$
$LOGTAIL /var/log/mail.log >> $TMPDIR/check.$$
下面就是要服务器帮你自动用logcheck.sh来检查你的log了。。不要告诉我你不会用cron来作
这件事。。。 对于log记录很多的主机每天就分析几次,对于firewall主机这类产生标准log
很少的主机每30-60分钟检查 一次不会对系统有什么负担。
使用了logcheck加上一个集中的loghost,对管理一个拥有大量主机的网络系统,能大大的降低
劳动强度,也便 于及时的发现系统的异常情况,阻止可能的攻击行为。最后一句。。。集中
管理大型网络的log..loghost主机 的存放log记录的硬盘一定要大,不然撑爆了是不能记录任
何log的:) …当然你可以时常备份这些log,再删除老 的log文件,删除以后…别忘了马上再touch
一个新的log文件..syslogd不会帮你检查和建立这个文件的,不过你 倒是可以在备份脚本里作
这件事
(http://www.fanqiang.com)
|
|