freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CentOS 7系统配置rsyslog服务发送和接收日志
2020-08-14 01:28:55

一、操作目的和应用场景

为了方便日志监控并防止日志被篡改,通常工作环境中会使用rsyslog架设日志服务器用于存放其它服务器的日志。rsyslog支持日志的远程发送和接收。

rsyslog客户端:负责发送日志到远程日志服务器,支持udp,tcp,relp协议。

rsyslog服务器:负责接收客户端发来的日志并存储在本地,支持文件存储和数据库存储方式。

对于入侵排查工作来说,操作系统的认证日志、计划任务日志和历史命令是非常重要的。为加强日志管理,要求将各系统的相应日志信息保存到专用的rsyslog日志服务器,保存日志的路径格式为:源IP地址/设施名(日志类别)/年月.log。

 

二、平台及工具版本

软件:rsyslog

日志客户端(发送端):CentOS 7

日志服务器(接收端):CentOS 7

 

三、操作步骤

(一)日志客户端配置

1、 发送认证和计划任务日志(auth、authpriv、cron)

vi /etc/rsyslog.conf  //编辑rsyslog服务配置文件,文件末尾加入一行

auth.*;authpriv.*;cron.*  @@192.168.43.234:514

一个@代表通过UDP协议发送日志,这里是两个@,代表以tcp方式传送日志。与UDP相比,TCP传输的方式更加稳定一些。

保存退出。这样,认证和计划任务日志在本地保存的同时,还会保存到远程日志服务器。

 

2、 发送历史命令

(1)配置发送root账户的历史命令

vi /root/.bashrc  //编辑root的配置文件,在文件末尾加入下面的内容

function log2syslog
{
   declare command
   command=$(fc -ln -0)
   logger -p local1.notice -t bash -i — $USER : "$command"

}
trap log2syslog DEBUG

保存退出

fc是shell的内置命令,作用是获取命令历史,$(fc -ln -0)返回最近执行的一条命令。

logger命令将消息发送到系统日志,-p设置消息的设施名为local1,优先级为notice。

注意在$command两端需要有双引号。

 

(2)配置发送普通用户的历史命令

vi /home/sec/.bashrc  //编辑sec用户的配置文件,在文件末尾加入下面的内容

function log2syslog

{

   declare command

   command=$(fc -ln -0)

   logger -p local1.notice -t bash -i — $USER : "$command"

}

trap log2syslog DEBUG

保存退出

 

(3)修改用户配置模板

vi /etc/skel/.bashrc  //编辑用户配置模板目录中的.bashrc文件,加入下面的内容

function log2syslog

{

   declare command

   command=$(fc -ln -0)

   logger -p local1.notice -t bash -i — $USER : "$command"

}

trap log2syslog DEBUG

保存退出。该文件修改后,系统所创建的新用户,其.bashrc文件中都会含有上述发送历史命令的的指令。

 

3、 配置rsyslog服务

vi /etc/rsyslog.conf  //编辑配置文件

//将local1.none加入下面的行

*.info;mail.none;authpriv.none;cron.none;local1.none  /var/log/messages

//local1.none的意思是,设施名为local1的消息不写入本行指定的文件。这样,messages文件中就不会保存本地用户的历史命令了。(命令历史默认已经保存到用户的.bash_history文件中了)

//文档末尾加入一行,将历史命令发往日志服务器

local1.notice @@192.168.43.234:514

保存退出。

 

systemctl restart rsyslog  //重启服务,使配置更改生效

 

(二)日志服务器配置

1、 rsyslog服务配置

vi /etc/rsyslog.conf  //取消下面两行的注释

$ModLoad imtcp

$InputTCPServerRun 514

 

//注释掉原有的ActionFileDefaultTemplate指令(使用传统的格式)

#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

//使用自定义的时间格式

$template myformat,"%$NOW% %TIMESTAMP:8:15% %hostname% %syslogtag% %msg%\n"

$ActionFileDefaultTemplate myformat

 

//在RULES段的前面写入下面的行

$template local1_path, "/var/log/%FROMHOST-IP%/bash_history/%$YEAR%%$MONTH%.log"

$template remote_path, "/var/log/%FROMHOST-IP%/%syslogfacility-text%/%$YEAR%%$MONTH%.log"

 

if $fromhost-ip != '127.0.0.1' and $syslogfacility-text == 'local1' then ?local1_path

& ~

if $fromhost-ip != '127.0.0.1' then ?remote_path

& ~

保存退出。

$template定义了两个模板,名称分别为local1_path和remote_path,模板名称后面指定了将消息保存到的日志文件的路径。

if开头的指令是基于表达式的过滤器。第一条if指令的意思是,如果日志消息的来源IP地址不是本机,且消息的syslogfacility-text为local1,那么将这条消息写入由模板local1_path对应的文件。

& ~的含义是让满足上面过滤器条件的消息不再匹配后续的规则。默认情况下,日志消息会按顺序匹配rsyslog.conf中的每条规则。& ~在这里会让消息跳过后面的规则,这样这条消息就不会再被写入其他的日志文件了。

第二条if开头的指令将来自于本机之外的所有日志消息(由于前面的& ~,满足这个条件的只有auth、authpriv和cron消息)写入remote_path所对应的文件。

 

systemctl restart rsyslog  //重启服务

 

2、 防火墙配置

firewall-cmd --zone=public --add-port=514/tcp

 

四、总结

通过以上的配置,不同日志客户端发来的日志可以分开保存,在出现安全事件时可以快速找到相应日志。另外,rsyslog服务器也可以配置为中继转发,方法也很简单,就是将日志服务器作为rsyslog的客户端进行配置。这样,rsyslog服务器接收日志后在本地保留一份,同时还将日志发送出去,例如发给审计设备或日志显示平台如graylog、ELK等。

# linux安全 # 安全 # Rsyslog # 日志收集 # CentOS 7
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者