1、日志协议syslog

1.1、syslog简介

完善的日志分析系统应该能够通过多种协议(包括syslog等)进行日志采集并对日志分析,因此日志分析系统首先需要实现对多种日志协议的解析。其次,需要对收集到的海量日志信息进行分析,再利用数据挖掘技术,发现隐藏再日志里面的安全问题。

Syslog再UNIX系统中应用非常广泛,它是一种标准协议,负责记录系统事件的一个后台程序,记录内容包括核心、系统程序的运行情况及所发生的事件。Syslog协议使用UDP作为传输协议,通过514端口通信,Syslog使用syslogd后台进程,syslogd启动时读取配置文件/etc/syslog.conf,它将网络设备的日志发送到安装了syslog软件系统的日志服务器,Syslog日志服务器自动接收日志数据并写到指定的日志文件中。

1.2、syslog日志格式

syslog标准协议如下图:

Syslog消息并没有对最小长度有所定义,但报文的总长度必须在1024字节之内。其中PRI部分必须有3个字符,以‘<’为起始符,然后紧跟一个数字,最后以‘>’结尾。在括号内的数字被称为Priority(优先级),priority值由Facility和severity两个值计算得出,这两个值的级别和含义见表1-1和表1-2。下面是一个例子:

<30>Oct 10 20:30:10 fedora auditd [1780]: The audit daemon is exiting

▶“<30>”是PRI部分,即Priority(优先级),取值范围0~191。

▶“Oct 10 20:30:10 fedora”是HEADER(报头部分)。

▶“auditd [1780]: The audit daemon is exiting”是MSG(信息)部分。

在PRI部分,该数值和Facility和Level有关,Facility是创建日志的实体,比如由Kernel产生,还是由User产生,或者是Mail产生…而level可以看成是日志级别。他们的关系可以利用公式推导:

Priority=Facility * 8 + Level

后台监控程序会被分配一个facility值,而没有分配到facility值的进程则会使用“local user”的facility值,比如很多网络设备都会默认使用facility值“local user 7”来发送信息。

                                                             表1-1  Facility级别

从分类能看出来Syslog的Facility有一部分(序号16~23)是为其他程序预留的,例如Cisco设备使用local4发送PIX防火墙的syslog日志。

表1-2 日志级别描述

1.3、rsyslog介绍

针对syslog协议的不足,rsyslog日志协议应运而生,它提供了丰富的内容过滤和灵活的配置选项,多线程的syslogd功能,同一台机器上支持多子rsyslog进程,可以监听不同端口。除了继续支持udp外,还添加了tcp进行传输的功能。在日志传输安全方面,以前通过Stunnel解决了rsyslog传输数据加密的问题,目前最新的rsyslog版本自身就支持ssl加密技术保证安全,在近几年发布的所有Linux发行版中都切换成了rsyslog。在实际的使用过程中,我们可以通过查看配置文件和相应的日志文件来使用Rsyslog。在数据库支持方面,它广泛支持各种数据库,尤其对Mysql和Postgres数据库支持的比较好。

rsyslog配置文件详解:

