1.4 网络入侵检测模式

启动NIDS(网络入侵检测模式)后,你不能把所有数据包都记录在单一文件中,而应该运行如下命令:

./snort  -dev  -l   ./log   -h 192.168.1.0/24    -c snort.conf 

这里,snort.conf 是你snort的配置文件。这样会导致所有通过snort的包都会匹配snort.conf中配置的规则,如果命中规则则会执行相应的动作。如果你没有配置任何输出目录,则默认会使用/var/log/snort目录。 请注意,如果Snort作为一个长期运行的IDS服务时,为了提高速度,-v选项应在命令行中去掉,终端是个慢速输入设备,在显示的过程中有可能丢包。 同时对于大多数应用来说,没必要记录所有链路层的数据,因此通常也需要省略掉-e参数。

./snort -d -h 192.168.1.0/24  -l ./log  -c snort.conf

这样会把Snort配置成最基础的NIDS模式,记录触发snort.conf中配置的规则的数据包的基本信息,并以ASCII格式,按目录分层记录下来。

1.4.1 NIDS模式输出选项

Snort的NIDS模式中,可以配置很多输出方式。默认的日志和报警机制是记录解析后的ASCII格式和全报警。在全报警(full alert)机制中,除了打印数据包头外,还会打印出一个报警信息。通过命令行参数,我们可以配置出除这两种之外的很多输出方式。 报警方式稍微有点复杂。通过命令行可以配置7种方式:全报警、快速报警、socket、syslog、终端、cmg和none。其中6中模式通过-A参数来配置,它们是:

选项 描述
-A fast 快速模式,报警信息以一种简单的格式记录,并添加时间戳、报警日志、源目的IP和端口
-A full 完整模式,这是默认的输出方式
-A unsock 通过UNIX域套接字把报警发送给另一个进程
-A none 关闭报警
-A console 把快速模式的信息打到终端
-A cmg 产生cmg格式的报警信息

数据包可以被按照解码后的ASCII格式记录,也可以通过-b选项以二进制方式记录。如果要完全禁止记录数据包,就需要使用-N参数。 想了解通过配置文件设置输出方式,请参考2.6

注:通过命令行输入的参数,会覆盖配置文件中相同参数值,这样就允许通过命令行快速进入调试模式。

要配置syslog模式,可以使用-s选项。默认syslog报警级别是LOG_AUTHPRIV和LOG_ALERT.如果你需要配置其它级别,可以使用snort.conf中输出插件配置选项。具体配置请参考2.6.1 例如,可以通过下列命令来把默认报警信息发给syslog:

./snort  -c snort.conf -l ./log -h 192.168.1.0/24  -s

另外:可以通过以下命令,把fask模式下报警信息写到一个默认目录下:

./snort  -c snort.conf  -A  fask  -h 192.168.1.0/24

1.4.2 看懂标准报警格式

当Snort产生一条报警信息时,它通常是这样的 :

[**] [116:56:1] (snort_decoder): T/TCP Detected [**]

第一个数字(116)表示生产者ID,它用来指示该报警是Snort哪个模块产生的。模块的GID定义在源码目录中doc/generators 中。从这个例子,我们可以看出,这个事件是来自于Snort的decode模块(116)产生的。

第二个数字(56)是SnortID(与签名ID相关)。关于预处理SID列表可以参考etc/gen-msg.map。基于SID的规则会直接将该ID写入sid选项中。在这里,56代表T/TCP 事件。

第三个数字(1)是一个附加码。这个数字主要是用来签名的,通过rev选项设置后,每条规则都要在这个数字上递增。

1.4.3 高性能配置

如果你想让Snort运行的更快一点,(比如在千兆网络环境中),你应该是unified2格式的日志文件和一个日志解析器比如:barnyard2.这样Snornt就可以专心告诉地处理数据包,而一些低速的日志处理工作比如入库就可以交由另外一个进程处理(比如barnyard2)。

如果你想使用一个易于解析的文本文件,而又要求高速的话,就可以使用二进制日志,并配置fask输出模式。 这样的话,数据包将以tcpdump格式记录下来,同时产生很小的报警信息。例如:

./snort -b -A fast  -c snort.conf

1.4.4 设置报警顺序

Snort默认的规则配置顺序可以不能满足所有应用场景:先匹配Pass类规则,然后是Drop类规则,接着是Alter类规则,最后才是Log类规则。

注:有时候一个Pass规则可能导致Alter规则被跳过,在这种情况下你需要调整默认规则匹配顺序,
    先匹配Alert规则,然后再匹配Pass规则。更多详情请参考--alert-before-pass选项

有几个命令行选项可以改变规则匹配顺序。

  • --alert-before-pass 强制alert规则在pass之前生效
  • --treat-drop-as-alert 把drop和reject以及任何和alert相关的规则按alert模式记录。这样运行被动IDS模式使用内部规则。非drop规则不会被加载。
  • --process-all-events 该选项会导致Snort处理所有数据包匹配的规则事件,否则,Snort只处理第一个触发的规则事件。
注:Pass类的规则比较特殊,当配置--process-all-events选项后,触发pass类事件后,就会终止规则匹配