ossec
为了学习入基于主机的侵检测系统的监控策略和监控内容,所以想自己部署一个HIDS来学习学习。在Google上一顿乱搞之后,点进了ossec的官网,看到映入眼帘的这几个大字,当即决定就是它了,出来吧ossec!!!
部署环境
docker+windowsR2
- 服务端部署在docker内
- 客户端部署在windows2008R2中
部署过程
在这里只记录一下部署ossec遇到的坑(以备日后查看),不讲部署的过程,部署过程我参考的:
- OSSEC安全监控环境搭建(docker+yum)安装
- 全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS6.X /
7.X)和ossec-agent(Windows7 / 8 / 10))(图文详解) - OSSEC文件监控(SYSCHECK)
教程1中所采用的镜像是docker pull xetusoss/ossec-server
,是2.83版本的ossec镜像,我第一次安装也是采用了这个镜像,问题不断,后面换成docker pull atomicorp/ossec-docker
,这个镜像的版本是最新的,但是是无法启用数据库。
踩坑
报错的日志信息在删除容器时,我顺便也给删除了(后悔了),只能口述报错了
(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
就会恢复正常。
官方文档:
来源:CSDN
作者:dota tatata
链接:https://blog.csdn.net/weixin_43968507/article/details/103685529