ossec部署日志及备注

设计目标

1.日志收集 2.报警配置设置 3.web管理 4.报警数据可视化 5.系统健康检查

安装过程的要点

1.根据官方提供的下载命令安装即可,注意直接下载,会被劫持,需要使用海外的代理下载然后传到本地服务器上安装

2.安装过程需要依赖mysql的相关库才能编译

配置要点

  1. 远程syslog配置
  • 使用syslog、rsyslog、syslog-ng都可以,本次配置使用了syslog-ng,配置文件中添加
destination security_loghost { udp("172.30.1.103" port(514)); };
  • 调试(重点在于监听udp端口,也可以使用tcp端口)

说明:如果ossec服务器端已经启动,则无法使用nc命令,只能用tcpdump进行监听

tcpdump -vv -X -i eth0 'host sorce_syslog_host'
nc -ul -vv 514
netstat -uan

2.ossec server端配置

  • 配置监听514(syslog)端口
  <remote>
    <connection>syslog</connection>
    <port>514</port>
    <protocol>udp</protocol>
    <allowed-ips>172.30.3.0</allowed-ips>
    <local_ip>172.30.1.103</local_ip>
  </remote>

connection标签中可以使用syslog和secure,暂时没有测试两种方案的区别。配置成功后会在安装目录下的logs/alert/alert.log看到所有报警的日志。配置方案参考http://ossec.github.io/docs/syntax/head_ossec_config.remote.html#ossec-config-remote

说明:syslog-output不是接受syslog,而是将报警发给其他syslog服务的server端。

3.ossec规则配置

ossec支持自定义的报警规则,处理的流程是这样的:

1.通过本地文件或者syslog读入一条日志
2.启动pre-decode分析这条日志的基本信息,分别是fullevent,hostname,program_name,log
3.根据pre-decode分析的结果的数据,按照docoder.xml(etc目录下)中的配置,按照一定规则分析该条日志的更多信息,并格式化,以便后面利用这里的数据进行报警规则的匹配
4.报警(待续)

对于报警规则的设置,ossec开发了一个ossec-test配置测试工具(bin/ossec-test)

官方文档:http://ossec-docs.readthedocs.io/en/latest/manual/rules-decoders/create-custom.html

中文文档:http://www.freebuf.com/articles/network/36484.html

官方示例:

运行ossec-logtest -,会将一条日志的分析过程显示出来。当前我们是用一条程序测试的日志,这条日志不是产生于操作系统,ossec并没有找到关于这条日志的配置规则。

# /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.

下面考虑在decoder.xml文件中为这类日志添加一条规则

<decoder name="ossec-exampled">
  <program_name>ossec-exampled</program_name>
</decoder>

[可选]执行ossec-logtest -t测试配置文件。

再次执行ossec-logtest -v

# /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'

可以看到在**Phase 2的部分,已经可以识别出ossec-exampled的名称。

####### *costom rule跨优先级报警的一个例子 [http://linuxbsdos.com/2015/02/26/configure-ossec-to-not-email-alerts-on-iptables-denied-messages/]:http://linuxbsdos.com/2015/02/26/configure-ossec-to-not-email-alerts-on-iptables-denied-messages/


Author | Mushen

THE QUIETER YOU BECOME, THE MORE YOU ARE ABLE TO HEAR. 安全运营搞了十多年,现在在阿里云做安全架构和SDL。