rsyslog是一个快速处理手机系统日志的开源程序,提供了高性能,安全功能和模块化设计,rsyslog是syslog的升级版,他讲多重来源输入输出转换结果到目的地,rsyslog被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。
rsyslog守护进程可以被配置成两种环境,一种是配置成日志手机服务器,rsyslog进程可以从网络中收集其他主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器,rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的远程rsyslog服务器上
下面来操作一下:
- rsyslog服务器(收集):192.168.89.129
- rsyslog 主机(发送):192.168.89.128
实现client主机通过rsyslog发送自身的系统日志到rsyslog server服务器,服务器端将该主机系统日志存放到一个指定的目录里面,进行按IP和日志简单分类存储
- rsyslog服务器端配置
centos系统默认安装了rsyslog服务
两台服务器都进行以下操作进行备份:
cp /etc/rsyslog.conf /etc/rsyslog.conf_default
vi /etc/rsyslog.conf
收集服务器:192.168.89.129:
- 取消下面两行注释,开始UDP 514接收配置
$ModLoad imudp
$UDPServerRun 514
- 在$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat这一行添加如下配置
$template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
& ~
- 重启rsyslog服务
systemctl restart rsyslog
- rsyslog客户端配置(发送):
vim /etc/rsyslog.conf
1、取消如下五行注释
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
- 最后一行添加收集端的信息
*.* @192.168.89.129
- 重启rsyslog服务
systemctl restart rsyslog
- 在服务端验证效果
cd /var/log/syslog
cd 192.168.89.128
cat 192.168.89.128_2024-02-07.log
这时,就会记录系统中的常规系统日志到我们的日志服务器当中
然后,通过测试,发现日志的记录并不完全,我根据需求,想要的是记录到每个用户的操作记录,不管是管理员还是普通用户,类似于;
每一条都能记录,不管是执行了什么操作
这时,我们通过对每个用户的.bashrc文件进行操作
~/.bashrc -每个用户的家目录下会有这个文件,使用ls -a可以看到
export PROMPT_COMMAND='RETRN_VAL=$?;logger -n XX.XX.XX.XX -P 514 -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//") [$RETRN_VAL]"'
这段代码的目的是在每次 Bash shell 提示符出现之前记录一条日志消息,这条消息包含了用户的一些信息和最后执行的命令。这可能用于审计或监控用户的活动。
`PROMPT_COMMAND` 是一个 Bash shell 特定的环境变量,每次命令提示符出现之前,都会执行 `PROMPT_COMMAND` 中定义的命令。
在这段代码中,`RETRN_VAL=$?` 获取并存储了最后执行的命令的返回值。
`logger -n XX.XX.XX.XX -P 514 -p local6.debug "$(whoami) [$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//") [$RETRN_VAL]"` 这条命令使用 `logger` 工具将一条日志消息发送到远程日志服务器 `XX.XX.XX.XX` 的 `514` 端口。这条消息包含了以下信息:
- 当前用户的用户名(`whoami`)
- 最后执行的命令(通过 `history 1 | sed "s/^[ ]*[0-9]\+[ ]*//"` 获取)
- 最后执行的命令的返回值(`$RETRN_VAL`)
总的来说,这段代码的作用是在每次提示符出现之前记录一条日志消息,这条消息包含了用户的一些信息和最后执行的命令。这可能用于审计或监控用户的活动。
到这里,我们的操作基本上就完成了,可以很完全的记录操作的信息,但是,唯一的一个遗憾,就是我通过测试,没能达到好的效果去检测 反弹shell 的操作记录,能够实现通过rsyslog记录,但是缺点就是在通过审计日志记录日志的时候,审计日志(auditd)会调用execve,但是execve可能会产生大量的日志数据,因为auditd会记录所有的execve调用,包括系统和服务的后台活动。我测试的时候几条命令,产生了一万五千多条日志,所以,有懂得老师们欢迎评论区留言