rsyslog服务搭建

1.日志服务器的应用场景

1.1目的

        为了方便日志监控和防止日志被篡改,我们可以使用rsyslog搭建日志服务器用于存放其他服务器的日志。
对于入侵排查工作来说,操作系统的认证日志、计划任务日志和历史命令都是非常重要的。我们把各个系统的相应日志保存到专门的rsyslog日志服务器,保存日志的路径格式为:源IP地址/设施名(日志类别)、年月.log。

1.2平台及工具版本

软件:rsyslog

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

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

2.操作步骤
2.1日志客户端配置


   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文件中了)

配置术语:
facility:中文翻译过来是设施的意思,从功能或程序上对日志分类,
在Linux中常见的facility有:
auth(认证相关的日志),authpriv(授权相关的日志),cron(计划任务相关日志),
daemon(系统服务相关日志),ftp(ftp服务相关的日志),kern(内核相关日志),
lpr(打印相关的日志),mail(邮件相关日志),news(新闻相关的日志),
security(安全相关的日志),user(用户相关的日志),uucp(文件copy相关的日志),
local0-local7(自定义相关的日志)

priority:优先级别,从低到高排序:
debug(调试),
info(消息),
notice(注意),
warn(warning警告),
err(error错误),
crit(critical严重警告),
alert(需要立即修改的信息)
emerg(panic内核崩溃,内核恐慌等严重的信息)

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

local1.notice @@192.168.43.234:514

保存退出。

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

2.2 日志服务器配置
1、 rsyslog服务配置

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

#TCP和UDP可以被同时生效来监听TCP/UDP 连接。这里只使用了TCP
$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所对应的文件。

2、配置/etc/sysconfig/rsyslog
修改配置文件中SYSLOGD_OPTIONS=" -m 0" 添加“ -r选项”即可

目的可以让服务器能够接受客户端传来的数据

3、重启rsyslog服务
systemctl restart rsyslog //重启服务

2.3 配置防火墙
作为日志服务器,需要开启访问端口。(或者直接关闭防火墙)

//开放514 tcp 端口
firewall-cmd --zone=public --add-port=514/tcp


2.4测试
在客户端发送一条日志信息

//发送一条info级别或以上级别的日志
logger -p "mail.info" "this is test log"


在日志服务器 /var/log目录下

tail -f messages

注意:
不管在任何情况下,都不要配置rsyslog客户端将日志消息通过不安全的网络转发,或者,特别是通过互联网转发,因为syslog协议是一个明文协议。要进行安全传输,可以考虑使用TLS/SSL来加密日志消息的传输。

你可能感兴趣的:(linux,服务器,linux,运维)