freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

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

一、操作目的和应用场景

为了方便日志监控并防止日志被篡改,通常工作环境中会使用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 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Linux系统安全
彭瑞 LV.4
这家伙太懒了,还未填写个人描述!
  • 20 文章数
  • 58 关注者
frp内网穿透工具告警分析
2023-12-11
bash反弹shell的研判
2023-12-11
Linux系统使用tiny shell(tsh)进行远程控制和传输文件
2022-07-27
文章目录