#### MODULES ####               #定义日志的模块。
$ModLoad imuxsock             #imuxsock为模块名,支持本地系统日志的模块。
$ModLoad imjournal            #imjournal为模块名,支持对系统日志的访问。
#$ModLoad imklog               #imklog为模块名,支持内核日志的模块。
#$ModLoad immark               #immark为模块名,支持日志标记。
# Provides UDP syslog reception   #提供udp syslog的接收。
#$ModLoad imudp               #imudp为模块名,支持udp协议。
#$UDPServerRun 514               #允许514端口接收使用udp和tcp转发来的日志。
# Provides TCP syslog reception       #提供tcp syslog的接收。
#$ModLoad imtcp              #imtcp为模块名,支持tcp协议。
#$InputTCPServerRun 514#### GLOBAL DIRECTIVES ####    #定义全局日志格式的指令。
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog       #工作目录。
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  #定义日志格式默认模板。
$IncludeConfig /etc/rsyslog.d/*.conf                     #所有配置文件路径。
$OmitLocalLogging on                                      #省略本地登录。
# File to store the position in the journal
$IMJournalStateFile imjournal.state#### RULES ####
#kern.*                                  /dev/console
#记录所有日志类型的info级别以及大于info级别的信息到messages文件,但是mail邮件信息,authpriv验证方面的信息和corn时间和任务相关信息除外。
*.info;mail.none;authpriv.none;cron.none      /var/log/messages# authpriv验证相关的所有信息存放在/var/log/secure。
authpriv.*                                /var/log/secure#邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录
mail.*                                   -/var/log/maillog#任务计划有关的信息存放在/var/log/cron。
cron.*                                   /var/log/cron#记录所有的≥emerg级别信息,发送给每个登录到系统的日志。
*.emerg                                 :omusrmsg:*#记录uucp,news.crit等存放在/var/log/spooler
uucp,news.crit                            /var/log/spooler#本地服务器的启动的所有日志存放在/var/log/boot.log
local7.*                                  /var/log/boot.log#发送日志,@表示传输协议(@表示udp,@@表示tcp),后面是ip和端口。
#*.* @@remote-host:514

2、 日志采集和分析

再此环境中,我们利用rsyslog的客户端分别把ssh、iptables等以及h3c交换机和路由器的日志发送到rsysog的服务端,并在服务端配置存储策略,把不同的日志存放在不同的文件当中,本环境中以ssh日志为例。架构图如下:

环境说明:

   H3C交换机IP:192.168.0.249;H3C路由器IP:192.168.1.1业务服务器IP:192.168.1.218;Syslog服务器IP:192.168.1.221;

信息级别高于等于info的日志信息将会发送到syslog服务器上;

▶ 业务服务器配置

打开rsyslog的配置文件;

vim /etc/rsyslog.conf

在配置文件中我们可以看到默认有以下配置,这条配置就是把用户认证所有级别的日志都存到后面的路径文件下;

authpriv.*                                              /var/log/secure

将记录下来的日志发送到rsyslog服务端,打开rsyslog配置文件看配置文件的最底部有以下内容;

# *.* @@remote-host:514

此处用于指定接收日志的rsyslog服务器的协议、IP地址和端口号,此处用的tcp;

*.*@@192.168.1.221:514

注意:使用@代表走UDP协议,使用@@代表走TCP协议。

重启rsyslog服务

systemctl restart rsyslog

▶ Rsyslog服务器配置

打开rsyslog的配置文件;

vim /etc/rsyslog.conf

把以下配置的注释打开,下面分别有tcp和udp的配置,和客户端保持一致,下面都开启因为路由器和交换机默认走的是udp协议;

Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

重启rsyslog服务

systemctl restart rsyslog

配置完后,业务服务器的的日志就可以发生到rsyslog服务端了。可以利用以下命令查看连接状态。

lsof -i :514

命令输出:

上图用红框圈起来的就是rsyslog和业务服务器建立的连接。

现在只是属于把日志接收过来并存放在默认路径,如下图:

服务端会根据产生日志的设施和级别把日志存放到不同的文件里,我们发过来的是ssh日志,默认就存在服务端的/var/log/secure文件里。当然发过来的其他设施产生的日志也会存到指定的文件里面。

如果我们要想把发过来的ssh日志存放到自己的指定的文件里面,可以在/etc/rsyslog.d/目录里面新建一个文件,这个目录是rsyslog的工作目录。文件内容如下:

if $programname contains 'sshd' then -/var/log/remote_log/ssh.log
& ~

语法解释:

   如果发过来的日志“程序名”包含sshd,就输入到ssh.log日志里面。什么是程序名:程序名就是你这一类日志是哪个服务产生的。&~表示不做后续的操作,日志只输入到ssh.log中。

▶ 结果

  1. 验证方法:

在业务服务器上产生一条ssh日志,可以利用ssh连接工具连接业务服务器,这样就好产生一条ssh日志,产生新的日志就会让rsyslog发送到服务端。

  1. 测试结果:

业务服务器已经把日志发送过来,根据rsyslog的上述配置把sshd的日志已经保存在了/var/log/remote_log/ssh.log的文件里面,使用如下命令查看文件是否已经有了内容。

tail –f /var/remote_log/ssh.log

输出结果如下:

文件里面已经保存了业务服务器发过来的日志。

说了这么大篇幅,实际上工作当中只需要这么干。
syslog服务器端:192.168.8.111
第一步:修改相关配置文件
vi /etc/rsyslog.conf
放开行首的#

$ModLoad imudp
$UDPServerRun 514

然后在GLOBAL DIRECTIVE块前追加以下的模板。

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *
*.* ?RemoteLogs
& ~

第二步:重启

systemctl restart rsyslog

第三步:非必须,验证服务是否正常启动

netstat -tulpn | grep rsyslog

在UDP监听端口下工作的rsyslog守护进程会有类似下面的输出。

udp 0 0 0.0.0.0:514 0.0.0.0:* 551/rsyslogd
udp6 0 0 :::514 :::* 551/rsyslogd

客户端,需要发送日志方
第一步,增加配置

vi /etc/rsyslog.conf *.* @192.168.8.111:514

第二步,重启

 systemctl restart rsyslog.service

第三步:开机启动,非必须

systemctl enable rsyslog.service

参考博客:

https://blog.csdn.net/qq_32488647/article/details/79866437

https://www.cnblogs.com/haimeng/p/10823699.html

syslog详解及配置远程发送日志和远程日志分类相关推荐

  1. linux内核日志使用syslog,Linux日志系统syslog详解

    一台服务器的日志对系统工程师来说是至关重要的,一旦服务器出现故障或被入侵,我们需要查看日志来定位问题的关键所在,所以说对于线上跑的服务器而言日志应该合理的处理及管理.下面来介绍下linux系统的sys ...

  2. linux syslog详解-------未测试

    原文:http://www.cnblogs.com/skyofbitbit/p/3674664.html linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.l ...

  3. MySQL主从同步详解与配置

    https://zhuanlan.zhihu.com/p/335142300 MySQL主从同步详解与配置 第一部分[原理解析] * 应用背景* MySQL数据库自身提供的主从复制功能可以方便的实现数 ...

  4. rsync的介绍及参数详解,配置步骤,工作模式介绍

    rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...

  5. ElasticSearch预警服务-Watcher详解-Schedule配置

    介绍 Watcher服务详解-定时器的设定 关于Schedule配置选择,Watcher提供了丰富的时间语法支持,采用UTC时间,来我们一起看下如何设置: 支持的设置方式: hourly:按小时周期设 ...

  6. java log4配置例子,log4j.properties配置属性详解与配置示例

    log4j.properties配置属性详解与配置示例 发布时间:2018-03-27作者:laosun阅读(1535) log4j.properties配置属性详解与配置示例,拿走直接用!详细解答了 ...

  7. 详解keepalived配置和使用

    详解keepalived配置和使用 一.keepalived简介: keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Ke ...

  8. VMware虚拟机三种网络模式详解与配置 [转]

    VMware虚拟机三种网络模式详解与配置 [转] 原文链接:https://note.youdao.com/ynoteshare1/index.html?id=236896997b6ffbaa8e0d ...

  9. 详解keepalived配置

    详解keepalived配置和使用 ! Configuration File for keepalivedglobal_defs { #指定keepalived在发生切换时需要发送email到的对象, ...

最新文章

  1. C++关键字union
  2. 2020-10-27(汇编收获)
  3. (转)aspnet网址收藏
  4. Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合...
  5. 蓝桥杯2017初赛-分巧克力-二分
  6. Spark SQL(九)之基于用户的推荐公式
  7. C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则
  8. mysql在test库中创建表stu_1.在mysql的test数据库中新建表,表名为student,表结构如下:...
  9. 【动态规划】subsequence 1
  10. [转载] python数据类型转换
  11. C#串口介绍以及简单串口通信程序设计实现
  12. wkhtmltopdf生成的pdf分页后文字重叠
  13. 【转】GB2312 编码
  14. linux计划任务失败如何排查原因
  15. 雷达图分析法(转载)
  16. 解惑好文:移动端H5页面高清多屏适配方案
  17. maven编译报错java -source,pom设置maven.compiler.source原理
  18. Java学习历程——JVM的JMM模型
  19. 求大神讨论:工科男如何找到自己的爱情
  20. 2018 天梯赛及蓝桥杯比赛感想

热门文章

  1. 2022.3.17网易暑期实习游戏研发岗第一题
  2. java生成多级目录
  3. SysFader. IEXPLORE.EXE-应用程序错误解决方法
  4. python根据分类动态获取豆瓣排行榜
  5. 自定义微信易信平台分享内容
  6. linux卸载思科,ciscodk教你卸载Linux软件
  7. 紫光展锐2021数字芯片笔试
  8. 高斯列主元消元法求解线性方程组
  9. Java(Servlet)模糊查询
  10. linux内核动态logo图片,LINUX内核logo图片(内核启动背景)修改