Snort mysql概述

96
小天是我见过最单纯善良的人
2015.09.02 11:16* 字数 6725

本章5.1节中数据库的创建方法现在已经不再使用,具体创建数据库的方法请参考 这里
此篇文章不适合对照搭建系统,建议只是通读原理即可。

  所有的系统都需要某种类型的可以有效的纪录的机制,这种机制通常是通过后台的数据库来完成的。Snort可以同MySQL、Oracle或者其他任何一种ODBC兼容的数据库一起工作。在前面的章节中,你已经了解了你可以通过输出模块将日志和告警保存在数据库中,这对保存历史数据并产生报告和分析数据是非常有用的。利用如ACID(将在下一章讨论)之类的工具,也可以得到关于入侵特征非常有用的信息,例如你可以得到最后15次攻击的报告,其中的信息包括连续攻击你的网络的主机,攻击不同协议的分布等等。
  MySQL是可以免费得到的数据库系统,并且能够在Linux和其他操作系统上很好的工作,因此对于Snort来说,是一种很自然的选择。
  你可以在运行Snort的机器上同时安装MySQL服务器,你也可以将MySQL服务器安装到另外一台机器上,并将Snort日志记录到这台机器
你也可以用一台中心MySQL服务器记录多个Snort感应器的信息,如图5-3所示。
  方案的选择取决于你的特定需求。例如,你只有一个Snort感应器,并且没有现有的数据库服务器,这样一个很自然的做法是将数据库和Snort安装在同一个机器上。但如果你有多个Snort机器,就应该建立一个中心数据库服务器。
  如果从远程Snort机器登录到独立的数据库服务器上,在传输数据的时候可以不采取安全措施,也可以采用某种加密手段。利用安全隧道,所有在Snort机器和数据库服务器之间传输的数据都将被加密,这种手段也可以用于穿越防火墙的情况,因为这时你可以利用防火墙已经打开的端口。
  在将Snort数据记录到MySQL数据库之前,你建立一个库。建立数据库后,必须要为数据库创建表用来记录Snort数据。你可以在http://www.incident.org/snortdb/ 参考关于这些表的详情,你可能需要重新编译Snort才能够支持MySQL,本章的后面将会对此做出说明。
  学习完本章后,你将可以安装Snort和MySQL并将所有的Snort活动记录到数据库中。你也将了解如何用中心数据库服务器纪录多个Snort机器的数据。本章的最后部分将提供用安全隧道来管理Snort和远程数据库服务器间传输通道安全的信息。

5.1使Snort与MySQL共同工作

  为使Snort与MySQL共同工作,有几个事情需要做。下面是建立Snort-MySQL系统的步骤。关于每个步骤的详细信息将在本章的后面介绍。
  1.编译Snort使之支持MySQL并安装,并测试一些告警以确信Snort工作正常。在第2章已经叙述过,你需要在运行configure脚本的时候加上—with-mysql的命令行参数。
  2.安装MySQL并用mysql客户端来确定数据库可以正常工作。
  3.在MySQL服务器中创建一个数据库,我将这个数据库命名为snort,你也可以叫它其他的名字。本章的后面将对此进行详细讨论。
  4.为数据库创建一个用户及口令,Snort将用这个用户名来记录数据。
  5.用snort分发包的contrib目录下面的脚本来为数据库创建表。。
  6.修改snort.conf,使数据库模块起作用,本章的后面将对此进行讨论。在此你将用到刚刚建立的数据库的名称和用户名及口令。。
  7.重新启动Snort,如果一切正常,Snort将开始向数据库记录数据。
  8.产生一些告警并用mysql客户端程序来确定告警已被纪录。
  本章的剩下部分将解释如何实现这些步骤,下一章将讨论ACID的应用,此时本章你做的事情才能够得到实际的应用价值。

5.1.1 第一步:使Snort支持MySQL的编译方法

  如果你需要使Snort支持MySQL数据库,那么你必须在编译的时候带上—with-mysql的参数。在第二章中,我们已经叙述过如何用configure脚本来做这样的事情。
  典型的configure脚本命令行运行方式如下所示:
  ./configure --prefix=/opt/snort --with-mysql=/usr/lib/mysql
  我建议你在运行configure脚本的时候,同时加入其他组件的支持,如SNMP等,它们也是非常有用的。在编译的时候,MySQL的系统库文件必须在/usr/lib/mysql中存在才能成功。详细信息可以在第二章中查阅。

