Syslog类型Connector安装配置-ArcSight实战系列之四

上篇介绍了ESM安装和配置,本篇介绍Syslog类型Connector安装配置,开始采集日志和配置UseCase了,好鸡冻。

Syslog是大多数设备对外发送日志采用的通讯协议,ArcSightConnector本身也具备直接接收并解析通过Syslog发送的日志能力,具体如下:

Windows平台:由于Windows平台本身不提供Syslog服务,因此ArcSight Connector在Windows平台上提供Syslog Daemon类型Connector,此Connector本身可以提供Syslog服务(默认UDP/514)。

Unix/Linux平台:由于Unix/Linux平台的操作系统本身默认就有Syslog服务,通过配置相关的Syslog服务配置文件可以将接收到的Syslog日志信息保存在Pipe或文件中,因此ArcSight Connector在Unix/Linux平台上提供直接读取Pipe或文件信息的Connector。ArcSight Connector在此平台上也提供基于Syslog-NG的Connector。

一、早期的困境

我们最早(大约在200X年左右)是使用Linux平台(CentOS 4.x)作为Connector的操作系统,使用操作系统自带的Syslog服务,基于Syslog的Facility及Priority将接收到的日志写入不同的Pipe,然后通过Connector for Syslog Pipe读取这些Pipe接收日志,但很快就发现这种方式会带来一些问题:

区分日志源规则简陋:操作系统自带的Syslog服务只能基于Facility及Priority定义规则,而很多设备定义Syslog发送时的配置不能定义Facility及Priority,即使可以定义Facility及Priority的参数,但Facility和Priority的数量是有限的(Facility Code是0-23,Priority Value是0-7),很多不同类型的日志由于Facility及Priority相同不得不混在相同的Pipe或文件里,假如有些Syslog内容格式很相似比较容易导致Connector对日志源的判断出现错误。

维护/调试困难:由于Linux上Pipe的容量有限(Kernel 2.6.11之前是4K,之后是64K),而且Pipe按先进先出的原则执行数据的写入及推出,面临的问题是,假设某些设备已经配置发送了日志,而Connector发送到ESM中查询不到,不得不读取Pipe时(例如通过tail)就会导致这部分信息会被调试工具读取掉,Connector会读不到这部分日志导致日志丢失。此外,Connector无论出于什么原因总有需要重启服务的时候,这段时间Pipe中的日志也会有丢失的概率,采用写入文件的方式可以解决这个问题,但是文件的循环就需要有个机制,当然这可以通过Linux的logrotation机制应对,但当时版本的Linux做文件循环的时候会出现把一整条日志从中间截断的情况,导致该条日志的处理会出现错误。

缺少日志发送者的IP地址:由于Syslog的包头格式中仅包含发送者的主机名,而大多数企业的主机名定义未必规范,这会导致发送到ESM中的日志中设备地址字段(deviceAddress)是空的,或是相同的localhost,结果就是对设备日志源有效性监视的Use Case完全失去作用,相关的日志源分析报表及仪表板也变得意义很小,对事件分析员来说后续的调研很困难。

对大日志量的环境缺乏可扩展性:一般来说发给日志源设备管理员的配置文档大多是固定某个IP地址/端口和协议,如果仅由一台服务器来承受是不具备可扩展性的,随着业务量的增长,Syslog日志量会越来越大,总不能经常让设备管理员更改发送Syslog的IP地址及端口吧。

二、应对的方法

为了解决上述问题,我们分别使用过Syslog-NG(当时是Suse中的标配)和Rsyslog,最后选择了Rsyslog+LVS的解决方案,后来这两个模块在CentOS 5.8以后基本都成为CentOS的基本包了,选择的原因如下:

Rsyslog的规则比较灵活,可以将Syslog的报文中的属性提取出来作为判断规则的参数项,相应的规则写法也比较易读,便于后期维护,至少当时我们觉得比Syslog-NG的语法易读。

Rsyslog可以修改Syslog的报文内容,例如可以使用Template将Syslog包头中的HostName换为日志源的IP地址,彻底解决日志中没有设备IP地址的问题。

Ryslog还有很多的插件,例如Syslog转发的时候可以使用UDPSpoof保留原始的日志源IP地址。使用outchannel可以指定文件大小循环写入的文件,而且不会截断日志。使用impstats可以提供Rsyslog各模块的处理性能参数,以利于后续监控Rsyslog的健康度。

Rsyslog和LVS本身是开源的,如果未来想搞定制化有基础。

三、相关方案

