开源安全运维平台OSSIM疑难解析:提高篇
上QQ阅读APP看书,第一时间看更新

Q011 如何将Snort报警存入MySQL数据库?

将Snort报警存入MySQL数据库需要如下几个步骤。

步骤1.安装MySQL数据库及PHP扩展。

#yum install -y mysql-server mysql-devel php-mysql php-pear php-gd libtool php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-pecl-apc
#chkconfig --level 235 mysqld on  //将MySQL服务设置为在运行级别为2、3、5时都是开启状态
#/etc/init.d/mysqld start

步骤2.为数据库管理员root赋予密码。

#/usr/bin/mysqladmin -u root password '123456'

注意,root用户登录phpMyAdmin时,同样使用这个密码。

步骤3.创建Snort数据库并设定读取权限。

#mysql -u root -p

输入步骤2中设置的密码“123456”。

mysql>create database snort;
mysql>use snort;
mysql>create user 'snort'@'localhost' IDENTIFIED BY '123456';

在以上命令中,“123456”是MySQL中用户Snort的密码。

接着创建名为snort、密码为“123456”的数据库用户,并赋予名为“snort”的数据库权限(先解压barnyard2-1.9.tar.gz包)。

mysql>grant create,select,update,insert,delete on snort.* to snort@localhost identified by '123456';
mysql>set password for ‘snort’@’localhost’=password('123456');//为用户snort设置访问密码
mysql>source /usr/local/src/barnyard2-1.9/schemas/create_mysql;  //该命令不可重复输入
mysql>show tables;
mysql>flush privileges;   //刷新数据库权限
mysql>exit

注意:先解压barnyard2-2-1.13压缩包;在执行前确保Snort库被选中;barnyard2-2-1.13所在路径要正确(使用绝对路径)。

步骤4.安装和配置Barnyard2。

Barnyard2的作用是读取Snort产生的二进制事件文件并存储到MySQL中。Snort的配置文件自身含有插件,它允许将Snort报警记录到MySQL中,但这样一来,系统数据会激增。当IDS系统检测到攻击行为时,它会用INSERT语句向数据库中写入数据,导致更新非常慢。所以如果直接将Snort输出到数据库,在数据量增大时这种方案的效率并不高,故使用外部代理将报警输出到Barnyard2。

·源码包安装。

#cd /usr/local/src/
#tar zxvf barnyard2-1.9.tar.gz
#cd barnyard2-1.9/
#./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql  //此处配置参数很重要,切勿出错
#make               //见到如下内容后,才可继续安装

只有确保上面关键两步不出错,才能继续安装。

#make install

·配置Barnyard2。

首先在/var/log/中创建目录Barnyard2和文件barnyard2.waldo。

#mkdir /var/log/barnyard2
#touch /var/log/snort/barnyard2.waldo

·设置文件barnyard2.waldo的属主。

#chown snort.snort /var/log/snort/barnyard2.waldo

·复制Barnyard2的配置文件。

与Snort配置类似,Barnyard的初始化配置也是通过复制已有的.conf配置文件来完成。因此先将Barnyard2的配置模板文件复制到/etc/snort目录下。

#cp /usr/local/src/barnyard2-1.9/etc/barnyard2.conf  /etc/snort

·修改配置文件barnyard2.conf。

#vi /etc/snort/barnyard2.conf

找到对应行并将其修改成如下内容:

第44行config logdir:/var/log/barnyard2       //该目录权限为snort.snort
第56行     config hostname: localhost
第57行     config interface: eth0
第131行    config waldo_file:/var/log/snort/barnyard2.waldo

修改完成之后保存并退出。

下面这条语句用来设置数据库访问权限,其中定义了用户名为snort,密码为123456,数据库名称为snort,主机名为localhost。

第318行  output database: log,mysql,user=snort password=123456 dbname=snort host=localhost

编辑完成后保存退出。

·修改目录的属主。

#chown snort.snort /var/log/barnyard2

·启动Snort和Barnyard2进行联合测试。

#snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 –D

·测试Barnyard2。

#barnyard2 –c /etc/snort/barnyard2.crnf –d/var/log/snort/
           -f snort.log –w /var/log/snort/barnyard2 waldo
           -g snort –u snort -T

此时不会看到输出结果,因为程序在后台运行(“-D”参数表示后台运行)。

同样ping主机,继续执行以下命令。

#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log –w /var/log/snort/barnyard2.waldo

命令参数的解释如下所示。

·-c:该选项指定Barnyard配置文件的路径。该参数为必选项。

·-d:指定Unified格式文件的路径,这里指定为/var/log/snort/,所有Unified文件必须放在该目录下。该参数为必选项。

·-f:该选项指定Barnyard以连续方式运行时的Unified文件名。Snort在每次生成的Snort Unified文件后面都加了一个UNIX时间戳,去掉时间戳后缀就是文件名。

·-w:该选项打开检验功能,告诉Barnyard检验文件名(也称为waldo文件)。该文件用于记录文件中最近处理的报警。如果不使用waldo文件,则Barnyard必须完整地载入一个日志文件,该参数的作用是将报警信息传送至入侵数据库。

如果在以上显示中发现最后一行出现“Waiting for new spool file”,则表示上面的操作成功。在/var/log/snort目录下有一些snort.log+times_stamp的二进制文件,这些文件由Snort输出插件所生成。

步骤5.使用下述命令查询报警信息是否存入数据库。

#mysql -u snort -p -D snort -e "select count(*) from event"

实际操作效果如下所示。

如果在count(*)下方没有数字,则表示报警信息没有存入数据库,那么需要从头检查配置过程。参数含义如下。

 [root@localhost ~]# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort
Running in Continuous mode
         --== Initializing Barnyard2 ==--
Initializing Input Plugins!
Initializing Output Plugins!
Parsing config file "/etc/snort/barnyard2.conf"
Log directory = /var/log/barnyard2
database: compiled support for (mysql)
database: configured to use mysql
database: schema version = 107
database:           host = localhost
database:           user = snort
database:  database name = snort
database:    sensor name = localhost:eth0
database:      sensor id = 1
database:     sensor cid = 1
database:  data encoding = hex
database:   detail level = full
database:     ignore_bpf = no
database: using the "log" facility
        --== Initialization Complete ==--
  ______   -*> Barnyard2 <*-
 / ,,_  \  Version 2.1.9 (Build 263)
 |o"  )~|  By the SecurixLive.com Team: http://www.securixlive.com/about.php
 + '''' +  (C) Copyright 2008-2010 SecurixLive.
           Snort by Martin Roesch & The Snort Team: http://www.snort.org/team.html
           (C) Copyright 1998-2007 Sourcefire Inc., et al.
WARNING: Ignoring corrupt/truncated waldofile '/var/log/snort/barnyard2.waldo'
Waiting for new spool file