标签归档:syslog

OSSEC检测CentOS5发送syslog无法成功告警排查

syslog的包如下:

123

在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。

完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上,能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录,记录到什么地方,是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性,syslog不再仅限于 Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用syslog。

例如:
<86>Aug 26 15:00:14 localhost sshd[32390]: Failed password for admin from 192.168.190.201 port 61410 ssh2
这是authpriv的log可以看到由3部分组成,分别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分,而HEADER可能没有。
1)pri
PRI部分由尖括号包含的一个数字构成,这个数字包含了程序模块(Facility)、严重性(Severity),这个数字是由Facility乘以 8,然后加上Severity得来。
这个数字如果换成2进制的话,低位的3个bit表示Severity,剩下的高位的部分右移3位,就是表示Facility的值。
十进制181 = 二进制10110101
二进制10110 = 十进制22 对应local6
二进制101 = 十进制5 对应Notice

Facility的定义如下,可以看出来syslog的Facility是早期为Unix操作系统定义的,不过它预留了User(1),Local0~7 (16~23)给其他程序使用:

      Numerical             Facility
         Code

          0             kernel messages
          1             user-level messages
          2             mail system
          3             system daemons
          4             security/authorization messages (note 1)
          5             messages generated internally by syslogd
          6             line printer subsystem
          7             network news subsystem
          8             UUCP subsystem
          9             clock daemon (note 2)
         10             security/authorization messages (note 1)
         11             FTP daemon
         12             NTP subsystem
         13             log audit (note 1)
         14             log alert (note 1)
         15             clock daemon (note 2)
         16             local use 0  (local0)
         17             local use 1  (local1)
         18             local use 2  (local2)
         19             local use 3  (local3)
         20             local use 4  (local4)
         21             local use 5  (local5)
         22             local use 6  (local6)
         23             local use 7  (local7)

Severity的定义如下:

       Numerical         Severity
        Code

         0       Emergency: system is unusable
         1       Alert: action must be taken immediately
         2       Critical: critical conditions
         3       Error: error conditions
         4       Warning: warning conditions
         5       Notice: normal but significant condition
         6       Informational: informational messages
         7       Debug: debug-level messages

2)header
HEADER部分包括两个字段,时间和主机名(或IP)。
时间紧跟在PRI后面,中间没有空格,格式必须是“Mmm dd hh:mm:ss”,不包括年份。

3)Message
MSG部分又分为两个部分,TAG和Content。其中TAG部分是可选的。
sshd[32390]就是TAG部分,包含了进程名称和进程PID。
TAG后面用一个冒号隔开Content部分,这部分的内容是应用程序自定义的。

 

首先在服务端抓Syslog包可以抓到。
然后我们看下CentOS5收到的syslog的内容

123

我们发现CentOS5发送的syslog少了header部分,没有时间、主机名或IP信息。
完整的Syslog日志例如CentOS6如下:

123

我们使用/opt/ossec/bin/ossec-logtest -v 添加参数v可以使输出更详细
CentOS6的测试结果如下:

Aug 26 15:00:14 localhost sshd[32390]: Failed password for admin from 192.168.190.201 port 61410 ssh2


**Phase 1: Completed pre-decoding.
       full event: 'Aug 26 15:00:14 localhost sshd[32390]: Failed password for admin from 192.168.190.201 port 61410 ssh2'
       hostname: 'localhost'
       program_name: 'sshd'
       log: 'Failed password for admin from 192.168.190.201 port 61410 ssh2'

**Phase 2: Completed decoding.
       decoder: 'sshd'
       dstuser: 'admin'
       srcip: '192.168.190.201'

**Phase 3: Completed filtering (rules).
       Rule id: '5716'
       Level: '5'
       Description: 'SSHD authentication failed.'
**Alert to be generated.

可以看到第一个阶段为预解码阶段,就是提取时间,主机名(localhost),程序名称(sshd)。
第二个阶段为解码阶段,会匹配第一个阶段中的log内容,根据decode.xml解析。
第三个阶段为规则匹配,命中规则5716。

CentOS5的测试结果如下:
输出如下:

sshd[20237]: Failed password for admin from 10.59.0.85 port 41497 ssh2


**Phase 1: Completed pre-decoding.
       full event: 'sshd[20237]: Failed password for admin from 10.59.0.85 port 41497 ssh2'
       hostname: 'localhost'
       program_name: '(null)'
       log: 'sshd[20237]: Failed password for admin from 10.59.0.85 port 41497 ssh2'

**Phase 2: Completed decoding.
       No decoder matched.

**Phase 3: Completed filtering (rules).
       Rule id: '1002'
       Level: '2'
       Description: 'Unknown problem somewhere in the system.'
**Alert to be generated.

可以看到CentOS5无法没有匹配上解码器。
而看到匹配上了1002规则,我们来看下1002规则
<rule id=”1002″ level=”2″>
<match>$BAD_WORDS</match>
<options>alert_by_email</options>
<description>Unknown problem somewhere in the system.</description>
</rule>
<var name=”BAD_WORDS”>core_dumped|failure|error|attack|bad |illegal |denied|refused|unauthorized|fatal|failed|Segmentation Fault|Corrupted</var>
可以看到是因为匹配上了关键字failed导致。
所以无法成功告警是因为解码器没有匹配上,根本原因是CentOS5日志格式没有header信息。
解决办法:
在CentOS5上安装rsyslog,并关闭syslog服务。