一、syslog服务器配置
首先,配置Red Hat上自带的syslog服务,使它能够记录来自其他服务器的log信息。
1、编辑/etc/sysconfig/syslog文件,修改SYSLOGD_OPTIONS选项,如下:
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -x -m 0"
2、修改后重启syslog 服务,使配置生效,如下:
[root@localhos t ~]# service syslog restart
3、如果启用了iptables防火墙,确保udp 514端口可以被访问。可以在etc/rc.local中增加如下脚本,开放udp 514端口
iptables -I RH-Firewall-1-INPUT -s 192.168.1.0/24 –p udp --dport 514 -j ACCEPT
其中,RH-Firewall-1-INPUT是Red Hat自带的chain,192.168.1.0/24网段是需要监控的服务器所在的网段。
4、/etc/syslog.conf 是syslog 的默认配置文件,它允许指定好的每种类型的系统日志存放到指定的存放点,由于只记录登录日志,只需指定authpriv.*项的存放点即可。
# The authpriv fi le has res t ricted access.authpriv.*|/var/log/syslog.pipe
/var/log/syslog.pipe是一个命名管道,使服务器接受的信息可以传给脚本处理。
二、配置Linux客户端
配置好服务器后,需配置客户端,使客户端的log信息可以发到服务器上。用户只需指定authpriv.*项的信息传到服务器,具体如下:
# The authpriv file has restricted access.authpriv.*@192.168.1.1
这里的192.168.1.1就是log服务器的IP,“@”符号表示发送到远程主机。重启客户端的syslog服务使配置生效。
用logger测试一下配置是否成功
[root@metalib ~]logger -p authpriv.notice "Hello,this is a test"
在服务器端监听管道
[root@localhost ~]# cat /var/log/syslog.pipe Sep9 18:35:21 202.192.155.20 root: Hello,this is a test
如上所示,则表示已成功。
三、配置Windows客户端
对于unix类主机之间的记录日志,由于协议、软件和日志信息格式都大同小异,因此实现比较简单,但是Windows系统则不同。因此,我们需要第三方软件来转换Windows的日志——evtsys (全称是evntlog to syslog)。
edu/ECN/Resources/Documents/UNIX/evtsys/
根据系统的版本下载32 位和64 位的程序。
解压后是evtsys.dll 和evtsys.exe。
把这两个文件拷贝到-c:\windows\system32目录下。
打开Windows命令提示符
C:\>evtsys -i -h 192.168.1.1
-i 表示安装成系统服务
-h 指定log服务器的IP地址
启动该服务
C:\>net start evtsys
如要卸载,则
C:\>net stop evtsys
C:\>evtsys u
打开Windows本地安全策略,修改本地策略中的审核策略,如下图所示:
用户只审核登录事件,所以只审核”审核登录事件”和”审核账户登录事件”即可。
Windows的配置完成,还需再配置一下服务器的syslog配置文件,因为evtsys是以daemon设备发送到服务器上的。因此,在/etc/syslog.conf中需加入以下配置:
#for windows syslog
daemon.notice |/var/log/syslog.pipe
关于syslog记录设备可以参考syslog文档。
四、分析处理接受的日志信息
现在,服务器和客户端的配置都已完成,所有客户端的登录日志都会发送到日志服务器上。但是Windows此时也会发送很多非登录日志,而且目前日志只是发送到命名管道上,所以还需再由一个脚本在后台不断分析管道中接收的日志。
下面是一个分析日志的流程图,当然读者可以根据自己的需求进行修改。
是否有两个IP:因为Windows会发送很多非登录日志,可以根据日志中是否含有两个不同的IP 地址来筛选。此判断比较简单,可以根据登录日志的格式再做进一步筛选。源IP是否信任:一般用户都有属于自己的工作网段,那么非工作网段都列为不信任网段,这样可以使用户在查询时比较方便。是否发邮件告警:如果非信息网段出现不断尝试登录的日志信息(可以设为5次),则发邮件告警。
具体的脚本如下:
[root@localhost ~]# cat /var/log/filter_log.sh
#! /bin/sh
if [ ! -p /var/log/syslog.pipe ]
then
mkfifo /var/log/syslog.pipe
fi
ip_temp="1.1.1.1"
ip_count=0
today=`date +%Y-%m-%d`
while read msg < /var/log/syslog.pipe
do
if [ ! "$msg" ]
then
continue
else
ips=`echo $msg | awk -v RS="[:= )]" '/[0-9]+\.[0-9]+\.
[0-9]+\.[0-9]/&&! a[$0]++'`
ip_d=`echo $ips | awk {'print $1'}`
ip_s=`echo $ips | awk {'print $2'}`
if [ ! "$ip_s" ]
then
continue
else
time=`echo $msg | awk {'print $3'}`
date=$today" "$time
log_event=`echo $msg | cut -d' ' -f5-`
temp=`echo $ip_s | cut -d'.' -f 1-3`
if [ "$temp" = "10.10.1" ] || [ "$temp" = "192.168.1" ]
then
`mysql -uroot -proot -D syslog -e "insert into syslog
(log_time,log_ip,log_event) values('$date','$ip_d',
'$log_event')"`
else
if [ $ip_s = $ip_temp ]
then
ip_count=`expr $ip_count + 1`
else
ip_count=0
ip_temp=$ip_s
fi
if [ "$ip_count" -lt "5" ]
then
`mysql -uroot -proot -D syslog -e "insert into syslog_warn
(log_time,log_ip,log_event) values('$date','$ip_d',
'$log_event')"`
elif [ "$ip_count" -eq "5" ]
then
`echo -e "From:Warning \nTo:test@stu.
edu.cn\nSubject:$ip_d warning\n$msg" | sendmail -t`
fi
fi
fi
fi
done
在数据库中,必须建立两个表,即上述所提的信任表和怀疑表。
mysql>create database syslog;
mysql> create table syslog( id int unsigned not null
auto_increment primary key, log_time datetime, log_ip
varchar(30), log_event varchar(512) );
mysql> create table syslog_warn( id int unsigned not null
auto_increment primary key, log_time datetime, log_ip
varchar(30), log_event varchar(512) );
然后执行脚本测试,如果登录受监控的服务器后,在数据库中可以看到新插入的日志记录,则表示已成功。
必须让脚本在服务器开机时执行,需修改/etc/rc.local脚本,增加如下指令即可:
./var/log/filter_log.sh &
五、后续处理及扩展
1.有了数据库的记录,可以写一个简单的网页来查询记录,方便监控和发现可以登录情况。
2.可以记录更多更全面的日志,并且利用脚本分析日志信息再插入相应的表,以达到监控服务器全部日志的目的,可以使管理人员更加了解服务器使用情况。
3.syslog也可以记录交换机设备的日志,如下所示是记录cisco交换机日志的配置:
logging trap warnings
logging source-interface Vlan1
logging 10.10.202.247