部署ossec所踩过的坑

久未见 提交于 2019-12-24 21:40:40

ossec

为了学习入基于主机的侵检测系统的监控策略和监控内容,所以想自己部署一个HIDS来学习学习。在Google上一顿乱搞之后,点进了ossec的官网,看到映入眼帘的这几个大字,当即决定就是它了,出来吧ossec!!!

ossec

部署环境

docker+windowsR2

  • 服务端部署在docker内
  • 客户端部署在windows2008R2中

部署过程

在这里只记录一下部署ossec遇到的坑(以备日后查看),不讲部署的过程,部署过程我参考的:

  1. OSSEC安全监控环境搭建(docker+yum)安装
  2. 全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS6.X /
    7.X)和ossec-agent(Windows7 / 8 / 10))(图文详解)
  3. OSSEC文件监控(SYSCHECK)
    教程1中所采用的镜像是docker pull xetusoss/ossec-server,是2.83版本的ossec镜像,我第一次安装也是采用了这个镜像,问题不断,后面换成docker pull atomicorp/ossec-docker,这个镜像的版本是最新的,但是是无法启用数据库。

踩坑

报错的日志信息在删除容器时,我顺便也给删除了(后悔了),只能口述报错了

(1)数据库报错

  1. ossec新旧版本数据库发生了变化,ossec3.0以上的版本比2.8的版本少了一张data表,我用3.0版本提供的数据库表时一直会报错,少一个数据表。此外,我第一次用的是mysql8.0版本,也会报错因为认证方式变了,怕麻烦我又拉取了一个5.7的镜像,这是第一个小坑,接下来的坑才让我痛苦。
    #data表的结构
    CREATE TABLE IF NOT EXISTS data
    (
    id MEDIUMINT UNSIGNED NOT NULL,
    server_id SMALLINT UNSIGNED NOT NULL,
    user TEXT NOT NULL,
    full_log TEXT NOT NULL,
    PRIMARY KEY (id, server_id)
    );
    

在这里插入图片描述
2. 当我换成5.7的版本后,当我在mysql容器中创建完数据库,导入完数据表后,把mysql容器提交为新镜像时问题又出现了。当我利用新的镜像创建容器是我新创建的表和数据库竟然没有了。。我一度以为是我提交镜像时除了问题,我又新建库,导入表然后提交为镜像,然而新容器还是啥都没有。
此时我才意识到是mysql容器的原因,Google了一下发现也有人跟我遇到了同样的问题。究其原因竟然是mysql的Dockerfile中把/var/lib/mysql目录给挂载了出来。
解决办法:
Docker之mysql容器数据库更改不生效的解决方法
3. 第二个问题解决后,又出现了新的问题。alert表中的user需要指定一个默认值不然就会报错,但是user是text类型不能设置默认值。这个问题仍未解决让我放弃使用数据库,转而把报警信息转化为json输出(2.9版本以上才可以)。

#sql中给user设置默认值的报错信息
101 - BLOB, TEXT, GEOMETRY or JSON column 'user' can't have a default value

解决办法:
Mysql :: Error:BLOB / TEXT列不能具有默认值

mysql_query("SET @@global.sql_mode='MYSQL40'");

对我却不管用。。。。崩溃


然后我就换成了这个镜像atomicorp/ossec-docker,并放弃了使用mysql数据库(在这个镜像中无法开启mysql数据库服务),转而把日志信息存储成json格式,利用logstash发送给es数据库。
以下是利用ossec-docker镜像所出现的错误及解决办法。

(2)重复计数错误

报错信息如下所示:

2019/12/24 03:47:05 ossec-remoted: WARN: Duplicate error:  global: 0, local: 31, saved global: 0, saved local:3686
2019/12/24 03:47:05 ossec-remoted(1407): ERROR: Duplicated counter for 'eee'.
2019/12/24 03:47:11 ossec-remoted: WARN: Duplicate error:  global: 0, local: 32, saved global: 0, saved local:3686
2019/12/24 03:47:11 ossec-remoted(1407): ERROR: Duplicated counter for 'eee'.
2019/12/24 03:47:15 ossec-remoted: WARN: Duplicate error:  global: 0, local: 33, saved global: 0, saved local:3686
2019/12/24 03:47:15 ossec-remoted(1407): ERROR: Duplicated counter for 'eee'.
2019/12/24 03:47:20 ossec-remoted: WARN: Duplicate error:  global: 0, local: 34, saved global: 0, saved local:3686
2019/12/24 03:47:20 ossec-remoted(1407): ERROR: Duplicated counter for 'eee'.
2019/12/24 03:47:26 ossec-remoted: WARN: Duplicate error:  global: 0, local: 35, saved global: 0, saved local:3686
2019/12/24 03:47:26 ossec-remoted(1407): ERROR: Duplicated counter for 'eee'.
2019/12/24 03:49:16 ossec-remoted: WARN: Duplicate error:  global: 0, local: 36, saved global: 0, saved local:3686
2019/12/24 03:49:16 ossec-remoted(1407): ERROR: Duplicated counter for 'eee'.
2019/12/24 03:49:22 ossec-remoted: WARN: Duplicate error:  global: 0, local: 37, saved global: 0, saved local:3686
2019/12/24 03:49:22 ossec-remoted(1407): ERROR: Duplicated counter for 'eee'.

解决办法:
How to fix Duplicate Counter Error in OSSEC
在服务器端:

  • 执行 /var/ossec/bin/manage_agents
  • 选择 “Extract key for an agent”
  • 把密钥复制下来
  • 关掉ossec服务端

在客户端:

  • 找到 /var/ossec/queue/rids目录
  • 删除rids目录下所有的文件
  • 打开客户端重新输入服务器地址和刚刚拷贝下来的密钥
  • 重新启动客户端

经过以上操作,问题就能解决。

(3)报警日志中的时间戳显示的时间与真实时间不符

这个坑真的是耽误了好一段时间,当时就想不通是什么原因,因为ossec.log中的时间是对的,但是alerts.log内的时间是错误的,一开始以为是邮箱服务器的原因,但是关掉邮箱报警也还是不行,最后发现在ossec /etc文件夹内还有一个localtime文件,ossec用的自己的localtime文件。
解决办法:
替换掉ossec中/etc/localtime

#这是ossec的localtime
$ file localtime 
localtime: timezone data, version 2, 1 gmt time flag, 1 std time flag, no leap seconds, no transition times, 1 abbreviation char
#这是主机的localtime,可以看出他们的区别
$ file /etc/localtime
/etc/localtime: symbolic link to /usr/share/zoneinfo/Asia/Shanghai
#把ossec中的localhost替换掉
$ cp /etc/localtime  ./
$ file localtime
localtime: timezone data, version 2, 3 gmt time flags, 3 std time flags, no leap seconds, 27 transition times, 3 abbreviation chars

替换掉之后重新运行ossec,alerts.log 中的timestamp就会恢复正常。

官方文档:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!