采用CentOS已经内核内置的LVS+Keepalived做负载均衡管理,为了充分利用现有的服务器的性能,LVS的工作方式采用DR(Direct Routing),每台服务器上同时承担负载均衡器(Director/LoadBalancer)和真实服务器(RealServer/Pool Server)角色,其中一台服务器作为主负载均衡器(MASTE),其优先级(priority)设置为100,其他的服务器作为备负载均衡器(BACKUP),它们的先级(priority)均低于100且各不相同,根据优先级的数值顺序在主负载均衡器无法提供服务时承担主负载均衡器角色。

采用Keepalived检测各真实服务器(Real Server/Pool Server)提供的相关Syslog服务的存活性,对于TCP514的检测直接使用Keepalived内置的TCP_CHECK功能,对于UDP 514的检测通过编写自定义脚本使用nc命令实现并使用MISC_CHECK加以调用。

以下为相关的部署架构示意图:

相关的部署逻辑示意图如下:

四、前提条件及限定

组成一个集群的所有服务器均需要在同一网段且不能经过路由器进行连接的网络环境中;

在保证至少有一台负载均衡器存活的情况下,服务切换会有短暂的中断(时长和配置及服务器、网络性能有关),因此此时间段的日志会丢失,尤其是UDP协议的Syslog,但在测试的环境下切换的时长不超过2秒。

由于LVS的负载均衡算法绝大多数是使用TCP连接数和权重进行计算并分配的,而基于UDP的Syslog无状态值也谈不上连接数,因此Keepalived可以实现HA但是根据目标服务器的负载及请求的连接数进行精确均衡的功能实现的不是很完美,个别情况下会出现部分服务器有负载,而其它服务器没有负载的情况,此时可能需要人工干预或根据实际情况去调整权重、均衡算法或用于检测UDP的脚本返回数值,不过看在不花钱的份上也就接受了。

五、相关Rsyslog配置简介

Rsyslog最新版本的完整官方文档链接如下:http://www.rsyslog.com/doc/v8-stable/,以下就我们主要的定制化内容做点简单介绍,毕竟本系列文章主要介绍ArcSight的相关内容。

Rsyslog的默认配置文件放置在/etc/rsyslog.d的目录下,所有的配置项按字母顺序执行,因此我们按下图的命名规则定义相关的配置项,这些配置文件已经打包在自动化安装光盘中,通过Kickstart脚本自动部署及配置。

(一)Input模块

imudp模块,可以提供udp/514的标准Syslog服务;

imtcp模块,可以提供tcp的Syslog服务;

imrelp模块,可以提供基于ReliableEvent Logging Protocol (RELP)的服务,可以确保Syslog包不丢失,不过前提是发送者也要通过relp发送数据,此模块我们主要用于自己搭建的多个rsyslog服务器之间数据发送;

impstats模块,可以提供rsyslog自身及各模块的性能数据;

imfile模块,可以读取本地的文本文件并通过syslog对外发送,此模块在Linux环境中对付应用类日志很有用,因为很多应用日志只是在本地循环,没有发送syslog的能力,而应用服务器一般不愿意安装各类agent,使用此模块可以很好的规避这类问题,并且可以实时把日志发送出去;

(二)output模块

omfwd模块:此为内置模块,用于日志的转发,不过这个模块转发的日志不会保留原始日志源的包头信息;

omrelp模块:用于转发relp信息,需要配合imrelp模块使用;

omudpspoof模块,可以在转发日志时保留原始日志源的包头信息;

outchannel模块,可以指定文件尺寸执行外部的一个脚本,我们利用此功能做日志文件的循环,/home/arcsight/shell/log_rotation_script.sh就是执行的日志切换脚本,此模块可以定义多个;

(三)template配置

Template可以定义多个,上图就是将默认的Syslog包头信息重新组合,将其中的HostName替换位发送者的IP地址。

(四) Rule配置示例

上图是将所有接收到的Linux Audit Syslog信息入/var/log/rsyslog/linuxaudit.file的配置文件内容。

Linux Audit信息都是通过audispd发送Syslog,因此只需定义$programname == 'audispd'即可过滤出所有的Linux Audit Syslog信息。

由于本机audispd发送者的地址为都为127.0.0.1,这样的日志信息后续无法继续定位、调研,因此需要通过template中的定义local_ip_format,将本机的实际IP地址替换掉127.0.0.1。