5.1.2 第二步:安装MySQL

  我建议你用随RedHat或其他Linux发行版附带的软件包来安装MySQL,这是最简单的方式。MySQL同时也有用于Windows平台的。当然,你也可以在http://www.mysql.org 来获得MySQL服务器和客户端的源代码自己编译并安装它,但是我认为你在具有一定的经验的时候采用这种方式。

5.1.3 第三步:在MySQL中建立Snort数据库。

  一旦你完成了编译支持MySQL的Snort,那么下面要做的就是建立一个Snort用来记录数据的数据库了。在开始使用MySQL之前,首先要确定数据库服务器上的MySQL运行正常。你可以用ps –ef | grep mysql来察看,如果列表中有MySQL进程,那么数据库服务器就正在运行。如果你只有一台机器,你可以在安装Snort的机器上运行MySQL服务器。前面也说过,你也可以在别的机器上运行数据库服务器。为了本书叙述的方便,我将所有的部件,包括Snort和MySQL都安装在同一台机器上面。
  你可以在http://www.mysql.ort 上下载MySQL服务器的最新版,或者在RedHat安装盘中取得RPM版的MySQL服务器。对于Windows用户,应当使用安装包。你可以用数据库服务器的root用户来创建snort数据库,并将所需的权限赋予用户rr。
  客户端程序mysql用来连接数据库服务器。Snort数据库的名称可以用任意的名字,访问数据库的用户名也可以自由定义。为本书的叙述方便,我们在此创建一个叫做snort的数据库,和一个名为rr的用户来访问数据库。假定MySQL服务器运行在本地,通常的用来创建数据库并检查其状态的mysql命令运行过程如下所示:

[root@laptop]# mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 40 to server version: 3.23.36
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql> create database snort;
Query OK, 1 row affected (0.00 sec)
mysql> use snort
Database changed
mysql> status
--------------
mysql Ver 11.13 Distrib 3.23.36, for redhat-linux-gnu (i386)
Connection id: 41
Current database: snort
Current user: root@localhost
Current pager: stdout
Using outfile: ''
Server version: 3.23.36
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 hour 56 min 29 sec
Threads: 1 Questions: 107 Slow queries: 0 Opens: 14 Flush
tables: 1 Open tables: 7 Queries per second avg: 0.015
--------------
mysql>

  在这个过程中用到了下面的命令:mysql -h localhost -u root –p用来将mysql客户端连接到本地的数据库服务器上面。其中“-u root”表示用来连接数据库的用户名,“-p”用来在下一行输入用户密码。登录后,你会看到一个欢迎信息,并得到“mysql>”提示符,这样你可以执行其他的数据库操作命令。
  命令create database snort;用来在MySQL服务器中创建一个名为snort的数据库,你也可以用其他你喜欢的名字。
  命令use snort的作用是使用新创建的数据库snort。
  命令status用来显示数据库服务器的当前状态。例子中显示了当前打开的数据库是snort。
  在MySQL命令提示符下,你可以用“exit”命令来结束mysql客户端进程。

5.1.4创建MySQL用户并授予权限和设置口令

  在访问Snort数据库的时候,我们不建议用root用户登录,因此,你要创建一个新的用户,我的新用户名为rr。下面的命令用来创建名为rr的用户,这个命令也用来给用户授予对表和库的访问权限。。
  CREAT,用来创建新的对象。
  INSERT,用来向数据库插入数据。
  DELETE,用来从数据库删除数据。
  UPDATE,用来修改记录。
  SELECT,用来显示并选择记录。
  我们用所创建的用户来访问Snort数据库,当你配置Snort使用其数据库输出模块的时候,在配置文件snort.conf中也将用到这个用户名及其口令。

mysql> grant CREATE,INSERT,DELETE,UPDATE,SELECT on snort.* to
rr@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql>

  对新用户的授权仅限于Snort数据库,创建用户并授权用一条命令完成。新用户需要一个口令,下面的命令为新用户指定口令“rr78x”。

mysql> set password for rr = password('rr78x');
Query OK, 0 rows affected (0.00 sec)
mysql>

  在snort.conf的MySQL输出配置中,将用到数据库的用户名和密码。在snort.conf文件中,以下的字段需要进行设置:
  数据库名称,也就是snort
  数据库用户名,也就是rr
  数据库用户口令,也就是rr78x
  运行数据库服务器的主机,在这里就是安装Snort的同一台机器。如果数据库服务器和Snort安装在同一台机器上,主机名就是“localhost”。

