标题：Snort
简介
Snort有三种工作模式：嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。数据包记录器模式把数据包记录到硬盘上。网路入侵检测模式是最复杂的，而且是可配置的。我们可以让snort分析网络数据流以匹配用户定义的一些规则，并根据检测结果采取一定的动作。
相关条目
Snort最重要的用途还是作为网络入侵检测系统(NIDS)。 
使用简介 
Snort并非复杂难以操作的软体。 Snort可以三个模式进行运作： 
侦测模式（Sniffer Mode）：此模式下，Snort将在现有的网域内撷取封包，并显示在荧幕上。 
封包纪录模式（packet logger mode）：此模式下，Snort将已撷取的封包存入储存媒体中（如硬碟）。
上线模式（inline mode）：此模式下，Snort可对撷取到的封包做分析的动作，并根据一定的规则来判断是否有网路攻击行为的出现。 
基本指令：侦测模式 
若你想要在萤幕上显示网路封包的标头档（header）内容，请使用 
./snort -v 
如果想要在萤幕上显示正在传输的封包标头档内容，请使用 
./snort -vd 
如果除了以上显示的内容之外，欲另外显示数据链路层（Data link layer）的资料的话，请使用 
./snort -vde
基本指令 封包记录模式
在记录封包之前，您必须先指定一个目录来储存该资料。举例而言，若您在您目前的目录下建立了一个名为log的目录，欲存纪录资料于该目录下的话，请使用
./snort -dev -l ./log 
若想要以二进位码（binary code）的方式来储存封包资料的话，请使用
./snort -l ./log -b 
若欲读取某已储存的封包记录档案（假设其档名为packet.log），请使用
./snort -dvr packet.log 
若欲读取该档案中特定网路协定的资讯（假设是tcp协定），请使用
./snort -dvr packet.log tcp
基本指令 入侵侦测模式
若欲使用入侵侦测模式，请使用
./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf 
其中snort.conf是封包的签章档案
若不需要得知资料连结层的资讯，请使用
./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf 
以下是Snort在入侵侦测模式的指令选项： 
-A fast快速警告模式
-A full完整警告模式（预设） 
-A unsock将警告讯息送至UNIX的socket上，供其他装置检视
-A none关闭警告功能
-A console将警告讯息送至终端机（Console）
线上模式 
封包的抓取不透过libcap，而是透过防火墙，并可告知防火墙是否让此封包通过。启用线上模式使用./snort -Qd -h 192.168.0.0/16 -l ./log -c snort.conf 
防火墙的设定 
* Linux 
o iptables -t nat -A PREROUTING -j QUEUE 
编辑Snort侦测规则 
以下是一种编辑侦测规则（Snort rule）的例子： 
alert tcp any any ->192.168.1.0/24 111 
依次分为以下几个部份： 
标头 
标头的部份指的是此规则欲执行的动作。以上的例子为"alert"，即警示。完整的标头选项列表如下： 
alert产生警示 
log纪录该封包 
pass忽略该封包 
activate产生警示，并开启另一个动态规则 
dynamic被activate指令触发后所执行的规则 
drop让iptable丢弃该类型封包并记录下来 
reject让iptable丢弃该类型封包，并送出TCP重新启动（TCP Reset）的封包 
sdrop让iptable丢弃该类型封包，但不记录
通讯协定 
通讯协定指出执行该规则的协定为何。上述的例子是tcp协定。 
目前snort支援四种通讯协定： 
tcp, udp, icmp, ip 
并计划在未来支援以下的协定： 
ARP, IGRP, GRE, OSPF, RIP, IPX等等 
进阶规则编辑 
Includes: include允许指令的规则档包含其他的规则档。 
include: 
请注意，在该行结尾处没有分号。被包含的规则档会把任何预设的变数值替换为其本身的变数。 
Variables : 
在Snort中定义的变数。 
var: 
例子： var NET 192.168.1.0/24 alert tcp any any -> $NET any (flags: S; msg: "FIN packet";) 
变数名称可以用多种方法修改。可以在"$"符号之后定义变数。 "?"和"-"可用于变数修改符号。 $var -定义变数。 $(var) -用变数"var"的值替换。 $(var:-default) -用变数"var"的值替换。若"var"没有定义，则使用"default"替换。 $(var:?messageXXX) -用变数"var"的值替换，或列印出错误讯息"messageXXX"。例子： var NET $(NET:-192.168.1.0/24) log tcp any any -> $(NET:?NET is undefined!) 23 
Config 
Snort的很多配置和命令行选项都可以在配置档中设置。 
config [: ]
主要指令
order改变规则顺序( snort -o ) 
alertfile建立警告输出档，例如：config alertfile: alertlog 
classification将规则分类。 
decode_arp开启arp解码功能。 （snort -a） 
dump_chars_only开启字元撷取功能。 （snort -C） 
dump_payload撷取应用层资料。 (snort -d) 
decode_data_link解码资料连结层的标头档。 (snort -e) 
bpf_file指定BPF筛检程式（snort -F）。例如：config bpf_file: filename.bpf 
set_gid改变GID (snort -g)。例如：config set_gid: snort_group 
daemon以背景方式执行。 (snort -D) 
reference_net设置该区域的网路。 (snort -h)。例如：config reference_net:192.168.1.0/24 
interface设置网路介面（snort –i）。例如：config interface: xl0 
alert_with_interface_name警示时附加上介面资讯。 (snort -I) 
logdir设置记录目录(snort -l)。例如：config logdir: /var/log/snort 
umask设置snort输出档的权限。 (snort -m). Example: config umask: 022 
pkt_count处理n个封包后，退出。 (snort -n). Example: config pkt_count: 13 
nolog关闭记录功能（警示仍然运作）。 (snort -N) 
quiet安静模式，不显示状态报告。 (snort -q) 
checksum_mode计算checksum的协定类型。类型值：none, noip, notcp, noicmp, noudp, all 
utc在时间纪录上，用UTC时间代替本地时间。 (snort -U) 
verbose将详细记录资讯列印到标准输出。 (snort -v) 
dump_payload_verbose撷取资料连结层的封包( snort -X ) 
show_year在时间纪录上显示年份。 (snort -y) 
stateful为stream4设置保证模式。 
min_ttl设置一个snort内部的ttl值以忽略所有的流量。 
disable_decode_alerts关闭解码时发出的警示。 
disable_tcpopt_experimental_alerts关闭tcp实验选项所发出的警示。 
disable_tcpopt_obsolete_alerts关闭tcp过时选项所发出的警示。 
disable_tcpopt_ttcp_alerts关闭ttcp选项所发出的警示。 
disable_tcpopt_alerts关闭选项长度确认警示。 
disable_ipopt_alerts关闭IP选项长度确认警示。 
detection配置侦测引擎。 （例如：search-method lowmem） 
reference帮Snort加入一个新的参考系统。