[转载]HOW TO USE SNORT
信息来源:水木清华BBS站作者:不详
Snort并不难用,但是它有许多命令行选项要对付,而且哪些选项应该配合使用并不明显
,本文目标是让新手容易使用snort。
首先,让我们从基础开始。如果你只是想把包的头打印到屏幕上,就输入:
./snort -v
这个命令将运行snort 并且把ip和tcp/udp/icmp头显示在屏幕上,其他都不干。如果你想
看解码后的应用层,输入:
./snort -vd
这个命令告诉snort显示包的头部和数据。如果你想显示更详细些,显示以太网帧头部,
输入:
./snort -vde
(废话一句,这些开关可以分开,也可以任意组合,最后一个命令也可以输入如下:
./snort -d -v -e
一样!!)
Ok,所有这些命令都很酷,但是他们实际上不在磁盘上记录任何包,为了记录,你需要指
定一个日志目录:
./snort -dev -l ./log
当然,这假设你在当前目录下有一个名为"log"的目录
如果你只指定"-l"开关,你会注意到snort有时会记录远端计算机的的包,有时则记录本
地主机的包。为了记录本地主机,你需要告诉snort哪个网络是本地网络(home network
):
./snort -dev -l ./log -h 192.168.1.0/24
这个规则告诉snort你希望把以太帧头和应用层数据记录到目录./log中,并且你希望记录
的包是192.168.1.0的
c类网络上的。所有的进入此网络的包都被记录在log目录的子目录下,这些子目录的名字
基于远端主机(非192.168.1)的地址。注意如果两个主机都在本地网络上,那么子目录
的名字基于两个端口号的大者,如果一样大,就取源地址。
如果你想使用一个规则文件(这样就不会把所有的包都记录下来了),输入:
./snort -dev -l ./log -h 192.168.1.0/24 -c snort-lib
其中snort-lib是你的规则文件的名字。该文件中的规则集将被使用来决定每个包是否被
记录。
要注意的是:如果snort要 作为一个ids长期运行,命令中的-v开关要去掉,因为打印到
屏幕会降低速度,在显示到屏幕上时可能会丢包。
对于大多数应用,也不必要记录以太帧头部,所以一般使用snort的开关如下:
./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib
如果你想处理tcpdump(或者shadow ids)产生的文件,除了正常的选项外,再加上"-r"
开关。这个开关告诉snort从指定的文件读取包,而不是从网络上取包。这样就可以利用
snort的规则检查tcpdump(或者shadow ids)产生的文件的内容。例如:
./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib -r tcpdump_file
有人不喜欢snort施加规则的默认顺序,其默认顺序是:首先应用alert规则,然后是pass
最后是log规则。这个顺序有些违反人的直觉,但能够避免一些错误:例如你写了100条
alert规则,然后不小心用一条pass规则把它们都废球掉了,多亏啊。对于自信的人,用
-o开关改变默认的规则使
用顺序,首先是pass,然后是alert,最后是log。如下:
./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib -o
最后(到目前为止),如果你想把alert消息传送到syslog中,你可以使用-s开关,如下
:
./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib -s
这样,当警告产生时,它们将出现在syslog中,而不是alert文件中。
好了,就这些了,如果你有进一步的问题关于snort,就发信给[email]roesch@clark.net[/email]
作者:Marty Roesch 6/21/99
译者:chenyongzhi 2000/8/30
UPDATE 9/17/99
性能配置!!如果你希望snort跑的快一些(跟的上100M的网络),使用-b和-A或者-s(
syslog)选项。这样将按照tcpdump的格式记录日志,并产生最少的警告。例如:
./snort -b -A fast -c snort-lib
这样,snort能够记录一个100 Mbps的LAN在饱和速度(大约80mbps)下多个同时的探测和
攻击事件。这时日志被按照二进制格式记录在tcpduam格式的snort日志文件中。要读这个
文件,用-r开关:
./snort -d -c snort-lib -l ./log -h 192.168.1.0/24 -r snort.log
这样,所有的数据都会存在日志目录中,就象正常的解码后的格式一样
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.88.186]
发件人: [email]Sinob.bbs@smth.org[/email]
发送时间: 2000年9月8日星期五 8:52
收件人: [email]microbin@263.net[/email]
主题: Snort规则的编写!(转寄)
发信人: xuzq (奔腾), 信区: Security
标 题: Snort规则的编写!
发信站: BBS 水木清华站 (Thu Sep 7 15:47:42 2000)
怎样写snort规则(1.6版)
Martin Roesch
翻译: cyz([email]cyz@chinasafer.com[/email])
xuzq([email]xuzq@chinasafer.com[/email])
目录
基础
规则头
规则动作
协议
ip地址
端口号
方向操作符
规则选项
msg
logto
ttl
id
dsize
content
offset
depth
nocase
flags
seq
ack
itype
icode
session
icmp_id
icmp_seq
ipoption
rpc
resp
预处理器preprocessors
最小分片(minfrag)
http解码
端口扫描
忽略的端口扫描主机
输出模块
报警syslog
记录到tcpdump格式
记录到postgres
高级规则概念
包含includes
变量variables
建立好的规则
内容(content)规则是大小写敏感的
加速含有content选项的规则
基础
snrot使用一种简单的,轻量级的规则描述语言,踏灵活而强大。在开发snort规则时要记
住几个简单的原则。
第一, snort规则必须写在一个单行上,snort的规则分析器不会处理多行上的规则。
Snort规则被分成两个逻辑部分:规则头和规则选项。规则头包含规则的动作,协议,源
和目标ip地址与网络掩码,以及源和目标端口信息;规则选项部分包含报警消息内容和要
检查的包的具体部分。
下面是一个规则范例:
alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg:
"mountd access";)
图1-简单的snort规则
第一个括号前的部分是规则头(rule header),包含的括号内的部分是规则选项(rule
options)。规则选项部分中冒号前的单词称为选项关键字(option
keywords)。注意,不是所有规则都必须包含规则选项部分,选项部分只是为了使对要收
集或报警,或丢弃的包的定义更加严格。组成一个规则的所有元素对于指定的要采取的行
动都必须是真的。当多个元素放在一起时,可以认为它们组成了一个逻辑与(AND)语句
。同时,snort规则库文
件中的不同规则可以认为组成了一个大的逻辑或(OR)语句。我们先讨论规则头部分。
规则头
规则动作:
规则的头包含了定义一个包的who,where和what信息,以及当满足规则定义的所有属性的
包出现时要采取的行动。规则的第一项是"规则动作"(rule action),"规则动作"告诉
snort在发现满足规则标准的包时要干什么。在snort中有三种动作:alert,log和pass。
l Alert-使用选择的报警方法生成一个警报,然后记录(log)这个包
l Log-记录这个包
l Pass-丢弃(忽略)这个包
协议
规则的下一部分是协议。Snort当前分析可疑包的ip协议有三种:tcp ,udp和icmp。将来
可能会更多,例如arp,igrp,gre,ospf,rip,ipx等。
Ip地址
规则头的下一个部分处理一个给定规则的ip地址和端口号信息。关键字"any"可以被用来
定义任何地址。Snort没有提供根据ip地址查询域名的机制。地址就是由直接的数字型ip
地址和一个cidr块组成的。Cidr块指示作用在规则地址和需要检查的进入的任何包的网络
掩码。/24表示c类网络,
/16表示b类网络,/32表示一个特定的机器的地址。例如,192.168.1.0/24代表从
192.168.1.1到192.168.1.255的地址快。在这个地址范围的任何地址都匹配使用这个
192.168.1.0/24标志的规则。这种记法给我们提供了一个很好的方法来表示一个很大的地
址空间。
在图1中,源ip地址被设置为任何连接的计算机,而目标地址被设置为192.168.1.0上的c
类网络。
有一个操作符可以应用在ip地址上,它是否定运算符(negation operator)。这个操作
符告诉snort匹配除了列出的ip地址以外的所有ip地址。否定操作符用"!"表示。例如,
使用否定操作符对图1中例子做一个简单修改,使它对任何来自本地网络以外的流都进行
报警,如图2:
alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86
a5|"; msg: "external mountd access";)
图2-ip地址否定操作符范例
这个规则的ip地址代表"任何源ip地址不是来自内部网络而目标地址是内部网络的tcp包"
端口号
端口号可以用数中方法表示,包括"any"端口,静态端口定义,范围,以及通过否定操作
符。"any"端口是一个通配符,表示任何端口。静态端口定义表示一个单个端口号,例如
111表示portmapper,12表示telnet,80表示http等等。端口范围用范围操作符":"表示
。范围操作符可以有数中
使用方法,例如图3:
log udp any any -> 192.168.1.0/24 1:1024
记录来自任何端口的,目标端口范围在1到1024的udp流
log tcp any any -> 192.168.1.0/24 :6000
记录来自任何端口,目标端口小于等于6000的tcp流
log tcp any :1024 -> 192.168.1.0/24 500:
记录来自任何小于等于1024的特权端口,目标端口大于等于500的tcp流
图3-端口范围范例
端口否定操作符用"!"表示。它可以用于任何规则类型(除了any,这表示没有,呵呵)
。例如,由于某个古怪的原因你需要记录除x windows端口以外的所有一切,你可以使用
类似图4的规则:
log tcp any any -> 192.168.1.0/24 !6000:6010
图4-端口否定操作符范例
方向操作符
方向操作符"->"表示规则所施加的流的方向。方向操作符左边的ip地址和端口号被认为是
流来自的源主机,方向操作符右边的ip地址和端口信息是目标主机,还有一个双向操作符
"<>"。它告诉snort把地址/端口号对既作为源,又作为目标来考虑。这对于记录/分析双
向对话很方便,例如tel
net或者pop3会话。用来记录一个telnet会话的两侧的流的范例见图5:
log !192.168.1.0/24 any <> 192.168.1.0/24 23
图5-使用双向操作符的snort规则
规则选项
规则选项组成了snort入侵检测引擎的核心,既易用又强大还灵活。所有的snort规则选项
用分号";"隔开。规则选项关键字和它们的参数用冒号":"分开。按照这种写法,snort
中有15个规则选项关键字。
l msg - 在报警和包日志中打印一个消息
l logto - 把包记录到用户指定的文件中而不是记录到标准输出
l ttl - 检查ip头的ttl的值
l id - 检查ip头的分片id值
l dsize - 检查包的净荷尺寸的值
l content - 在包的净荷中搜索指定的样式
l offset - content选项的修饰符,设定开始搜索的位置
l depth - content选项的修饰符,设定搜索的最大深度
l nocase - 指定对content字符串大小写不敏感
l flags -检查tcp flags的值
l seq - 检查tcp顺序号的值
l ack - 检查tcp应答(acknowledgement)的值
l itype - 检查icmp type的值
l icode - 检查icmp code的值
l session - 记录指定会话的应用层信息的内容
l icmp_id - 检查ICMP ECHO ID的值
l icmp_seq - 检查ICMP ECHO 顺序号的值
l ipoption - 监视IP option的特定代码
l rpc - 监视特定应用/进程调用的RPC服务
l resp - 主动反应(切断连接等)
msg
msg规则选项告诉记录和报警引擎记录或报警一个包的内容的同时打印的消息。它是一个
简单的文本字符串,转义符是"\"。
格式:
msg: "";
logto
logto选项告诉snort把触发该规则的所有的包记录到一个指定的输出日志文件中。这在把
来自诸如nmap活动,http cgi扫描等等的数据组合到一起时很方便。需要指出的是当
snort工作在二进制记录模式下时这个选项不起作用。
格式:
logto: "";
ttl
这个规则选项用于指定一个要检查的存活期的值。只有确切地匹配时它所进行的检查才成
功。这个选项关键字用于检测traceroute。
格式:
ttl: "";
id
这个选项关键字用于检测ip头的分片id的值。有些黑客工具(以及别的程序)为了各种目
的设置这个域的值,例如一些黑客常使用31337。用一个简单的规则检查这个值就可以对
付他们。
格式:
id: "";
id
dsize选项用于检查包的净荷的大小。它可以设置成任意值,可以使用大于/小于符号来指
定范围。例如,如果你知道某个特定的服务有一个特定大小的缓冲区,你可以设定这个选
项来监视缓冲区溢出的企图。它在检查缓冲区溢出时比检查净荷内容的方法要快得多。
格式:
dsize: [>|<] ;
说明:><号是可选的。
content
content关键字是snort中比较重要的一个。它允许用户设置规则在包的净荷中搜索指定的
内容并根据数据触发响应。当进行content选项模式匹配时,Boyer-Moore模式匹配函数被
调用,并且对包的内容进行检查(很花费计算能力)。如果包的净荷中包含的数据确切地
匹配了参数的数据,这
个检查成功,该规则选项检查的其他部分被执行。注意这个检查是大小写敏感的。
Content关键字的选项数据比较复杂;它可以包含混合的文本和二进制数据。二进制数据
一般包含在管道符号中("|"),表示为字节码(bytecode)。字节码把二进制数据表示
为16进制数字,是描述复杂二进制数据的好方法。图7包含了一个混合数据的snort规则范
例。
alert tcp any any -> 192.168.1.0/24 143 (content: "|90C8 C0FF FFFF|/bin/sh";
msg: "IMAP buffer overflow!";)
图7-content规则选项中的混合二进制字节码和文本
格式:
content: "";
offset
offset规则选项被用作使用content规则选项关键字的规则的修饰符。这个关键字修饰符
指定模式匹配函数从包净荷开始处开始搜索的偏移量。它对于cgi扫描检测规则很有用,
cgi扫描的内容搜索字符串不会在净荷的前4个字节中出现。小心不要把这个偏移量设置的
太严格了,会有可能漏掉
攻击!这个规则选项关键字必须和content规则选项一切使用。
格式:
offset:;
depth
depth也是一个content规则选项修饰符。它设置了内容模式匹配函数从他搜索的区域的其
始位置搜索的最大深度。它对于限制模式匹配函数超出搜索区域指定范围而造成无效搜索
很有用。(也就是说,如果你在一个web包中搜索"cgi-bin/phf",你可能不需要浪费时间
搜索超过净荷的头20个
字节)组合content,offset,和depth的搜索规则的范例参看图8。
格式:
depth: ;
alert tcp any any -> 192.168.1.0/24 80 (content: "cgi-bin/phf"; offset: 3;
depth: 22; msg: "CGI-PHF access";)
图8-组合content,offset和depth的规则
nocase
nocase选项用于取消content规则中的大小写敏感性。它在规则中指定后,任何与包净荷
进行比较的ascii字符都被即作为大写又作为小写对待。
格式:
nocase;
alert tcp any any -> 192.168.1.0/24 21 (content: "USER root"; nocase; msg:
"FTP root user access attempt";)
图9-带有nocase修饰符的content规则
flags
这个规则检查tcp标志。在snort中有8个标志变量:
l F - FIN (LSB in TCP Flags byte)
l S - SYN
l R - RST
l P - PSH
l A - ACK
l U - URG
l 2 - Reserved bit 2
l 1 - Reserved bit 1 (MSB in TCP Flags byte)
保留位可以用于检测不正常的行为,例如ip栈探测或者其他可疑活动。对于这个检查所有
指定的flags都被处理,这个规则要成功,它们必须都是up的。例如,图10显示了一个
syn-fin扫描检测规则。
格式:
flags: ;
alert any any -> 192.168.1.0/24 any (flags: SF; msg: "Possible SYN FIN scan";)
图10-tcp flags指定范例
flags
这个规则选项引用tcp顺序号(sequence number)。基本上,它探测一个包是否有一个静
态的顺序号集,因此很少用。它是为了完整性而包含进来的。
格式:
seq: ;
ack
ack规则选项关键字引用tcp头的确认(acknowledge)部分。这个规则的一个实用的目的
是:检查nmap tcp ping,nmap tcp ping把这个域设置为0,然后发送一个tcp ack flag
置位的包来确定一个网络主机是否活着。这个规则探测到这种活动,如图11:
格式:
ack: ;
alert any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg: "NMAP TCP ping";)
图11-tcp ack域的用法
Itype
这条规则测试ICMP的type字段的值。它被设置为使用这个字段的数字值。要得到所有可能
取值的列表,可以参见Snort包中自带的decode.h文件,任何ICMP的参考资料中也可以得
到。应该注意的是,type字段的取值可以超过正常范围,这样可以检查用于拒绝服务或
flooding攻击的非法type
值的ICMP包。
格式:
itype: ;
Icode
Icode规则选项关键字和itype规则非常接近,在这里指定一个数值,Snort会探测使用该
值作为code值的ICMP包。超出正常范围的数值可用于探测可疑的流量。
格式:
icode: ;
Session
Session关键字是1.3.1.1版本之后新引入的,用于从TCP会话中抽取用户数据。要检查用
户在telnet,rlogin,ftp或web
sessions中的用户输入,这个规则选项特别有用。Session规则选项有两个可用的关键字
作为参数:printable或all。Printable关键字仅仅打印用户可以理解或者可以键入的数
据。All关键字使用16进制值来表示不可打印的字符。该功能会显著地降低Snort的性能,
所以不能用于重载环境。
它适合于对二进制(tcpdump格式)log文件进行后处理。参见图12,是记录telnet会话的
一个好例子。
格式:
session: [printable|all];
log tcp any any <> 192.168.1.0/24 23 (session: printable;)
图12 - 记录可打印的Telnet会话数据。
Icmp_id
Icmp_id选项检查ICMP ECHO数据包中ICMP ID数值是否是指定值。许多秘密通道(covert
channel)程序使用静态ICMP字段通讯,所以该选项在检查这种流量时非常有用。这个特
别的插件用于增强由Max Vision编写的stacheldraht探测规则,但是在探测一些潜在攻击
时确实有效。
格式:
icmp_id: ;
Icmp_seq
Icmp_seq选项检查ICMP ECHO数据包中ICMP sequence字段数值是否是指定值。许多秘密通
道(covert channel)程序使用静态ICMP字段通讯,所以该选项在检查这种流量时非常有
用。这个特别的插件用于增强由Max
Vision编写的stacheldraht探测规则,但是在探测一些潜在攻击时确实有效。(我知道该
字段的信息和icmp_id的描述几乎完全相同,实际上它们就是同样的东西!)
格式:
icmp_seq: ;
Ipoption
如果数据包中使用了IP选项,Ipoption选项会查找使用中的某个特别IP选项,比如源路由
。这个选项的合法参数如下:
rr - Record route(记录路由)
eol - End of list (列表结尾)
nop - No op (无所作为)
ts - Time Stamp (时间戳)
sec - IP security option (IP安全选项)
lsrr - Loose source routing (松散源路由)
ssrr - Strict source routing (严格源路由)
satid - Stream identifier (流标示符)
松散和严格源路由是IP选项中最经常被检查的内容,但是它们并没有被用在任何广泛使用
的Internet应用中。每一个特定的规则只能用这个选项一次。
格式:
ipoption: ;
Rpc
这个选项查看RPC请求,并自动将应用(Application),过程(procedure)和程序版本
(program version)译码,如果所有三个值都匹配的话,该规则就显示成功。这个选项
的格式为"应用,过程,版本"。在过程和版本域中可以使用通配符"*"。
格式:
icmp_seq: ;
alert tcp any any -> 192.168.1.0/24 111 (rpc: 100000,*,3; msg:"RPC getport
(TCP)";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100000,*,3; msg:"RPC getport
(UDP)";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100083,*,*; msg:"RPC ttdb";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100232,10,*; msg:"RPC sadmin";)
图13 -多种RPC调用告警
Resp
Resp关键字可以对匹配一条Snort规则的流量进行灵活的反应(flexible reponse
-FlexResp)。FlexResp代码允许Snort主动地关闭恶意的连接。该模块合法的参数如下:
rst_snd - 向发送方发送TCP-RST数据包
rst_rcv - 向接受方发送TCP-RST数据包
rst_all - 向收发双方发送TCP_RST数据包
icmp_net - 向发送方发送ICMP_NET_UNREACH
icmp_host - 向发送方发送ICMP_HOST_UNREACH
icmp_port - 向发送方发送ICMP_PORT_UNREACH
icmp_all - 向发送方发送上述所有的ICMP数据包
在向目标主机发送多种会应数据包时,这些选项组合使用。多个参数之间使用逗号分隔。
格式:
resp: ;
alert tcp any any -> 192.168.1.0/24 1524 (flags: S; resp: rst_all; msg: "Root
shell backdoor attempt";)
alert udp any any -> 192.168.1.0/24 31 (resp: icmp_port,icmp_host; msg:
"Hacker's Paradise access attempt";)
图14 - FlexResp使用示例
预处理程序
预处理程序概述
预处理程序从Snort版本1.5开始引入,使得Snort的功能可以很容易地扩展,用户和程序
员能够将模块化的插件方便地融入Snort之中。预处理程序代码在探测引擎被调用之前运
行,但在数据包译码之后。通过这个机制,数据包可以通过额外的方法被修改或分析。
使用preprocessor关键字加载和配置预处理程序。在Snort规则文件中的preprocessor指
令格式如下:
preprocessor :
preprocessor minfrag: 128
图15 - preprocessor指令格式示例
可用的预处理程序模块
Minfrag
Minfrag预处理程序检查给定尺寸限制的分片数据包。数据包被分片通常是由源和目的主
机之间的路由器引起的。一般说来,商业网络设备不会产生小于512字节的分片包。所以
我们可以利用这个事实,来监控含有小分片的流量,这些分片通常是由某人为了隐藏在分
片之中的信息而产生的。
格式:
minfrag:
HTTP Decode
HTTP Decode用于处理HTTP URI字符串,将串中的数据转化为可读的ASCII字串。可以击败
隐蔽(evasive?)的Web
URL扫描器和敌对的入侵者,如果不对HTTP流量内容进行可以行为分析,这些攻击手段可
能漏网而不会被检测出来。该预处理程序模块使用HTTP端口号(通常是80和8080)作为其
参数。
格式:
http_decode:
preprocessor http_decode: 80 8080
图16 - HTTP Decode指令格式示例
Portscan Detector
Snort Portscan预处理程序由Patrick Mullen开发,更多的信息在他的主页上可以找到(
[url]http://spyjurenet.com/linuxrc.org/projects/snort/[/url])。
Snort Portscan预处理程序的用处:
向标准记录设备中记录从一个源IP地址来的端口扫描的开始和结束。
如果指定了一个记录文件,在记录扫描类型的同时也记录目的IP地址和端口。
端口扫描定义为在时间T(秒)之内向超过P个端口进行TCP连接尝试,或者在时间T(秒)
之内向超过P个端口发送UDP数据包。端口扫描可以是对任一IP地址的多个端口,也可以是
对多个IP地址的同一端口进行。现在这个版本可以处理一对一和一对多方式的端口扫描,
下一个完全版本将可以
处理分布式的端口扫描(多对一或多对多)。端口扫描也包括单一的秘密扫描(stealth
scan)数据包,比如NULL,FIN,SYNFIN,XMAS等。如果包括秘密扫描的话,端口扫描模
块会对每一个扫描数据包告警。为避免这种情况,可以在Snort标准发行版中的scan-lib
文件里把有关秘密扫描数据包的小节注释掉,这样对每次扫描就只记录一次。如果使用外
部记录特性,可以在记录
文件中看到(端口扫描的?)技术和类型。
该模块的参数如下:
network to monitor - 监视端口扫描的目标网络以network/CIDR表示
number of ports - 在探测期间访问的端口数目
detection period - 以秒计数的端口访问时间限制
logdir/filename - 告警信息存放的目录/文件名,告警也可以写入标准的告警文件中。
格式:
portscan:
preprocessor portscan: 192.168.1.0/24 5 7 /var/log/portscan.log
图17 - 端口扫描模块的配置示例
Portscan Ignorehosts
由Patrick Mullen编写的另一个模块修改了端口扫描探测的系统操作。如果用户的服务器
(比如NTP,NFS和DNS服务器)会妨碍端口扫描的探测,可以通知portscan模块忽略源自
这些主机的TCP SYN和UDP端口扫描。该模块的参数为IPs/CIDR的列表。
格式:
portscan-ignorehosts:
preprocessor portscan-ignorehosts: 192.168.1.5/32 192.168.3.0/24
图18 - Portscan Ignorehosts 模块配置示例
输出模块
输出模块概述
输出模块是版本1.6的新特性。这个模块使得Snort在向用户提供格式化输出时更加灵活。
输出模块在Snort的告警和记录子系统被调用时运行,在预处理程序和探测引擎之后。规
则文件中指令的格式非常类似于预处理程序。
注意:如果在运行时指定了命令行的输出开关,在Snort规则文件中指定的输出模块会被
替代。例如,如果在规则文件中指定了alert_syslog模块,但在命令行中使用了"-A
fast"选项,则alert_syslog模块会被禁用而使用命令行开关。
在规则文件中通过指定output关键字,使得在运行时加载输出模块。
格式:
output :
output alert_syslog: LOG_AUTH LOG_ALERT
图19 - 输出模块配置示例
可用的输出模块:
Alert_syslog
该模块向syslog设备发送告警(很像命令行中的-s开关)。该模块也允许用户指定记录设
备,优先于Snort规则文件中的设定,从而在记录告警方面给用户更大的灵活性。
可用关键字:
选项(Options)
LOG_CONS
LOG_NDELAY
LOG_PERROR
LOG_PID
设备(Facilities)
LOG_AUTH
LOG_AUTHPRIV
LOG_DAEMON
LOG_LOCAL0
LOG_LOCAL1
LOG_LOCAL2d
LOG_LOCAL3
LOG_LOCAL5
LOG_LOCAL6
LOG_LOCAL7
LOG_USER
优先级(Priorities)
LOG_EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
格式:
alert_syslog:
Log_tcpdump
log_tcpdump模块将数据包记录到tcpdump格式的文件中。这便于使用已有的多种检查
tcpdump格式文件的工具,来对收集到的流量数据进行后处理工作。该模块只接受一个参
数,即输出文件名
格式:
log_tcpdump:
output log_tcpdump: snort.log
图20 - Tcpdump输出模块的配置示例
Log_postgresql
该模块由Jed Pickel提供将Snort数据记录到Postgres SQL数据库中。更多的有关安装和
配置该模块的信息可以在Incident.org ([url]http://www.incident.org/snortdb[/url])找到。这
个插件的参数是数据库名称和一个参数列表。参数由格式parameter = argument来指定。
可用参数如下:
host - 连接主机。如果指定了一个非零字串,就使用TCP/IP通讯。如果不指定主机名,
libpq会使用Unix domain socket连接。
port - 连接服务器主机的端口号,或者是Unix-domain连接的socket文件名扩展。
dbname - 数据库名。
user - 身份认证用的用户名。
password - 如果对端要求口令认证,就使用这个口令。
options - 向对端发送trace/debug选项。
tty -- file or tty 从对端发来的可选调试输出。
格式:
log_postgresql: ,
规则高级概念:
Includes
这是Snort版本1.3.1.2之后加入的新规则,提供了文件剖析功能,由Christian Lademann
开发,包含两个新的文件规则关键字。第一个关键字是include,允许由命令行指定的规
则文件包含其他的规则文件。
格式:
include:
注意在该行结尾处没有分号。被包含的文件会把任何预先定义的变量值替换为自己的变量
引用。参见变量(Variables)一节以获取关于在SNORT规则文件中定义和使用变量的更多
信息。
Variables
从版本1.3.1.2开始,Snort中开始定义变量。图21中显示了使用var关键字的简单替换变
量集。
格式:
var:
var MY_NET 192.168.1.0/24
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";)
图21 - 定义和使用变量的示例
规则变量名可以用多种方法修改。可以在"$"操作符之后定义变量。"?" 和 "-"可用于变
量修改操作符。
$var - 定义变量
$(var) - 用变量"var"的值替换
$(var:-default) - 用变量"var"的值替换,如果"var"没有定义用"default"替换。
$(var:?message) - 用变量"var"的值替换或打印出错误消息"message"然后退出。
Action中规则修改符的例子参见图13。
var MY_NET $(MY_NET:-192.168.1.0/24)
log tcp any any -> $(MY_NET:?MY_NET is undefined!) 23
图22 - 高级变量使用示例
创建好的规则:
为了开发最有效和注重速度的Snort规则,必须记住一些通用的概念。
规则的内容选项(内容规则)是大小写敏感的(除非使用了"nocase"选项)
不要忘了内容规则是大小写敏感的,而且许多程序通常使用大写字母来代表命令。FTP是
一个好例子。考察下面这两个例子:
alert tcp any any -> 192.168.1.0/24 21 (content: "user root"; msg: "FTP root
login";)
alert tcp any any -> 192.168.1.0/24 21 (content: "USER root"; msg: "FTP root
login";)
第二个规则可以捕获几乎每一个自动的root登录尝试,但是使用小写user的第一个规则就
不能。
加速含有内容选项的规则
探测引擎运用规则的顺序和它们在规则中的书写顺序无关。内容规则选项总是最后一个被
检验。利用这个事实,应该先运用别的快速规则选项,由这些选项决定是否需要检查数据
包的内容。例如:在TCP会话建立起来后,从客户端发来的数据包,PSH和ACK这两个TCP标
志总是被置位的。如果
想检验从客户端到服务器的有效载荷,利用这个事实,就可以先进行一次TCP标志检验,
这比式样匹配算法(pattern match
algorithm)在计算上节约许多。使用内容选项的规则要加速的一个简便方法就是也进行
一次标志检验,如图23。基本思想是,如果PSH和ACK标志没有置位,就不需要对数据包的
有效载荷进行检验。如果这些标志置位,检验标志而带来的计算能力消耗是可以忽略不计
的。
alert tcp any any -> 192.168.1.0/24 80 (content: "cgi-bin/phf"; flags: PA;
msg: "CGI-PHF probe";)
图23 - 使用TCP标志检验来加速内容规则
Version 1.1, All rights reserved, ? Copyright 1999,2000 Martin Roesch
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.88.186]
发件人: [email]Sinob.bbs@smth.org[/email]
发送时间: 2000年9月8日星期五 8:51
收件人: [email]microbin@263.net[/email]
主题: Snort INSTALL文件(转寄)
发信人: xuzq (奔腾), 信区: Security
标 题: Snort INSTALL文件
发信站: BBS 水木清华站 (Thu Sep 7 15:44:31 2000)
如何安装SNORT(INSTALL文件)
翻译:xuzq([email]xuzq@chinasafer.com[/email])
快速参考:
1. 确信libpcap软件包已经在系统中安装了。
2. ./configure
3. make
4. make install
5. 制作规则示例文件(如果想要使用规则,参阅snort-lib文件)
6. 运行snort -?(带选项)
7. 如果系统中已经有了老版本的Snort,应该重写已有的规则以使它们和规则格式兼容。
有关规则格式的信息请参阅RULES.SAMPLE文件。
8. 玩得开心Have fun!
Snort的配置选项(Configure-time switches)
`--enable-smbalerts'
激活SMB告警代码,这在安全性方面会有些问题,因为它在程序中以ROOT身份执行了
popen()调用。使用这个选项要小心。
`--enable-flexresp'
激活灵活响应代码,这允许当规则匹配时取消IP层的敌意连接。如果要使用这个特性,就
要安装libnet库,这个包可以从[url]http://www.packetfactory.net/libnet[/url]处取得。详情请
参阅README.FLEXRESP文件。这个功能仍然处于alpha测试状态,要小心使用。
`--with-libpq-includes=DIR'
将PostgresSQL数据库支持的Include目录指到DIR。
`--with-libpq-libraries=DIR'
将PostgresSQL数据库支持的库目录指到DIR。如果设置了以上这两个值就可以使用
Postgres的输出插件模块。
`--with-libpcap-includes=DIR'
如果配置脚本不能找到libpcap的包含文件,使用这个选项来指定libpcap包含文件的目录
。
`--with-libpcap-libraries=DIR'
如果配置脚本不能找到libpcap的库文件,使用这个选项来指定libpcap库文件的目录。
数据库支持插件从snort的1.6.3版本开始作为snort的一部分发布。该插件使snort能够记
录到mysql,postgresql和支持unixodbc的任何数据库。可以使用该插件从多个sensor记
录到一个中央数据库服务器上。
--with-mysql-includes=DIR mysql include directory
--with-mysql-libraries=DIR mysql library directory
--with-unixodbc-includes=DIR unixodbc include directory
--with-unixodbc-libraries=DIR unixodbc library directory
--with-libpq-includes=DIR libpq include directory
--with-libpq-libraries=DIR libpq library directory
在./config脚本中要提供正确的参数。
例如:要支持mysql,如下:
% ./configure --with-mysql-includes=/usr/include/mysql \
--with-mysql-libraries=/usr/lib/mysql
运行上面的语句会显示以下的输出:
checking for /usr/include/mysql/mysql.h... yes
checking for mysql_init in -lmysqlclient... yes
如果这一步成功了,就运行make。如果不能得到yes,检查连接mysqlclient时需要数学库
"-lm",手工修改 Makefile,使其包含以下内容。
CPPFLAGS = -I/usr/include/mysql -I/usr/include/mysql -DENABLE_MYSQL
LDFLAGS = -L/usr/lib/mysql LIBS = -lpcap -lnsl -lmysqlclient -lm
基本安装
==================
以下是基本安装的指令。
'configure'shell脚本用于在编译过程中猜测许多与系统有关的变量的正确值。它使用这
些值在软件包的每一个目录中创建Makefile文件。也用于创建包含有与系统有关的信息定
义的一个或多个.h头文件。最后它创建一个名为config.status的shell脚本,该脚本用于
在将来重建当前的配置
。文件config.cache中保存了配置测试的结果用于加速重新配置过程。文件config.log包
含编译的输出信息(主要用于调试configure)。
如果在编译这个软件包时要做一些额外的配置工作,请检查configure脚本看看是否已经
做了,如果有出入,请给在README文件中提供的邮件地址发信,这样在下一个发行版本中
就可能包含这些改动。如果在config.cache文件中包含不想保存的结果,可以直接编辑或
删掉它们。
configure.in文件是程序autoconf用于创建configure的依据。如果想要修改这个文件,
或者使用新版本的autoconf来重新生成configure时,才会用到这个文件。
编译这个软件包最简单的步骤是:
1. cd到包含软件包源码的目录,执行命令./configure为自己的系统配置这个包。如果使
用的是旧系统V上的csh,可能应该执行sh ./configure命令,以避免使用csh来执行整个
configure脚本。运行configure会花费一些时间,在运行过程中,会在屏幕上显示正在检
查哪些特性。
2. 键入make命令来编译整个包。
3. 可选的,键入make check来运行软件包的自检功能。
4. 键入make install来安装所有的程序、数据文件和文档。
5. 使用make clean命令可以删除在源代码目录中的二进制和目标文件。要删除configure
脚本生成的文件(这样就可以在别的类型的计算机上编译这个包),使用make distclean
命令。这里还有一个make
maintainer-clean目标,但这主要是针对软件包的开发者的。如果使用这个目标,必须获
取重建该软件发行版本文件的所有其他程序。
编译器及其选项
=====================
某些系统需要configure脚本不知道的一些不常用的编译或连接选项。可以通过在环境变
量中给这些变量赋值,从而向configure传递这些变量的初始值。如果使用的是与
Bourne-Shell兼容的shell,就可以使用如下命令完成这一功能:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
或者系统有env程序,还可以用下面的命令完成同样的功能:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
为多体系结构平台编译
====================================
可以同时为多于一种计算机编译这个软件包,只需将每种体系结构的目标文件放到它们自
己的目录中即可。为此,所使用的make必须支持VPATH变量,比如GNU
make就可以。Cd到想要放置目标和可执行文件的目录中,运行configure脚本。Configure
脚本会自动检查该目录及其上一级目录中的源代码。
如果使用的make不支持VPATH变量,必须在源代码目录中一次为一种体系结构平台编译这
个软件包。在成功安装软件包之后,在为另一种体系结构平台重新配置之前,使用make
distclean命令删除这次配置生成的文件。
安装路径
==================
默认情况下,make install会把这个包的文件安装到/usr/local/bin和/usr/local/man等
目录中。如果不希望安装到/usr/local目录中,使用configure的--prefix=PATH选项,可
以指定其他的安装前缀。
安装前缀可以把与体系结构相关和与体系结构无关的两种文件安装到不同的目录中。如果
使用configure的--exec-prefix=PATH选项,软件包会将程序和库文件安装到PATH指定的
目录中,文档和其他数据文件仍旧使用常规前缀。
另外,如果使用不常见的目录规划层次,可以使用--bindir=PATH之类的选项为不同类型
的文件指定特别的安装目录。运行configure -help能够得到什么样的文件可以安装到什
么目录中的目录列表。
如果软件包支持,使用configure的--program-prefix=PREFIX或--program-suffix=SUFFI
X选项,可以给程序名加上特别的前缀或后缀。
可选特性
=================
某些软件包关心configure的--enable-FEATURE选项,FEATURE是指软件包的可选部分。这
些软件包可能还关心--with-PACKAGE选项,PACKAGE是指诸如gnu-as或x(指X Window
System)。README文件中应该涉及该软件包可以识别哪些--enable-和--with-选项。
对使用X Window System的软件包来说,通常configure可以自动找到X的包含文件和库文
件,但是如果找不到,可以使用configure的--x-includes=DIR和--x-libraries=DIR来指
定它们的位置。
下面的配置选项适用于Snort:
--enable-smbalerts
激活SMB告警代码,因为它从以ROOT特权运行的程序中执行popen()调用,所以多少会有点
不安全。请注意这一点,谨慎使用。
--enable-flexresp
激活灵活响应代码,当一个规则匹配后,允许在IP层取消敌意的连接。当激活这个特性时
,需要libnet库的支持,这个软件包可以在[url]http://www.packetfactory.net/libnet[/url]下载
。详细情况参见README.FLEXRESP文件,该功能仍处于alpha测试阶段,小心使用。
指定系统类型
==========================
有些特性configure没法自动探知,需要由主机类型来决定。通常configure能够探知主机
类型,但是如果失败了,可以使用--host=TYPE选项来指定主机类型。主机类型可以是系
统的简称,比如sun4,或者是包含三个域的规范名称:CPU-COMPANY-SYSTEM
每个域的可能取值请参见config.sub文件。如果软件包中没有这个文件,说明这个软件包
不需要知道主机类型。
如果为了交叉编译(cross-compiling)制作编译工具,可以使用--target=TYPE选项来选
择系统类型,编译工具为这个指定的系统产生代码。使用--build=TYPE选项来选择编译软
件包所在平台的系统类型。
缺省共享(Share Default)
=========================
如果希望为configure脚本设置共享的缺省值,可以创建名为config.site的站点shell脚
本,该脚本给出诸如变量CC,cache_file,prefix等的缺省值。如果PREFIX/share/confi
g.site
存在,configure会首先使用它,然后会去查找PREFIX/etc/config.site文件。或者通过
设置环境变量CONFIG_SITE来指定站点脚本文件的位置。警告:并非所有的configure脚本
都查找站点脚本。
操作控制
==================
configure可以识别一下选项来控制其工作方式:
--cache-file=FILE
在FILE而不是./config.cache文件中使用并且保存测试结果。为了调试configure,可以
将FILE指向/dev/null从而禁止caching。
--help
打印configure的选项概要并退出。
--quiet
--silent
-q
不打印有关检查项目的信息。重定向到/dev/null,可以禁止所有的普通输出(错误信息
还会显示)
--srcdir=DIR
到DIR目录中查找软件包的源代码。通常,configure可以自动确定这个目录。
--version
打印产生configure脚本的Autoconf版本,然后退出。
Configure也可以接受一些其他的,但是并不常用的选项。
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.88.186]
发件人: [email]Sinob.bbs@smth.org[/email]
发送时间: 2000年9月8日星期五 8:52
收件人: [email]microbin@263.net[/email]
主题: Snort-FAQ(转寄)
发信人: xuzq (奔腾), 信区: Security
标 题: Snort-FAQ
发信站: BBS 水木清华站 (Thu Sep 7 15:48:36 2000)
% 翻译自snort faq
% 陈永智([email]cyz@chinasafer.com[/email]) 2000/8/25
%
******************************************************************************
*
Snort FAQ
1 读tcpdump文件的-r开关如何使用?
2 如何让snort既记录包头,又记录包的净荷?
3 Snort记录它警告的包的全部内容吗?
4 为什么snort会警告符合pass规则的包?
5 Snort不检查nmap syn扫描,以后会吗?
6 Snort处理ip分片吗?
7 Snort进行tcp流的重装吗?
8 (服务器消息块)Smb警告不不起作用,怎么回事?
9 我希望snort能够根据防火墙/email报告/外部程序的配置自动对事件作出响应,什么时
候能够做到?
10 我没有网卡,没有连接到其他计算机,如何测试snort?
读tcpdump文件的-r开关如何使用?
该开关和snort规则文件联合使用,tcpdump数据可以用来分析有敌意的内容,端口扫描,
或者snort能够探测的其他任何内容。Snrot也可以直接显示编码格式下的包,许多人发现
这比本地的tcpdum输出更容易阅读。
如何让snort既记录包头,又记录包的净荷?
使用命令行选项"-d"
Snort记录它警告的包的全部内容吗?
是的,这些包被记录在产生警告的源主机的ip地址为名字的目录下
Yes, they should be in the directory that has the same IP address as the
source host of the packet which generated the alert.
为什么snort会警告符合pass规则的包?
规则被应用的默认顺序是首先是alert,然后是 pass最后是log。这个顺序策略保证你不
会写了50条alert规则后不小心用一个错误的pass规则把他们都禁止掉。如果你确实想改
变顺序,使pass规则首先被应用,使用命令行开关"-o"
Snort不检查nmap syn扫描,以后会吗?
目前snort没有端口扫描探测模块(目前),所以它不特别地查看进来的进行端口扫描探
测的syn流。同样对与udp也不处理。Snort的2.0版本将会有端口扫描探测机制。
Snort处理ip分片吗?
现在还不。Snort目前有"minfrag"规则选项,这个规则检查过小的ip分片,根据分片的大
小作出警告。这是一个有效的策略,因为实际上没有商用网络设备会产生小于256字节的
ip包,而绝大多数试图掩盖自身的黑客包都把自己分片的尽量小。Minfrag选项允许你指
定一个分片大小的阈值,
snort对于小于此值的包产生警告。2.0版计划实现完整的ip分片重装功能。
Snort进行tcp流的重装吗?
还没有,这在2.0版会有。
(服务器消息块)Smb警告不不起作用,怎么回事?
确认你在运行./configure时包含了"--enable-smbalerts"
我希望snort能够根据防火墙/email报告/外部程序的配置自动对事件作出响应,什么时候
能够做到?
永远也不会。在实现这个功能时引发了严肃的性能和安全问题,已经有了一个比较好的解
决方案:我推荐使用swatch或者logsurfer来实现这个功能。Swatch和logsurfer就是特别
为监视log文件并根据这些文件中的内容作出反应的。使snort执行外部程序会降低系统的
性能,并且可能有以ro
ot权限执行外部程序的危险。
我没有网卡,没有连接到其他计算机,如何测试snort?
你必须在两个虚设备之间路由:
· modprobe -a dummy (The dummy device has to be build by the kernel)
· ifconfig dummy0 192.168.0.1
· ifconfig dummy0:0 192.168.0.2
· telnet 192.168.0.3 12345
重要:第二个ip在同一个接口上,并且不是dummy1或者dummy2,并且你试图访问的ip不是
你设置在接口上的这两个ip。利用snort使用混杂模式监听ip地址范围的能力
(HOMEDIR=192.168.0.0/16)
It's important that the second IP is on the same interface and not e.g.
dummy1 or dummy2 and that the IP you try to access is *not* one of those you
put on the interfaces. Use snort's ability to hear in promiscious mode on an
IP address range.
(HOMEDIR=192.168.0.0/16)
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.88.186]
发件人: [email]Sinob.bbs@smth.org[/email]
发送时间: 2000年9月8日星期五 10:49
收件人: [email]microbin@263.net[/email]
主题: SNORT README文件(转寄)
发信人: xuzq (奔腾), 信区: Security
标 题: SNORT README文件
发信站: BBS 水木清华站 (Thu Sep 7 15:43:15 2000)
Snort Version 1.6.3 Readme
by Martin Roesch ([email]roesch@clark.net[/email])
翻译 xuzq([email]xuzq@chinasafer.com[/email])
SNORT可以在IP网络上进行流量分析和包记录,进行协议分析和内容搜索和匹配;可以检
测多种攻击和探测,比如:缓冲区溢出、秘密端口扫描、CGI攻击、SMB探测、OS类型指纹
探测等等。SNORT使用灵活的语言描述要收集或跳过的流量,探测引擎使用模块化的插件
结构。
SNORT集成了多种告警机制来提供实时告警功能,包括:syslog、用户指定文件、UNIX
Socket、通过SMBClient使用WinPopup对Windows客户端告警。
SNORT有三种主要用途:(1)象tcpdump那样的直接获取包(2)用于网络流量分析的包记
录(3)网络入侵检测系统。
SNORT的包记录可以采用两种形式:tcpdump的二进制形式和SNORT自己的ASCII码形式(基
于对方IP地址)。
插件使得探测和报告子系统很容易扩展,现有的插件包括数据库记录、小分片探测、端口
扫描探测和HTTP URI normalization(?)。
使用方法:
命令行:
snort -[options]
Options:
-A 将告警模式设为全面、快速和无。全面模式使用通常的
"Classic
Snort"方式向告警文件告警。快速模式只向告警文件中写时戳、消息、IP和端口。无模式
关闭告警功能。从版本1.5开始,Snort加入了一种试验性的告警方式,利用UnixSock向另
外一个进程告警。使用"unsock"参数可以激活这个特性。
-a 显示ARP数据包。
-b 以tcpdump格式记录数据包。所有的数据包以tcpdump的格式保
持他们原来的二进制状态记录到"snort.log"文件中。这个选项使得程序的运行速度更快
,因为不必花时间作数据包的二进制到文本格式的转换。Snort在"-b"模式下,可以很好
地与100Mbps网络配合。
-c 使用配置文件 . 这是规则文件,可以告诉系统记录、告
警或忽略哪些网络流量。
-C 捕获数据包有效负载中的ASCII字符,而不是十六进制的字符
。
-d 捕获应用层的数据。
-D 以守护进程模式运行Snort,除非另外指定,告警信息送到
/var/log/snort.alert文件中。
-e 显示/记录二层数据包头数据。
-F 从文件中读取BPF过滤器。如果只想Snort作为数据包捕
获器或者对巨复杂的BPF过滤器有特别偏好,就可以使用这个选项。
-g 在初始化工作完成后,以组ID运行Snort程序。这个选项允
许Snort在初始化工作完成后丢弃root特权,该功能完全出于安全性考虑。
-h 将本地网(home network)设为,这是一个典型的C类IP地
址,类似于192.168.1.0或其他。 如果使用这个选项,在记录的网络流量中,右箭头表示
从外网进入的流量,左箭头表示从内网出去的流量。这好像很弱智,但是看起来感觉不错
。
-i 使用网络界面。
-l 将数据包记录到目录中。这将建立起一个目录层次结构,
该记录目录作为基础起始目录,该目录下以网络流量中对方IP地址为子目录名称,与该地
址有关的所有数据包被储存在这个目录中。
-M 向文件中的工作站列表发送WinPopup消息。这个选项
要求运行Snort的主机上安装Samba软件或者能够访问到该软件。工作站文件很简单:每一
行包含一个想要发给消息的主机名(Samba名字),开头不需要加"\\"。
-n 在处理了个数据包之后退出。
-N 关闭记录功能,但告警功能依然正常运行。
-o 改变对于数据包应用规则的顺序。标准顺序是Alert->Pass->Log,使用
这个选项之后,变为Pass->Alert->Log。这可以使得用户设置自己告警规则时,不用在命
令行写大量的BPF过滤参数。这个选项是用户要求增加的。
-O 在数据包ASCII捕获方式下,隐藏IP地址。该选项在打印到屏幕或写入记录
文件时,把IP地址变为"xxx.xxx.xxx.xxx"。如果使用了本地网选项(-h),只有本地网
地址会被隐藏,而非本地网地址仍然可见。向喜爱的安全邮件列表发信时是完美的?(
Perfect for posting to
your favorite security mailing list!)
-p 关闭混杂(promiscuous)模式的sniffing。在严重影响你网络的情况
下使用。
-r
读取tcpdump生成的文件(tcpdump-generated)。这会让Snort读取和处理指定的文
件。有时候这个选项很有用,比如有一堆影子文件(可能指网络流量内容的捕获文件)要
对其内容进行处理或者甚至有一大堆写入tcpdump格式文件中的重组后的数据包分片(要
处理)。
-s 将告警消息送到syslog去记录。在Linux平台中,这些消息在
/var/log/secure文件中,很多其他平台上消息在/var/log/messages文件中。
-S 将值"v"赋给变量名"n"。用于在命令行中给已经在
Snort规则文件中定义的变量赋值。比如:如果已经在Snort规则文件中定义了HOME_NET变
量,可以在命令行中给这个预定义的变量重新赋值。
-t 在初始化之后将Snort的根目录变为。
-u 在初始化之后将Snort的UID变为。
-v 详细模式。把数据包打印到控制台。详细模式有个大问题:速
度慢。如果使用Snort做IDS工作,就不要使用-v选项,否则会丢失数据包(不是很多但有
一些)。
-V 显示版本号并退出。
-x 在看到恼人的IPX数据包时,显示一小条恼人的消息。
-? 显示使用说明并退出。
过滤器:
[FILTERS]:
过滤器是tcpdump中标准的BPF样式的过滤器。参考Snort的man手册可以得到关于如何正确
使用过滤器的更多信息。通常,可以在过滤器中写主机、网络和协议,并且可以包含一些
逻辑符号,综合在一起获取自己感兴趣的特定流量信息。例如:
[zeus ~]# ./snort -h 192.168.1.0/24 -d -v host 192.168.1.1
记录发给和来自主机192.168.1.1的流量。
[zeus ~]# ./snort -h 192.168.1.0/24 -d -v net 192.168.1 and not host
192.168.1.1
记录C类网络192.168.1.0/24上的所有流量,除了发给和来自主机192.168.1.1的流量。请
注意上面命令行中-h选项后面的网络表示与BPF过滤器的命令所使用的格式不同。对此感
到很抱歉,我喜欢CIDR符号但是没有重写libpcap使其一致。
从版本1.3开始,可以使用-F选项从文件中读入BPF过滤器。
规则:
[RULES]:
注意:现在"官方"的规则文档可以在[url]http://www.snort.org/snort_rules.html[/url]找到。在
RULES.SAMPLE文件中的信息仍然有效,但是更易读的文档在Web站点上。
规则的格式是相当简单的,在SNORT的发行套件中所包含的RULES.SAMPLE文件涵盖了这些
规则格式。在Web站点上有规则系统如何工作的详细解释。
系统产生的Alerts被记录到一个名为alert的文件中。可以利用工具"rt"或"tail
-f"来查看系统的告警信息。Alerts也可以被送到syslog中(可以用swatch之类的工具来
查看),或者Alerts也可以通过smbclient作为WinPopup消息送出去。阅读INSTALL文件获
取关于如何使用SMB告警选项的信息。
注意:系统可以通过使用-l选项将基于规则的记录重定向到指定的目录。如果没有
指定目录,缺省记录到/var/log/snort中。
页:
[1]