翻译:http://ossec-docs.readthedocs.io/en/latest/manual/rules-decoders/rule-lists.html
创建自定义解码器和规则
OSSEC的主要特性之一是监视系统和应用程序日志。许多流行的服务都已配有有日志和解码器,但是有数百个没有被覆盖。定制的应用程序和服务也不会被覆盖。OSSEC为服务添加解码器和规则通常非常简单。
添加要监视的文件
在配置中添加一个日志文件是很简单的。在系统的 ossec.conf添加一个这样的条目:
在添加localfile条目之后,必须重新启动OSSEC进程。
创建一个定制的解码器
下面的日志消息将用于本节中的大多数示例:
自定义解码器添加到/var/ossec/etc/local_decoder.xml中,
使用ossec-logtest测试结果
第一阶段“pre-decodes”一些信息。主机名是生成日志消息的系统,程序名是创建日志的应用程序的名称,而日志是日志消息的其余部分。
下面是一个非常基本的解码器ossec-exampled
这是在添加这个解码器之后的ossec-logtest输出:
在添加了这个解码器后,ossec-logtest输出:
创建自定义解码器和规则
OSSEC的主要特性之一是监视系统和应用程序日志。许多流行的服务都已配有有日志和解码器,但是有数百个没有被覆盖。定制的应用程序和服务也不会被覆盖。OSSEC为服务添加解码器和规则通常非常简单。
添加要监视的文件
在配置中添加一个日志文件是很简单的。在系统的 ossec.conf添加一个这样的条目:
<localfile>
<log_format>syslog</log_format>
<location>/path/to/log/file</location>
</localfile>
syslog是一种通用格式,由附加到日志文件的一行文本组成。还有其他可用的格式,它们在localfile语法页面上详细说明。
在添加localfile条目之后,必须重新启动OSSEC进程。
创建一个定制的解码器
下面的日志消息将用于本节中的大多数示例:
2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1
2013-11-01T10:01:05.600494-04:00 arrakis ossec-exampled[9123]: successful authentication for user test-user from 192.168.1.1 via test-protocol1
说明如下
2013-11-01T10:01:04.600374-04:00 - rsyslog时间戳
arrakis - 主机名
ossec-exampled - 日志产生着
[9123] - ossec-exampled实例进程ID
test connection from 192.168.1.1 via test-protocol1 - 日志消息
使用ossec-logtest测试自定义的解码器及规则
自定义解码器添加到/var/ossec/etc/local_decoder.xml中,
使用ossec-logtest测试结果
# /var/ossec/bin/ossec-logtest
2013/11/01 10:39:07 ossec-testrule: INFO: Reading local decoder file.
2013/11/01 10:39:07 ossec-testrule: INFO: Started (pid: 32109).
ossec-testrule: Type one log per line.
2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1
**Phase 1: Completed pre-decoding.
full event: '2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1'
hostname: 'arrakis'
program_name: 'ossec-exampled'
log: 'test connection from 192.168.1.1 via test-protocol1'
**Phase 2: Completed decoding.
No decoder matched.
这里没有很多输出,因为OSSEC不了解这个日志。为这个日志消息创建一个解码器将为OSSEC提供更多的信息。
第一阶段“pre-decodes”一些信息。主机名是生成日志消息的系统,程序名是创建日志的应用程序的名称,而日志是日志消息的其余部分。
下面是一个非常基本的解码器ossec-exampled
<decoder name="ossec-exampled">
<program_name>ossec-exampled</program_name>
</decoder>
这个解码器只是查找由ossec-exampled生成的任何日志消息。使用这样一个非常通用的解码器,可以让OSSEC用户为使用较少的日志消息的服务创建更特定的子解码器。
这是在添加这个解码器之后的ossec-logtest输出:
# /var/ossec/bin/ossec-logtest
2013/11/01 10:52:09 ossec-testrule: INFO: Reading local decoder file.
2013/11/01 10:52:09 ossec-testrule: INFO: Started (pid: 25151).
ossec-testrule: Type one log per line.
2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1
**Phase 1: Completed pre-decoding.
full event: '2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1'
hostname: 'arrakis'
program_name: 'ossec-exampled'
log: 'test connection from 192.168.1.1 via test-protocol1'
**Phase 2: Completed decoding.
decoder: 'ossec-exampled'
阶段2现在正确地标识了这个日志消息,它来自于ossec-exampled。在日志消息中仍然有一些非常重要的信息应该被解码,即源IP和test-protocol1。要解码这些子解码器,将会被添加。它将把ossec-exampled解码器作为父类,并使用prematch来限制它对正确的日志消息的使用。
<decoder name="ossec-exampled-test-connection">
<parent>ossec-exampled</parent>
<prematch offset="after_parent">^test connection </prematch> <!-- offset="after_parent" makes OSSEC ignore anything matched by the parent decoder and before -->
<regex offset="after_prematch">^from (\S+) via (\S+)$</regex> <!-- offset="after_prematch" makes OSSEC ignore anything matched by the prematch and earlier-->
<order>srcip, protocol</order>
</decoder>
拆解
<decoder name="ossec-exampled-test-connection"> - 声明这是一个解码器,并给它起一个名字。
<parent>ossec-exampled</parent> - 这个译码器只有在ossec-exampled匹配的情况下才会被检查。
<prematch offset="after_parent">^test connection </prematch> - 如果一个日志消息不包含预匹配中的数据,那么它就不会使用那个解码器。设置偏移量告诉OSSEC只在父进程(在本例中为9123:在本例中)之后查看数据,以加快匹配速度。
<regex offset="after_prematch">^from (\S+) via (\S+)$</regex> regex行可用于从日志消息中提取数据,以便在规则中使用。在这个实例中,第一个S+匹配IP地址,第二个匹配协议。括号之间的任何内容都可以在规则中使用。
<order>srcip, protocol</order> - 定义regex行中的条目被标记为什么。IP地址将被标记为srcip和proto的协议。
在添加了这个解码器后,ossec-logtest输出:
# /var/ossec/bin/ossec-logtest
2013/11/01 11:03:25 ossec-testrule: INFO: Reading local decoder file.
2013/11/01 11:03:25 ossec-testrule: INFO: Started (pid: 6290).
ossec-testrule: Type one log per line.
2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1
**Phase 1: Completed pre-decoding.
full event: '2013-11-01T10:01:04.600374-04:00 arrakis ossec-exampled[9123]: test connection from 192.168.1.1 via test-protocol1'
hostname: 'arrakis'
program_name: 'ossec-exampled'
log: 'test connection from 192.168.1.1 via test-protocol1'
**Phase 2: Completed decoding.
decoder: 'ossec-exampled'
srcip: '192.168.1.1'
proto: 'test-protocol1'