Omfile表示将符合上述过滤条件的日志写入文件,$linuxaudit_rotation表示使用名为linuxaudit_rotation的outchannel定义循环写入的/var/log/rsyslog/linuxaudit.file,这里的例子中每10M一个文件,保留2个文件,循环后的文件后缀加上.1。

六、ArcSight Connector配置

ArcSightConnector for Syslog File涉及很多类型,以下以FlexConnector Multiple Folder File为例介绍采集Linux Audit Syslog信息,因为这个类型Connector的配置参数最全。

1.下载ArcSight Connector安装软件(最新为7.7.0.8036.0)(软件哪里下载?请看本系列第一篇),上传并执行(强烈不建议用root安装、强烈不建议用root安装、强烈不建议用root安装),选择FlexConnector Multiple FolderFile类型。

2.选择Log Unparsed Events为True;

3.点击Add按钮,输入如下的配置项:

Folder:/var/log/rsyslog(此为linuxaudit.file文件所在目录,该信息在rsyslog的配置文件中定义);

Processing Mode:realtime,因为此日志是实时记录非批量导入;

Configuration File:linux_auditd/linux_auditd,此为调用ArcSight SmartConnector的解析器配置;

Configuration Type:sdkrfilereader,表明此为正则表达式类型的解析器;

4.选择发送的后台服务类型,本处按发送给ESM Manager为例;

5.输入ESM Manager的主机名及有权限注册Connector的账号及密码(最佳实践是单独创建1个仅能安装、注册Connector的账号,不要用管理员账号);

6.输入注册的Connector的名称;(最佳实践,名称在规划时制定命名规范,其余栏目留空不要输入信息,除了Comment。)

7.如果一切正确,将会显示类似如下图的提示;

8.选择Exit完成初始化配置;

9.以安装软件的账号编辑/current/user/agent/agent.properties;

10.主要修改的参数项如下:

agents[x].foldertable[x].encoding=:ArcSight Connector默认以UTF-8字符集处理日志内容,如果日志字符集不是UTF-8,例如是GB2312,请修改此参数,默认为空;

agents[x].foldertable[x].followexternalrotation=true:由于日志文件会循环,循环后的文件自动加上.1,此参数设置为true,Connector会在读取日志文件时检查是否文件发生了循环处理,如果发现文件做了循环,Connector先读取之前循环后的文件中未处理完记录后再读取当前日志文件,例如先读取linuxaudit.file.1最后未处理完的日志后再读取linuxaudit.file,默认为false;

agents[x].foldertable[x].preservestate=true:Connector重启之前会记录当前读取的文件行数,重启后会从上次读取的记录之后读取新的日志,确保重启Connector不会丢失日志(前提是重启的时间窗口内,日志记录文件没有被彻底循环删除掉),默认为false;

agents[x].foldertable[x].startatend=false:Connector每次启动时是否只读取日志文件中的新记录,默认为false;

agents[x].foldertable[x].wildcard=linuxaudit.file:设置读取的日志文件名格式,这样可以确保本Connector只读取特定文件,而这个文件的内容又通过rsyslog的规则确保只写入制定类型的日志信息,默认值为*;

11.以Connector的运行账号手工以进程方式运行Connector查看解析处理是否正常,没有报错信息;

12.如果解析正常,没有报错,以root权限安装Connector自启动服务

#./arcsight agentsvc -i -u arcsight -sn LinuxAudit-01

-i 表示安装服务;

-u arcsight表示此服务运行的进程拥有者用户账号名;

-sn LinuxAudit-01表示此服务的名称;

运行成功后将可使用/etc/init.d/arc_LinuxAudit-01脚本启动、停止此Connector。

Syslog类型ArcSight Connector安装部署大致介绍到这里,下一篇开始介绍Use Case。

三月已至,深圳已成花海,安全圈的朋友们,除了漏洞和创业,还有花和远方,出去踏青赏花吧。

(未完待续)

往期阅读量最高文章推荐

生活篇

----------------------------------------------

企业安全建设,离不开“守望相助”。金融业企业安全建设微信群,在历次安全事件、安全应急中有大量实况直播,处置措施及时性、有效性,让我自己也获益良多。有兴趣加入的企业安全负责人,请关注微信公众号“君哥的体历”,后台留言,微信号+公司名称,验证身份后入群。

附注:

聂君,信息安全从业人员,十余年金融行业信息安全从业经历,默默无闻。好读书,不求甚解。性格开朗,爱好足球。

本订阅号文章是个人对工作生活的一些体验和经历分享,站在不同角度和立场解读会有偏差,见仁见智,不求正确统一,但求真、善、美。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180314G1N7WX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券