返回 登录
2

使用RSYSLOG中继和转发日志

作者:唯品会安全应急响应中心技术团队,2015年9月16日唯品会安全应急响应中心(VIP Security Response Center , 简称VSRC)应运而生,隶属于唯品会(中国)有限公司信息安全部。VSRC成立以来,一直致力于持续建设更加安全可靠的线上购物平台,为3亿用户的安心购物体验保驾护航,同时加强与业界同仁的合作与交流,推动行业共同进步。

责任编辑:孙浩峰 关注云计算、大数据、运维、安全方面,欢迎大家投稿,投稿信箱:sunhf@csdn.net。

公司运维团队已经完成了针对分布在各个分支机构的交换机、路由器和防火墙的 syslog 日志的收集。安全基于 ISO27001和等级保护建设的需求,也希望收集此类设备的日志进行安全审计。

虽然主流的网络和安全设备都支持同时向多个syslog 日志发送目标——双发或多发;但是,为降低链路带宽占用,安全和运维就日志收集方式进行了技术讨论。最终决定放弃双发方式,而是对运维收到的日志进行转发。该方案的优点是:运维团队不需要对1000多台既有设备做任何配置变更;同时,链路上只存在一路日志收集,带宽能够得到保障。运维的日志还可以转发给多个目标,如安全、监控中心等。

据了解,目前运维使用了 RSYSLOG 作为日志收集和存储的服务端。幸运的是RSYSLOG 支持日志中继转发这一高级功能。

日志流转示意图

下图展现的就是本次日志收集和转发的逻辑:
设备–> 运维RSYSLOG服务器: 交换机
设备–> 运维RSYSLOG服务器: 路由器
设备–> 运维RSYSLOG服务器: 防火墙
运维RSYSLOG服务器–>安全日志收集代理:各种转发方式
Note right of 安全日志收集代理:格式化
安全日志收集代理->ElasticSearch:ELK-Stack
关键是运维同事需要如何配置RSYSLOG才能实现转发日志给安全团队,让我们来了解下原理。

技术原理

”RSYSLOG is the rocket-fast system for log processing“,有什么问题请访问网站:http://www.rsyslog.com/

按照rsyslog.com的说法:RSYSLOG提供高性能,极好的安全功能和模块化设计。 RSYSLOG已然从一个常规的系统日志发展成了瑞士军刀,能够接受来自各种来源的输入,也能转换和输出到各种目标系统。

在特定处理场景下,RSYSLOG可以每秒向本地目标设备发送超过一百万条消息(基于2013年12月的第7版)。 即使发送到远程目标系统并加以更精细的处理,其性能通常被认为是“令人惊叹”的。

来看看支持多线程、UDP、TCP、SSL、TLS、RELP、过滤器、配置输出等特点的企业级日志中继服务器 RSYSLOG 吧!

配置实现

要实现文章首节提出的日志转发需求,通过以下步骤可以实现。

首先,配置/etc/rsyslog.conf文件,加载 UDP/TCP 的syslog接收模块,并设置监听端口。
# Provides UDP syslog reception # CentOS7.2
$ModLoad imudp
$UDPServerRun 5144
# Provides UDP syslog reception # CentOS6.8
$ModLoad imudp.so
$UDPServerRun 514

注意,如果你要需要 rsyslog 监听UDP 514端口,还需要设置 SELinux,否则该端口无法使用。

第二步,配置日志中继转发的目标。此处举例,将日志以 syslog 方式转发到安全团队的 Logstash 日志收集代理服务器192.168.21.2。

* . * action(type="omfwd" Target="192.168.21.2" Port="1514" Protocol="tcp")

#或者

* . * @@192.168.21.2:1514

## @@是 TCP,@是UDP
最后,执行命令service rsyslog restart重启 rsyslog 服务,静待日志从远程设备发到 rsyslog 再中继转发到安全日志收集代理!

高级参数

下面将介绍RSYSLOG的一些高级参数,你将看到高级参数数如何满足定制化需求的。

日志分类存储

以下配置参数,可实现不同交换机设备IP 的日志转储到不同的日志文件。这是目前运维团队正在使用的配置。

$template SwitchLogs,”/var/log/syslog/%FROMHOST-IP%-%PROGRAMNAME%.log”*
* . * ?SwitchLogs

根据日志类型和优先级设定发送目标

除此之外,针对特定日志类型,我们还希望能转发安全日志收集代理,请参看如下配置:

$template SwitchLogs,"/var/log/syslog/%FROMHOST-IP%-%PROGRAMNAME%.log"*
* . * ?SwitchLogs
daemon.info;auth.info;syslog.;authpriv. @@192.168.21.2:1514 # SecAudit

template 参数相关配置项,请参考:http://www.rsyslog.com/tag/template/

对日志字段或内容进行过滤判断

对本机日志进行过滤

$template SwitchLogs,"/var/log/syslog/%FROMHOST-IP%-%PROGRAMNAME%.log" *
:fromhost-ip, !isequal, "127.0.0.1" ?SwitchLogs
:msg, contains, "error" /var/log/error.log
*.info @192.168.21.2

##更高级的过滤条件。以下必须写在一行,使用时删除反斜线\

if $syslogfacility-text == 'local0' \
and $msg startswith 'DEVNAME' and not \
($msg contains 'error1' or $msg contains 'error0') \
then /var/log/somelog

更多日志发送目标

日志转发到 Kafka

module(load="omkafka") # lets you send to Kafka
#...
action(
broker=["localhost:9092"]
type="omkafka"
topic="rsyslog_topic"
template="json"
)

日志转发到 MySQL

#以下必须写在一行,使用时删除反斜线\

$template insertpl,"insert into SystemEvents \
(Message, Facility, FromHost, FromIP, Priority, \
DeviceReportedTime, ReceivedAt, InfoUnitID, \
SysLogTag) values ('%msg%', %syslogfacility%, \
'%HOSTNAME%', '%fromhost-ip%', %syslogpriority%, \
'%timereported:::date-mysql%', \
'%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQL
$ModLoad ommysql
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
. :ommysql:172.172.178.78,Syslog,syslogadmin,123456;insertpl

其它

不对特定的日志做处理。

:rawmsg, contains, "test abc" ~ #日志中包含 testabc,则不处理
& ~#本行以下动作不做执行

参考资料

•RSYSLOG的条件过滤,请参考:http://www.rsyslog.com/doc/v8-stable/configuration/filters.html
◦ 基于传统的severity 和 facility的过滤
◦ 基于属性值的过滤器
◦ 基于表达式的过滤器
◦ BSD-style风格过滤器(不向上兼容)
•RSYSLOG配置过程中可用的变量或属性参数:http://www.rsyslog.com/doc/v8-stable/configuration/properties.html

评论