5.1.5第五步:在Snort数据库中创建表

  在创建一个Snort数据库并建立用户后,现在应当在数据库中建立一些表来存储数据。非常幸运,我们可以在contrib目录中找到脚本create_mysql来完成你所需要的所有表。如果你从http://www.snort.org 下载了snort的源代码,并解压它,就可以从中找到contrib目录。
  下面的命令用这个脚本创建snort数据库中的所有表:

[root@laptop]# mysql -h localhost -u rr -p snort < contrib/
create_mysql
Enter password:
[root@laptop]#

  该命令的各个选项的解释如下:
  -h localhost告诉mysql客户端程序数据库服务器与客户端运行在同一台机器上。
  -u rr用来指定登录数据库服务器的用户名
  -p表示你将在下一行输入用户rr的口令
   snort表示将表创建到名为snort的数据库中
  最后一部分<contrib./create_mysql指定一个文件名,mysql客户端将从这个文件中读取命令。
  用下面的命令来察看所创建的表:

[root@laptop]# mysql -h localhost -u rr -p snort
Enter password:
Reading table information for completion of table and column
names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 46 to server version: 3.23.36
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql> show tables;
+------------------+
| Tables_in_snort |
+------------------+
| data |
| detail |
| encoding |
| event |
| icmphdr |
| iphdr |
| opt |
| reference |
| reference_system |
| schema |
| sensor |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
+------------------+
16 rows in set (0.00 sec)
mysql>

  show tables命令用来显示当前打开的数据库中所有的表。上边列举了create_mysql脚本创建的16个表,每个表用来纪录关于Snort活动的不同部分的信息:

  • data表包含触发告警的每个包的载荷
  • detail表包含所记录包的信息的详细程度,这个表在默认情况下只包含两列,第一列为fast,第二列是full,表示不同的记录模式,这在前面已经做过表述。
  • Encoding表显示纪录包的表马形式,默认情况有3种:hex,base64和ASCII。
  • Event表列举了所有的事件,并为这些事件打上时间戳。
  • Icmphdr表中包含了记录到snort数据库中icmp包的头部信息,包括ICMP类型,编码,ID,序列号等等。
  • Iphdr表中包含了被记录的数据包中IP头部的所有字段信息,包括IP源和目的地址,IP头长度,TOS值,TTL值等等。
  • Opt表中包含了一些选项。
  • Reference及reference_system表中包含了关于一些入侵行为的参考网址,你可以从中获得更多的信息。
  • Schema表显示了数据库模型的版本。
  • Sensor表中包含了记录数据库的各个Snort探测器的相关信息。如果仅有一个Snort探测器,这个表就只有一排。如果有多个探测器,则每个探测器占一排。
  • Sig_class包含Snort规则不同级别的信息,例如“attemptedrecon”,“misc-attack”等等。
  • Signature表中包含了关于产生告警的一些特征的信息。
  • Tcphdr表中包含了TCP类型数据包中TCP头部的信息。
  • Udphdr表中包含了UDP类型数据包中UDP头部的信息,包括源和目的端口,长度和校验码。
      如果你想了解每个表的结构,你可以在客户端中显示每个表的各个字段。下面的命令用来显示iphdr表的结构:
    mysql> describe iphdr;
    +----------+----------------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+----------------------+------+-----+---------+-------+
    | sid | int(10) unsigned | | PRI | 0 | |
    | cid | int(10) unsigned | | PRI | 0 | |
    | ip_src | int(10) unsigned | | MUL | 0 | |
    | ip_dst | int(10) unsigned | | MUL | 0 | |
    | ip_ver | tinyint(3) unsigned | YES | | NULL | |
    | ip_hlen | tinyint(3) unsigned | YES | | NULL | |
    | ip_tos | tinyint(3) unsigned | YES | | NULL | |
    | ip_len | smallint(5) unsigned | YES | | NULL | |
    | ip_id | smallint(5) unsigned | YES | | NULL | |
    | ip_flags | tinyint(3) unsigned | YES | | NULL | |
    | ip_off | smallint(5) unsigned | YES | | NULL | |
    | ip_ttl | tinyint(3) unsigned | YES | | NULL | |
    | ip_proto | tinyint(3) unsigned | | | 0 | |
    | ip_csum | smallint(5) unsigned | YES | | NULL | |
    +----------+----------------------+------+-----+---------+-------+
    14 rows in set (0.00 sec)
    mysql>
      如果你想了解关于数据如何存储的详细信息,你可以在http://www.incident.org/snortdb/ 察看数据库的详细结构。

    5.1.5.1 创建附加表

      当你用一些其它的程序与Snort和数据库一同工作,希望将端口号映射到服务名称的时候,你将需要一些附加的映射信息。例如,TCP端口23是用来Telnet的,但是tcphar表中仅仅包含端口号码,并没有详细的描述。如果你想将源和目的端口表示为Telnet而不是数字23这种形式的时候,你需要这些信息。Snort附带了一个附加的脚本,使你能够处理这样的信息。在contrib目录中有一个snortdb-extra.zip的文件,将它解压,你就可以用它来创建附加的表:
    [root@laptop]# mysql -h localhost -u rr –p snort < contrib/
    snortdb-extra
    Enter password:
    [root@laptop]#
      这个命令创建了3个表:protocols,services和flags。这些表中包含了关于不同协议、服务和标志位的详细信息。该脚本同时也为这些表构建数据。在snortdb-extra脚本中有关于这些表的表述。下面是这些表的列表:
    mysql> show tables;
    +------------------+
    | Tables_in_snort |
    +------------------+
    | data |
    | detail |
    | encoding |
    | event |
    | flags |
    | icmphdr |
    | iphdr |
    | opt |
    | protocols |
    | reference |
    | reference_system |
    | schema |
    | sensor |
    | services |
    | sig_class |
    | sig_reference |
    | signature |
    | tcphdr |
    | udphdr |
    +------------------+
    19 rows in set (0.01 sec)
    mysql>
      现在表的数量已经由16个变成了19个,其中service表非常大,包含了65536个TCP和UDP服务的相关条目。这个表一共包括131072列,因此是非常巨大,当你用脚本创建这个表的时候,或许会需要几分钟的时间。

    5.1.5.2 Snort数据库表中一些条目的例子

      为了使你对数据库表中的条目的形式有些概念,现在我们从数据库种选择其中的一些来做例子。
    下面是sig_class表中的一些条目:
    mysql> select * from sig_class;
    +--------------+--------------------------+
    | sig_class_id | sig_class_name |
    +--------------+--------------------------+
    | 9 | attempted-recon |
    | 8 | misc-attack |
    | 7 | bad-unknown |
    | 6 | web-application-activity |
    +--------------+--------------------------+
    4 rows in set (0.00 sec)
    mysql>
    Select命令从数据库中提取数据并在屏幕上显示。
    下面是reference_system表中的一些记录。
    mysql> select * from reference_system;
    +---------------+-----------------+
    | ref_system_id | ref_system_name |
    +---------------+-----------------+
    | 8 | nessus |
    | 7 | cve |
    | 6 | arachnids |
    | 5 | bugtraq |
    +---------------+-----------------+
    4 rows in set (0.02 sec)
    mysql>
    下面是encoding表中的记录。
    mysql> select * from encoding;
    +---------------+---------------+
    | encoding_type | encoding_text |
    +---------------+---------------+
    | 0 | hex |
    | 1 | base64 |
    | 2 | ascii |
    +---------------+---------------+
    3 rows in set (0.00 sec)
    下面的select命令输出了services表中端口号码20-30的所有条目。
    mysql> select * from services where port<30 and port>20;
    +------+----------+---------+-------------------------+
    | port | protocol | name | description |
    +------+----------+---------+-------------------------+
    | 21 | 6 | ftp | File Transfer [Control] |
    | 21 | 17 | ftp | File Transfer [Control] |
    | 22 | 6 | - | Unassigned |
    | 22 | 17 | - | Unassigned |
    | 23 | 6 | telnet | Telnet |
    | 23 | 17 | telnet | Telnet |
    | 24 | 6 | - | Unassigned |
    | 24 | 17 | - | Unassigned |
    | 25 | 6 | smtp | Simple Mail Transfer |
    | 25 | 17 | smtp | Simple Mail Transfer |
    | 26 | 6 | - | Unassigned |
    | 26 | 17 | - | Unassigned |
    | 27 | 6 | nsw-fe | NSW User System FE |
    | 27 | 17 | nsw-fe | NSW User System FE |
    | 28 | 6 | - | Unassigned |
    | 28 | 17 | - | Unassigned |
    | 29 | 6 | msg-icp | MSG ICP |
    | 29 | 17 | msg-icp | MSG ICP |
    +------+----------+---------+-------------------------+
    18 rows in set (1.14 sec)
    mysql>

    5.1.6 修改snort.conf的配置

      在完成对数据库的相关操作后,现在你需要编辑snort.conf文件,在此文件中,下面的几行可以使日志信息记录到MySQL数据库中:
    output database: log, mysql, user=rr password=rr78x dbname=snort host=localhost
      如果用户没有口令,也可以用下面的形式:
      output database: log, mysql, user=rr dbname=snort host=localhost
      如果你的数据库服务器在另外的机器上,就需要在snort.conf中指定服务器的名字或者ip地址,例如:
    output database: log, mysql, user=rr password=rr78x dbname=snort host=192.168.1.23
      数据库服务器运行在IP地址为192.168.1.23的机器上,如果有很多Snort探测器,都把数据记录到这台数据库服务器上,那么每一个探测器的snort.conf都要如此修改。在启动snort前,数据库服务器必须正在运行,否则会导致错误。

    5.1.7启动支持数据库的Snort

      在完成对数据库相关的配置后,启动信息中将会显示你用的是何种数据库:
    [root@laptop]# /opt/snort/bin/snort -c /etc/snort/snort.conf
    Log directory = /var/log/snort
    Initializing Network Interface eth0
    --== Initializing Snort ==--
    Decoding Ethernet on interface eth0
    Initializing Preprocessors!
    Initializing Plug-ins!
    Initializing Output Plugins!
    Parsing Rules file /etc/snort/snort.conf
    +++++++++++++++++++++++++++++++++++++++++++++++++++
    Initializing rule chains...
    No arguments to frag2 directive, setting defaults to:
    Fragment timeout: 60 seconds
    Fragment memory cap: 4194304 bytes
    Stream4 config:
    Stateful inspection: ACTIVE
    Session statistics: INACTIVE
    Session timeout: 30 seconds
    Session memory cap: 8388608 bytes
    State alerts: INACTIVE
    Scan alerts: ACTIVE
    Log Flushed Streams: INACTIVE
    No arguments to stream4_reassemble, setting defaults:
    Reassemble client: ACTIVE
    Reassemble server: INACTIVE
    Reassemble ports: 21 23 25 53 80 143 110 111 513
    Reassembly alerts: ACTIVE
    Reassembly method: FAVOR_OLD
    Back Orifice detection brute force: DISABLED
    Using LOCAL time
    database: compiled support for ( mysql )
    database: configured to use mysql
    database: user = rr
    database: database name = snort
    database: host = localhost
    database: sensor name = 10.100.1.111
    database: sensor id = 1
    database: schema version = 105
    database: using the "log" facility
    886 Snort rules read...
    886 Option Chains linked into 99 Chain Headers
    0 Dynamic rules
    +++++++++++++++++++++++++++++++++++++++++++++++++++
    Rule application order: ->activation->dynamic->alert->pass-
    >log
    --== Initialization Complete ==--
    -*> Snort! <*-
    Version 1.8.6 (Build 105)
    By Martin Roesch (roesch@sourcefire.com, www.snort.org)
    从上面也可以看到很多其他相关信息。

    5.1.8向数据库记录信息

      在正确配置数据库后,现在你需要检验日志和告警信息是被保存在数据库的表中,我们用下面的两个Snort规则来检验:
    alert ip any any -> any any (ipopts: lsrr; msg: "LSRR Options set"; logto: "test";)
    alert icmp any any -> 192.168.1.0/24 any (fragbits: D; msg: "Dont Fragment bit set";)
    我们在window机器上运行下面两个命令来测试这些规则:
    ping -n 1 -f 192.168.1.2
    ping -n 1 -j 192.168.1.2
      第一个命令发送一个设置DF位的ICMP包,因此触发第二条规则,第二个命令发送一个设置LSSR选项的ICMP包,这样将触发第一条规则。这两条命令会导致告警的产生,告警信息被记录到数据库中。你可以在一些表中看到。例如,icmphdr表中会出现告警相关包的头部信息:
    mysql> select * from icmphdr;
    +-----+-----+-----------+-----------+-----------+---------+----------+
    | sid | cid | icmp_type | icmp_code | icmp_csum | icmp_id | icmp_seq |
    +-----+-----+-----------+-----------+-----------+---------+----------+
    | 1 | 1 | 8 | 0 | 18780 | NULL | NULL |
    | 1 | 2 | 0 | 0 | 20828 | NULL | NULL |
    | 1 | 3 | 8 | 0 | 18524 | NULL | NULL |
    +-----+-----+-----------+-----------+-----------+---------+----------+
    3 rows in set (0.00 sec)
    mysql>
      在select命令的输出信息中,我们可以看到ICPM头部的不同字段,包括ICMP类型和代码,signature表中包含了下面的一些信息其他一些选项信息,如下所示:
    mysql> select * from signature;
    +--------+-----------------------+--------------+--------------+---------+------
    ---+
    | sig_id | sig_name | sig_class_id | sig_priority | sig_rev |
    sig_sid |
    +--------+-----------------------+--------------+--------------+---------+------
    ---+
    | 1 | Dont Fragment bit set | 0 | NULL | NULL |
    NULL |
    | 2 | LSRR Options set | 0 | NULL | NULL |
    NULL |
    +--------+-----------------------+--------------+--------------+---------+------
    ---+
    2 rows in set (0.00 sec)
    mysql>
      注意在signature表的sig_name字段中包括的信息与你在前面定义的两个规则中msg部分相同。在下一章中,你将开始使用ACID,届时你会发现你其实不再需要mysql的命令行了。ACID给你提供了一个很好的web界面,你可以管理和察看数据表。

    5.2用Stunnel安全登录远程数据库

      MySQL数据库服务器监听3306端口,如果你的数据库服务器并不和Snort运行在同一台机器上,那么你就要远程登录数据库服务器,从安全的角度出发,你或许希望加密从Snort机器到数据库服务器间的传输信息。Stunnel或称为安全隧道可以为你在两台主机间建立一个安全的通道,它是开发源码的软件包,你可以在http://www.stunnel.org 获得。
      从该网站下载最新版本后,并在Snort机器和数据库服务器上安装并运行,以建立一个通道。在数据库服务器上,你可以运行下面的命令:
      stunnel -P/tmp/ -p stunnel.pem -d 3307 -r localhost:3306
      注意,如果在环境变量中不存在stunnel的路径,那么需要输入命令的全路径。这个命令会将所有进入的3307端口的连接重定向到MySQL服务器所监听的3306端口。
      在Snort机器上,运行下面的命令:
      stunnel -P/tmp/ -c -d 3306 -r SERVER_NAME:3307
      只要将SERVER_NAME替换为数据库服务器的主机名或者IP地址就可以了。这个命令会将发到本地3306端口的请求重定向到远程服务器的3307端口。
      要确定本地的Snort机器并没有运行MySQL服务器,否则3306端口就会被MySQL服务器占用,Stunnel就无法绑定在这个端口了。
      设置完毕后,你应该配置Snort使之认为数据库服务器运行在本地机器上,Stunnel会负责与远程数据库服务器的所有通讯。
      在有很多Snort探测器的时候,这种设置也是非常有用的。

    5.3Snort数据库维护

      你经常需要一些操作来保持数据库的运行效率。表的优化可以有效的加强数据库的运行效率。你可以用optimize命令来对单个表进行优化。下面的命令对表data进行优化。
    mysql> optimize table data;
    +------------+----------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +------------+----------+----------+----------+
    | snort.data | optimize | status | OK |
    +------------+----------+----------+----------+
    1 row in set (58.10 sec)
    mysql>
    你也可以创建叫本来优化所有的表,为此你可以将下面的命令存放在文件optimize.sql中。
    optimize table data;
    optimize table detail;
    optimize table event;
    optimize table icmphdr;
    optimize table iphdr;
    optimize table opt;
    用下面的命令来运行这个脚本:
    mysql -h localhost -u rr -prr78x snort < optimize.sql
    在这个脚本中我并没有用到所有的表的名称。你可以加入你所需要的命令。
    在实际应用中,你应该将这个命令放在cron计划列表中,设定每天运行一次。

    5.3.1数据库存档

      当你的数据库达到一定程度的时候,你就需要对它进行存档。其中一个方法是备份数据库,然后丢弃它并重新创建一个新的数据库。另外一个方法是将现有的数据存放到存档表中然后清理这些表。现在你可以在http://www.dirk.demon.co.uk/utils/ 中找到一些脚本来完成这些工作。这些脚本中附带详细的说明。

    5.3.2极端措施:丢弃数据库

      如果你真的想丢弃当前数据库中的所有数据,并创建一个新的数据库,你可以在mysql客户端中运行下面的命令。
    drop database snort;

此篇文章为转载。

Snort入侵检测