引言
Syslog常被称为系统日志或系统记录,是一种标准化的协议,用于网络设备、服务器和应用程序向中央Syslog服务器发送日志消息。互联网工程任务组(IETF)发布的RFC 3164,专门定义了BSD Syslog协议的规范和实现方式。通过syslog协议,系统管理员可以监控系统的运行状态、诊断问题,并采取相应的措施来确保系统的稳定性和安全性。大部分设备会支持syslog功能,是交换机路由器等产品的必测项。
RFC3164协议介绍
日志格式
syslog使用标准的文本格式来表示日志消息,由PRI字段、Header字段和MSG字段组成。
具体例子如Mar 10 09:11:54 hostapd: wl1: STA ae:43:7b:84:e4:17 IEEE 802.11: associated,对应的wireshark报文如下
PRI字段
优先级字段共8位比特,由设施(facility)和严重性(severity)组成,前者占前5个比特,后者占后3个比特。
设施字段用于表明日志具体是由哪个系统部分产生的,如是内核、系统守护进程、业务进程等,目前定义如下
Numerical Code Facility 0 kernel messages1 user-level messages2 mail system3 system daemons4 security/authorization messages (note 1)5 messages generated internally by syslogd6 line printer subsystem7 network news subsystem8 UUCP subsystem9 clock daemon (note 2)10 security/authorization messages (note 1)11 FTP daemon12 NTP subsystem13 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)
严重性字段用于描述了事件的紧急程度,最高是emergency(紧急,系统宕机或功能不可用的日志),最低是debug(调试,用于协助调试的软件运行过程日志)
Numerical Code Severity 0 Emergency: system is unusable1 Alert: action must be taken immediately2 Critical: critical conditions3 Error: error conditions4 Warning: warning conditions5 Notice: normal but significant condition6 Informational: informational messages7 Debug: debug-level messages
Hearder字段
syslog报文头部字段,由时间戳(timestamp)和主机名(hostname)两部分组成
时间戳的格式是“Mmm dd hh:mm:ss”
Mmm是月份的英文单词的三位缩写,首字母大写,后两位小写,取值范围是Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
dd是表示某月的第几天,固定两位数,如果小于10,则第一位填空格。如三月7号,格式是Mar 7,Mar和7之间有两个空格,如3月10号,格式是Mar 10,Mar和10之间只有一个空格
hh:mm:ss表示本地时间,hh取值范围是00~23,mm和ss的取值范围是00~59
主机名字段,协议规定只能填主机名、IPv4地址或IPv6地址,且不能含有空格。不过在实际应用中,很多厂商会把hostname填成其他内容
MSG字段
syslog的消息部分,由TAG字段和CONTENT字段组成。
TAG字段中的值将是生成消息的程序或进程的名称,长度不可超过32个字符。
CONTENT字段包含日志的详细信息,与TAG字段通过左中括号([)、冒号(:)或空格隔开
传输协议
Syslog协议使用UDP协议进行日志消息的传输,默认端口号是514.syslog服务器监听514端口,接收日志信息并进行解析。wireshark也默认会把目的端口号为514的UDP报文按syslog协议进行解析,输入syslog可以过滤出相关报文。如果使用其他端口号或者日志格式不符合规范,wires hark可能无法按syslog进行解析,普通syslog服务器可能无法解析显示收到的日志。
由于UDP是无连接协议,传输过程可能丢失部分日志,加上syslog是明文传输。所以只推荐在稳定的、安全的内部网络使用基于RFC3164的syslog。
RFC 5424
鉴于RFC3164的缺点,IETF发布RFC5424,用来取代RFC3164,其优势包括
结构化数据:可以包含更加丰富的日志信息,并且可读性和解析性更高;
安全性更高:RFC5424可以采用TCP和TLS来传输日志,确保日志的完整和安全。
因此对安全性要求更高的,网络稳定性较差的场景,推荐使用基于RFC5424的syslog。
测试要点
1、启用禁用syslog
目的:验证系统启动syslog后产生日志,禁用syslog后停止产生日志
测试步骤:启用syslog功能,检查系统是否正确生成syslog日志;禁用syslog功能,检查系统是否停止生成syslog
2、syslog格式符合RFC3164
目的:验证系统产生的syslog是否符合RFC3164标准,注意每个厂家可能会对syslog进行小修改,满足设计需求即可
测试步骤:启用syslog,按RFC3164标准或软件设计需求,检查syslog日志的各个字段
3、syslog可以发送到syslog服务器
目的:验证系统可以把syslog传输到远端的syslog服务器
测试步骤:启用syslog功能,配置syslog服务器地址,查看服务器是否收到系统的日志。搭建syslog服务器可以参考之前发布的文章:【手把手教】tftpd64配置成SNTP、syslog、DHCP、DNS服务器的方法(一)-CSDN博客
4、手动操作触发产生日志
目的:手动实施会产生日志的操作,验证系统是否正确产生对应的日志
测试步骤:根据系统的设计,手动实施操作,查看是否产生对应的日志,如手动kill某个进程
syslog抓包
抓包举例1
PRI是141,设施值是3,表示守护进程,紧急程度是6,表示通知信息
时间戳是3月10号,上午7点6分46秒
主机名是hostapd,表示是无线进程hostpad
tag字段是wl1,表示关于无线接口wl1
消息字段,表示这个某个终端从无线接口wl1解关联
抓包举例2
PRI是12,设施值是1,表示用户级,紧急程度是4,表示告警信息
时间戳是3月10号,上午7点6分46秒
主机名是内核,表明由系统内核上报
tag字段是br0,表明跟br0接口有关
消息字段,表明是br0接口收到了自己的mac作为源mac的报文,表明交换机可能存在环路
原创不易,你的支持是我最大的动力,欢迎大家点赞,收藏,关注!