Snort有三种模式
简单介绍一下三种模式:
如果只想将TCP / IP数据包标题打印到屏幕上(即嗅探器模式),
snort -v
snort -vd
snort -vde
or
snort -d -v -e
如果想把数据记录到disk,那需要建一个存放日志的地方,在/etc/snort/
新建一个目录mkdir log
进入数据包日志模式:
为了相对于家庭网络进行日志记录,需要告诉Snort哪个网络是家庭网络(由于主机ping不通虚拟机,搞了老半天也设置不好,于是再装一个虚拟机来玩,正在装Kali…一上午later…晕终于好了,干饭时间到了886)
用Kali去ping了snort主机之后,查看log目录,里面会生成文件,里面记录了相对192.168.1.0的C类网络数据包,目录名称是基于远程主机地址(非192.168.1)生成的(如果两个同时在本地网络上,那目录名是基于两个端口中高的那个生成的):
snort -dev -l ./log -h 192.168.1.0/24
如果使用的是高速网络,或者想将数据包记录为更紧凑的形式以供以后分析,则应考虑以二进制模式记录。 二进制模式以tcpdump
格式将数据包记录到日志目录中的单个二进制文件中;
二进制模式不需要指定输出目录结构,或者其他参数,因为它会自动记录所有数据包,
./snort -l ./log -b
以后可以用任何支持tcpdump二进制格式的嗅探器去读取该日志,snort当然也支持可以在任何模式下赌气二进制日志文件到屏幕上,
./snort -dv -r packet.log
如果只想看ICMP
数据包,也可以指定,
./snort -dvr packet.log icmp
要启用网络入侵检测系统(NIDS)模式,不去记录有线发送的每个数据包,
./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf
其中snort.conf
是snort配置文件的名称。 这会将snort.conf
文件中配置的规则应用于每个数据包,以决定是否应基于文件中的规则类型执行操作。输出目录默认为/var/log/snort
。
如果要长时间使用snort,为了提高速度,最好省略-v -e
./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf
这样就会以最基本的形式去运行了。
有7种警报模式:full, fast, socket, syslog, console, cmg, and none,使用-A + option
就可以使用了:
使用以下命令行登录到默认(解码的ASCII)功能并将警报发送(-s
)到syslog:
./snort -c snort.conf -l ./log -h 192.168.1.0/24 -s
使用以下命令行登录到/var/log/snort
中的默认工具,并将警报发送到快速警报文件:
./snort -c snort.conf -A fast -h 192.168.1.0/24
Snort产生警报的时候大概是这个样子的:
[**] [116:56:1] (snort_decoder): T/TCP Detected [**]
第一个数字是生成器ID,它告诉用户Snort的哪个组件生成了此警报。 有关GID的列表,请阅读Snort源中的etc / generators
。 在这种情况下,我们知道此事件来自Snort的“解码”(116)组件。
第二个数字是Snort ID(有时称为签名ID)。有关预处理器SID的列表,请参见etc/gen-msg.map
。 使用sid选项将基于规则的SID直接写入规则。 在这种情况下,56表示T/TCP事件。
第三个数字是修订ID。 此数字主要在编写签名时使用,因为规则的每个表示形式都应使用rev选项将该数字递增。
使用barnyard2
可以让snort运行更快,还可以加fast
选项,这将以tcpdump格式记录数据包并产生最少的警报。 例如:
./snort -b -A fast -c snort.conf
Snort将其规则应用于数据包的默认方式可能不适用于所有安装。 首先应用Pass规则,然后应用Drop规则,然后应用Alert规则,最后应用Log规则。
以下为更改顺序的操作:
--alert-before-pass
会在pass之前先生成警报--treat-drop-as-alert
把丢弃和拒绝也当做警报记录--process-all-events
处理与数据包关联的每个事件,并根据规则排序采取措施Snort 2.9引入了用于数据包I/O的DAQ(数据采集库)。调用Snort进行pcap回读或内联操作时,可以选择DAQ类型和模式。
”Large Receive Offload” (lro) and ”Generic Receive Offload” (gro)可能会影响snort的功能,建议关掉:
$ ethtool -K eth1 gro off
$ ethtool -K eth1 lro off
$ ethtool -k eth1 #查看开关情况
可以在调用Snort时选择和配置DAQ,在指定的目录中搜索DAQ模块以及每个模块的打印类型,版本和属性:
./snort --daq-list[=<dir>]
./snort --daq-dir=<dir> --daq-list #多个目录的情况
这个是默认的DAQ,没有任何DAQ参数的情况下运行的,上下是等效的:
./snort -i
./snort -r
./snort --daq pcap --daq-mode passive -i
./snort --daq pcap --daq-mode read-file -r
可以使用以下命令指定pcap使用的缓冲区大小:
./snort --daq pcap --daq-var buffer_size=<#bytes>
(注意:pcaq DAQ不计算过滤的数据包)
afpacket函数类似于内存映射的pcap DAQ,但不需要外部库:
./snort --daq afpacket -i
[--daq-var buffer_size_mb=<#MB>]
[--daq-var debug]
如果要以串联模式运行afpacket,则必须将设备设置为一个或多个接口对,其中一对接口中的每个成员都由一个冒号分隔,而每个对之间则由一个双冒号分隔,如下所示:
eth0:eth1
eth0:eth1::eth2:eth3
afpacket DAQ默认分配了128MB数据包内存,你也可以修改:
--daq-var buffer_size_mb=<#MB>
NFQ是处理iptables数据包的新方法和改进的方法:
./snort --daq nfq \
[--daq-var device=] \
[--daq-var proto=] \
[--daq-var queue=] \
[--daq-var queue_len=]
可以在DAQ发行版README中找到有关iptables的说明。
(wuuuuuuu我没有NFQ的DAQ 后续再装吧,先看看)
IPQ是处理iptables数据包的旧方法,它替换了使用此版本构建的2.9之前版本中的内联版本:
./configure --enable-inline / -DGIDS
(这个玩意儿也没有)
IPFW适用于BSD系统,开始命令:
snort --daq ipfw [--daq-var port=]
::= 1..65535; default is 8000
(IPFW只支持ip4的流量)
dump DAQ允许测试2.9 Snort中可用的各种串联模式功能,例如注入和归一化。
snort -i --daq dump
snort -r --daq dump
默认情况下,将创建一个名为inline-out.pcap
的文件,其中包含所有通过snort或由snort生成的数据包。 可以选择指定其他名称:
snort --daq dump --daq-var file=
dump使用pcap daq
进行数据包获取。 因此,它不计算过滤的数据包。
请注意,dump DAQ串联模式不是实际的串联模式。 以其他方式获取pcap DAQ,如下所示:
./snort -r -Q --daq dump --daq-var load-mode=read-file
./snort -i -Q --daq dump --daq-var load-mode=passive
Snort输出的Packet Wire Totals和Action Stats部分包括其他字段: