‘壹’ 怎样安装和使用Snort
在安装Snort之前,请确认你的系统是否安装了LAMP,如果没有安装的话,请输入以下命令安装:
$ sudo apt-get install mysql-server libapache2-mod-php5 php5-mysql libphp-adodb
安装部署Snort工具
1. 安装Snort软件包
$ sudo apt-get install snort-mysql
在安装过程中会提示以下信息
这时,输入的网卡要与你的现在使用的网卡一致,否则安装不成功,查看你的网卡信息使用命令 $ ifconfig
接下来,选择要监听网络段,比如要监听整个192.168.0.0/16这个网络段,就填写上这个网络段,
最后,提示是否设置数据库,选择“Yes”。
安装结束,会提示以下错误信息
这个错误信息,提示我们还没有为snort配置一个mysql数据库。接下来我们为snort创建一个数据库
2. 创snortdb数据库
进入数据库后,创建数据库名为snortdb
创建一个snort的数据库用户,并设置密码为snortpassword
创建好数据库snortdb以后,我们需要将snort-mysql自带的软件包中附带的sql文件导入到数据库中;
$ cd /usr/share/doc/snort-mysql
$ zcat create_mysql.gz | mysql snortdb -u snort -psnortpassword
导入到数据库中以后,可以去snortdb数据库中查看是否导入成功。
如果导入数据完成以后,接着我们需要把/etc/snort/db-pending-config文件删掉,否则snort会认为数据库任然没有准备好。
$ sudo rm /etc/snort/db-pending-config
3. 配置Snort
上一步配置好了数据库,我们需要配置Snort配置文件(/etc/snort/snort.conf),告诉Snort以后日志写入到Snortdb数据库中.
$ sudo nano /etc/snort/snort.conf
首先,找到文件中“var HOME_NET any”一行,将其修改为我们邀监控的网络段,并启用临近下面几行的“var EXTERNAL_NET !$HOME_NET”,如图配置:
接着,找到该文件中“output database:log,mysql,”这行,默认它是注释的,如果没有将其注释掉,并在该行的下方填写以下内容,
该设置时将log和alert信息都写入到指定的数据库中。
然后, 检测snort.conf配置文件是否正常:
$ sudo snort -c /etc/snort/snort.conf
如果出现以上信息,有一个小猪出现,则说明配置成功了,按“Ctrl +C”退出。
最后,我们启动snort:
$ sudo /etc/init.d/snort start
启动成功以后需要使用
$ ps aux | grep snort
检测是否snort真的启动成功。一般安装我的步骤做的话是不会成功的,因为还有一个文件(/var/log/snort/alert)的所有者没有修改。
$ sudo chown snort /var/log/snort/alert
再启动snort
$ sudo /etc/init.d/snort start
通过$ ps aux | grep snort命令,查看是否启动成功。如果没有成功,可以通过/var/log/syslog日志文件查看具体的原因。
这里说一下为什么要先启动一下snort再修改(/var/log/snort/alert文件的所有者,因为默认在/var/log/snort/目录没有alert这个文件,只要通过先启动一下snort就会自动创建一个alert文件。
‘贰’ 如何配置Snort+主动防火墙
一、 Snort的安装:
Snort的安装十分简单,一般的分为以下几个步骤:
* 首先,确定你的linux系统中已经安装了libpcap库。
* 改写snort的配置文件以满足系统的要求.
* 使用make命令,编译snort的源文件生成二进制可执行文件.
* 使用make install命令,将编辑好的可执行文件安装到指定的位置.
* 根据snort中头文件定义的简单规则,可以编译一些简单的规则文件.
* 使用snort -?命令;
* 如果你已经使用了Snort早期的版本,你还需要重新编译所用的规则,使它与现有的规则格式相兼容。
1. 配置选项介绍
./configure --enable-inline
--help看所有配置选项
mkdir /var/log/snort
cd /etc
2.启动snort inline
snort -QDc ../etc/drop.conf -l /var/log/snort
* 将上一条命令写入/etc/rc.d/rc.local
Snort的使用
Snort采取命令行方式运行。格式为:snort -[options] 。options中可选的参数很多,下面逐一介绍。
首先介绍-[options]的内容:
-A 设置告警方式为full,fast或者none。 在full方式下,Snort将传统的告警信息格式写入告警文件,告警内容比较详细。在fast方式下,Snort只将告警时间,告警内容,告警IP地址和端口号写入文件。在none方式下,系统将关闭告警功能。
-a 显示ARP包
-b 以tcpmp的格式将数据包记入日志。 所有的数据包将以二进制格式记入名为snort.log的文件中。这个选项提高了snort的操作速度,因为直接已二进制存储,省略了转换为文本文件的时间,通过-b选项的设置,snort可以在100Mbps的网络上正常工作。
-c 使用配置文件。这是一个规则文件。文件内容主要控制系统哪些包需要记入日志,哪些包需要告警,哪些包可以忽略等。
-C 仅抓取包中的ASCII字符
-d 抓取应用层的数据包
-D 在守护模式下运行Snort。告警信息发送至/var/log/snort.alert,除非特别配置。
-e 显示和记录网络层数据包头信息
-F 从文件中读取BPF过滤信息。
-h 设置(C类IP地址)为内部网络.当使用这个开关时,所有从外部的流量将会有一个方向箭头指向右边,所有从内部的流量将会有一个左箭头.这个选项没有太大的作用,但是可以使显示的包的信息格式比较容易察看.
-i 使用网络接口文件 。
-l 将包信息记录到目录下。设置日志记录的分层目录结构,按接收包的IP地址将抓取的包存储在相应的目录下。
-M 向文件格式非常简单。文件的每一行包含一个目的地址的SMB名。
-n 处理完包后退出。
-N 关闭日志功能。告警功能仍然工作。
-o 改变应用于包的规则的顺序。标准的应用顺序是:Alert->Pass->Log;采用-o选项后,顺序改为:Pass->Alert->Log,允许用户避免使用冗长的BPF命令行来过滤告警规则。
-p 关闭混杂模式的嗅探(sniffing)。这个选项在网络严重拥塞时十分有效。
-r 读取tcpmp生成的文件。Snort将读取和处理这个文件。例如:当你已经得到了一个Shadow文件或者tcpmp格式的文件,想处理文件包含的内容时,这个选项就很有用了。
-s 将告警信息记录到系统日志。在其他的平台下,日志文件可以出现在/var/log/secure, /var/log/messages目录里。
-S ,n=v> 设置变量n的值为v。这个选项可以用命令行的方式设置Snort规则文件中的变量。例如:如果要给Snort规则文件中的变量HOME_NET赋值,就可以在命令行下采用这个选项。
-v 将包信息显示到终端时,采用详细模式。这种模式存在一个问题:它的显示速度比较慢,如果你是在IDS网络中使用Snort,最好不要采用详细模式,否则会丢失部分包信息。
-V 显示版本号,并退出。
-x 当收到骚扰IPX包时,显示相关信息。
‘叁’ 如何编写snort的检测规则
snort使用一种简单的规则描述语言,这种描述语言易于扩展,功能也比较强大。下面是一些最基本的东西:
snort的每条规则必须在一行中,它的规则解释器无法对跨行的规则进行解析。注意:由于排版的原因本文的例子有的分为两行。
snort的每条规则都可以分成逻辑上的两个部分:规则头和规则选项。规则头包括:规则行为(rule''s action)、协议(protocol)、源/目的IP地址、子网掩码以及源/目的端口。规则选项包含报警信息和异常包的信息(特征码,signature),使用这些特征码来决定是否采取规则规定的行动。
这是一个例子:
alert tcp any any -> 192.168.1.0/24 111(content:"|00 01 86 a5|";msg:"mountd access";)
表1.一条简单的snort规则
从开头到最左边的括号属于规则头部分,括号内的部分属于规则选项。规则选项中冒号前面的词叫做选项关键词(option keywords)。注意对于每条规则来说规则选项不是必需的,它们是为了更加详细地定义应该收集或者报警的数据包。只有匹配所有选项的数据包,snort才会执行其规则行为。如果许多选项组合在一起,它们之间是逻辑与的关系。让我们从规则头开始。
1.1 include
snort使用的规则文件在命令行中指定,include关键词使这个规则文件可以包含其它规则文件中的规则,非常类似与C语言中的#include。snort会从被包含的文件读出其内容,取代include关键词。
格式:
include <文件路径/文件名>
注意:行尾没有分号。
1.2 varriables
在snort规则文件中可以定义变量。
格式:
var
例子:
var MY_NET 192.168.1.0/24,10.1.1.0/24] $MY_NET any (flags:S;msg:''SYNMETA packet";)
表2.变量的定义和使用
规则变量名可以使用多种方式来修改,你可以使用$操作符来定义元变量(meta-variables)。这些修改方式可以结合变量修改操作符:?和-来使用。
$var:定义元变量
$(var):以变量var的内容作为变量名
$(var:-default):以变量var的内容作为变量名,如果var没有定义就使用default作为变量名
$(var:?message):使用变量var的内容作为变量名,如果不成功就打印错误信息message并退出。
例如:
var MY_NET $(MYU_NET:-192.168.1.0/24) tcp any any -> $(MY_NET:?MY_NET is undefined!) 23
表3.高级变量应用
2.规则头(Rule Headers)
2.1 Rule Action
规则头包含一些信息,这些信息包括:哪些数据包、数据包的来源、什么类型的数据包,以及对匹配的数据包如何处理。每条规则的第一项就是规则行为(rule action)。规则行为告诉snort当发现匹配的数据包时,应该如何处理。在snort中,有五种默认的处理方式:alert、log、pass、activate和dynamic。
alert:使用选定的报警方法产生报警信息,并且记录数据包
log:记录数据包
pass:忽略数据包
activate:报警,接着打开其它的dynamic规则
dynamic:保持空闲状态,直到被activete规则激活,作为一条log规则
你也可以定义自己的规则类型,把它们和一个或者几个输出插件联系在一起。然后你就可以在snort规则中使用这些规则类型了。
这个例子将建立一个类型,它将只以tcpmp格式输出日志:
ruletype suspicious
{
type log
output log_tcpmp: suspocious.log
}
下面这个例子将建立一个类型,把日志发送到syslog和MySql数据库:
ruletype redalert
{
type alert
output alert_syslog:LOG_AUTH LOG_ALERT
output database:log,user=snort dbname=snort host=localhost
}
‘肆’ 求:windows下配置snort所需全部资源
假设你的snort.exe位于d:\snort\bin\snort.exe。按以下步骤:
开始——运行——cmd——d:——cd snort\bin——snort
但snort一般都是配合命令来用的,要加一些选项才有效果。如(这里的路径是我电脑上的):
snort -c c:\snort\etc\snort.conf -l c:\snort\logs -d -e -v
如果要结束,可以用Ctrl+c,则退出snort。
‘伍’ snort谁会用
第一章 snort简介
snort有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。数据包记录器模式把数据包记录到硬盘上。网路入侵检测模式是最复杂的,而且是可配置的。我们可以让snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动作。
嗅探器
所谓的嗅探器模式就是snort从网络上读出数据包然后显示在你的控制台上。首先,我们从最基本的用法入手。如果你只要把TCP/IP包头信息打印在屏幕上,只需要输入下面的命令:
./snort -v
使用这个命令将使snort只输出IP和TCP/UDP/ICMP的包头信息。如果你要看到应用层的数据,可以使用:
./snort -vd
这条命令使snort在输出包头信息的同时显示包的数据信息。如果你还要显示数据链路层的信息,就使用下面的命令:
./snort -vde
注意这些选项开关还可以分开写或者任意结合在一块。例如:下面的命令就和上面最后的一条命令等价:
./snort -d -v –e
数据包记录器
如果要把所有的包记录到硬盘上,你需要指定一个日志目录,snort就会自动记录数据包:
./snort -dev -l ./log
当然,./log目录必须存在,否则snort就会报告错误信息并退出。当snort在这种模式下运行,它会记录所有看到的包将其放到一个目录中,这个目录以数据包目的主机的IP地址命名,例如:192.168.10.1
如果你只指定了-l命令开关,而没有设置目录名,snort有时会使用远程主机的IP地址作为目录,有时会使用本地主机IP地址作为目录名。为了只对本地网络进行日志,你需要给出本地网络:
./snort -dev -l ./log -h 192.168.1.0/24
这个命令告诉snort把进入C类网络192.168.1的所有包的数据链路、TCP/IP以及应用层的数据记录到目录./log中。
如果你的网络速度很快,或者你想使日志更加紧凑以便以后的分析,那么应该使用二进制的日志文件格式。所谓的二进制日志文件格式就是tcpmp程序使用的格式。使用下面的命令可以把所有的包记录到一个单一的二进制文件中:
./snort -l ./log -b
注意此处的命令行和上面的有很大的不同。我们勿需指定本地网络,因为所有的东西都被记录到一个单一的文件。你也不必冗余模式或者使用-d、-e功能选项,因为数据包中的所有内容都会被记录到日志文件中。
你可以使用任何支持tcpmp二进制格式的嗅探器程序从这个文件中读出数据包,例如:tcpmp或者Ethereal。使用-r功能开关,也能使 snort读出包的数据。snort在所有运行模式下都能够处理tcpmp格式的文件。例如:如果你想在嗅探器模式下把一个tcpmp格式的二进制文件中的包打印到屏幕上,可以输入下面的命令:
./snort -dv -r packet.log
在日志包和入侵检测模式下,通过BPF(BSD Packet Filter)接口,你可以使用许多方式维护日志文件中的数据。例如,你只想从日志文件中提取ICMP包,只需要输入下面的命令行:
./snort -dvr packet.log icmp
网络入侵检测系统
snort最重要的用途还是作为网络入侵检测系统(NIDS),使用下面命令行可以启动这种模式:
./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf
snort.conf是规则集文件。snort会对每个包和规则集进行匹配,发现这样的包就采取相应的行动。如果你不指定输出目录,snort就输出到/var/log/snort目录。
注意:如果你想长期使用snort作为自己的入侵检测系统,最好不要使用-v选项。因为使用这个选项,使snort向屏幕上输出一些信息,会大大降低snort的处理速度,从而在向显示器输出的过程中丢弃一些包。
此外,在绝大多数情况下,也没有必要记录数据链路层的包头,所以-e选项也可以不用:
./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf
这是使用snort作为网络入侵检测系统最基本的形式,日志符合规则的包,以ASCII形式保存在有层次的目录结构中。
网络入侵检测模式下的输出选项
在NIDS模式下,有很多的方式来配置snort的输出。在默认情况下,snort以ASCII格式记录日志,使用full报警机制。如果使用full报警机制,snort会在包头之后打印报警消息。如果你不需
要日志包,可以使用-N选项。
snort有6种报警机制:full、fast、socket、syslog、smb(winpopup)和none。其中有4个可以在命令行状态下使用-A选项设置。这4个是:
-A fast:报警信息包括:一个时间戳(timestamp)、报警消息、源/目的IP地址和端口。
-A full:是默认的报警模式。
-A unsock:把报警发送到一个UNIX套接字,需要有一个程序进行监听,这样可以实现实时报警。
-A none:关闭报警机制。
使用-s选项可以使snort把报警消息发送到syslog,默认的设备是LOG_AUTHPRIV和LOG_ALERT。可以修改snort.conf文件修改其配置。
snort还可以使用SMB报警机制,通过SAMBA把报警消息发送到Windows主机。为了使用这个报警机制,在运行./configure脚本时,必须使用--enable-smbalerts选项。
下面是一些输出配置的例子:
使用默认的日志方式(以解码的ASCII格式)并且把报警发给syslog:
./snort -c snort.conf -l ./log -s -h 192.168.1.0/24
使用二进制日志格式和SMB报警机制:
./snort -c snort.conf -b -M WORKSTATIONS
第二章 编写snort 规则
基础
snort使用一种简单的,轻量级的规则描述语言,这种语言灵活而强大。在开发snort规则时要记住几个简单的原则。
第一,大多数snort规则都写在一个单行上,或者在多行之间的行尾用/分隔。Snort规则被分成两个逻辑部分:规则头和规则选项。规则头包含规则的动作,协议,源和目标ip地址与网络掩码,以及源和目标端口信息;规则选项部分包含报警消息内容和要检查的包的具体部分。
下面是一个规则范例:
alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)
第一个括号前的部分是规则头(rule header),包含的括号内的部分是规则选项(rule options)。规则选项部分中冒号前的单词称为选项关键字(option keywords)。注意,不是所有规则都必须包含规则选项部分,选项部分只是为了使对要收集或报警,或丢弃的包的定义更加严格。组成一个规则的所有元素对于指定的要采取的行动都必须是真的。当多个元素放在一起时,可以认为它们组成了一个逻辑与(AND)语句。同时,snort规则库文件中的不同规则可以认为组成了一个大的逻辑或(OR)语句。
规则高级概念
Includes:
include允许由命令行指定的规则文件包含其他的规则文件。
格式:
include:
注意在该行结尾处没有分号。被包含的文件会把任何预先定义的变量值替换为自己的变量引用。参见变量(Variables)一节以获取关于在SNORT规则文件中定义和使用变量的更多信息。
Variables :
变量可能在snort中定义。
格式:
var:
例子:
var MY_NET 192.168.1.0/24
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";)
规则变量名可以用多种方法修改。可以在"$"操作符之后定义变量。"?" 和 "-"可用于变量修改操作符。
$var - 定义变量。
$(var) - 用变量"var"的值替换。
$(var:-default) - 用变量"var"的值替换,如果"var"没有定义用"default"替换。
$(var:?message) - 用变量"var"的值替换或打印出错误消息"message"然后退出。
例子:
var MY_NET $(MY_NET:-192.168.1.0/24)
log tcp any any -> $(MY_NET:?MY_NET is undefined!) 23
Config
Snort的很多配置和命令行选项都可以在配置文件中设置。
格式:
config [: ]
Directives
order 改变规则的顺序( snort -o )
alertfile 设置报警输出文件,例如:config alertfile: alerts
classification 创建规则分类。
decode_arp 开启arp解码功能。(snort -a)
mp_chars_only 开启字符倾卸功能。(snort -C)
mp_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)
obfuscate 使IP地址混乱 (snort -O)
no_promisc 关闭混杂模式。(snort -p)
quiet 安静模式,不显示标志和状态报告。(snort -q)
checksum_mode 计算校验和的协议类型。类型值:none, noip, notcp, noicmp, noudp, all
utc 在时间戳上用UTC时间代替本地时间。 (snort -U)
verbose 将详细记录信息打印到标准输出。 (snort -v)
mp_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加入一个新的参考系统。
规则头
规则动作:
规则的头包含了定义一个包的who,where和what信息,以及当满足规则定义的所有属性的包出现时要采取的行动。规则的第一项是"规则动作"(rule action),"规则动作"告诉snort在发现匹配规则的包时要干什么。在snort中有五种动作:alert、log、pass、activate 和dynamic.
1、Alert-使用选择的报警方法生成一个警报,然后记录(log)这个包。
2、Log-记录这个包。
3、Pass-丢弃(忽略)这个包。
4、activate-报警并且激活另一条dynamic规则。
5、dynamic-保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行。
你可以定义你自己的规则类型并且附加一条或者更多的输出模块给它,然后你就可以使用这些规则类型作为snort规则的一个动作。
下面这个例子创建一条规则,记录到tcpmp。
ruletype suspicious
{
type log output
log_tcpmp: suspicious.log
}
下面这个例子创建一条规则,记录到系统日志和MySQL数据库
ruletype redalert
{
type alert output
alert_syslog: LOG_AUTH LOG_ALERT
output database: log, mysql, user=snort dbname=snort host=localhost
}
协议
规则的下一部分是协议。Snort当前分析可疑包的ip协议有四种:tcp 、udp、icmp和ip。将来可能会更多,例如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标志的规则。这种记法给我们提供了一个很好的方法来表示一个很大的地址空间。
有一个操作符可以应用在ip地址上,它是否定运算符(negation operator)。这个操作符告诉snort匹配除了列出的ip地址以外的所有ip地址。否定操作符用"!"表示。下面这条规则对任何来自本地网络以外的流都进行报警。
alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)
这个规则的ip地址代表"任何源ip地址不是来自内部网络而目标地址是内部网络的tcp包"。
你也可以指定ip地址列表,一个ip地址列表由逗号分割的ip地址和CIDR块组成,并且要放在方括号内“[”,“]”。此时,ip列表可以不包含空格在ip地址之间。下面是一个包含ip地址列表的规则的例子。
alert tcp ![192.168.1.0/24,10.1.1.0/24] any -> [192.168.1.0/24,10.1.1.0/24] 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)
端口号
端口号可以用几种方法表示,包括"any"端口、静态端口定义、范围、以及通过否定操作符。"any"端口是一个通配符,表示任何端口。静态端口定义表示一个单个端口号,例如111表示portmapper,23表示telnet,80表示http等等。端口范围用范围操作符":"表
‘陆’ 怎样实现为snort添加命令行参数
snort使用一种简单的规则描述语言,这种描述语言易于扩展,功能也比较强大。下面是一些最基本的东西:snort的每条规则必须在一行中,它的规则解释器无法对跨行的规则进行解析。注意:由于排版的原因本文的例子有的分为两行。snort的每条规则都可以分成逻辑上的两个部分:规则头和规则选项。规则头包括:规则行为(rule''saction)、协议(protocol)、源/目的IP地址、子网掩码以及源/目的端口。规则选项包含报警信息和异常包的信息(特征码,signature),使用这些特征码来决定是否采取规则规定的行动。这是一个例子:alerttcpanyany->192.168.1.0/24111(content:"|000186a5|";msg:"mountdaccess";)表1.一条简单的snort规则从开头到最左边的括号属于规则头部分,括号内的部分属于规则选项。规则选项中冒号前面的词叫做选项关键词(optionkeywords)。注意对于每条规则来说规则选项不是必需的,它们是为了更加详细地定义应该收集或者报警的数据包。只有匹配所有选项的数据包,snort才会执行其规则行为。如果许多选项组合在一起,它们之间是逻辑与的关系。让我们从规则头开始。1.1includesnort使用的规则文件在命令行中指定,include关键词使这个规则文件可以包含其它规则文件中的规则,非常类似与C语言中的#include。snort会从被包含的文件读出其内容,取代include关键词。格式:include注意:行尾没有分号。1.2varriables在snort规则文件中可以定义变量。格式:var例子:varMY_NET192.168.1.0/24,10.1.1.0/24]$MY_NETany(flags:S;msg:''SYNMETApacket";)表2.变量的定义和使用规则变量名可以使用多种方式来修改,你可以使用$操作符来定义元变量(meta-variables)。这些修改方式可以结合变量修改操作符:?和-来使用。$var:定义元变量$(var):以变量var的内容作为变量名$(var:-default):以变量var的内容作为变量名,如果var没有定义就使用default作为变量名$(var:?message):使用变量var的内容作为变量名,如果不成功就打印错误信息message并退出。例如:varMY_NET$(MYU_NET:-192.168.1.0/24)tcpanyany->$(MY_NET:?MY_NETisundefined!)23表3.高级变量应用2.规则头(RuleHeaders)2.1RuleAction规则头包含一些信息,这些信息包括:哪些数据包、数据包的来源、什么类型的数据包,以及对匹配的数据包如何处理。每条规则的第一项就是规则行为(ruleaction)。规则行为告诉snort当发现匹配的数据包时,应该如何处理。在snort中,有五种默认的处理方式:alert、log、pass、activate和dynamic。alert:使用选定的报警方法产生报警信息,并且记录数据包log:记录数据包pass:忽略数据包activate:报警,接着打开其它的dynamic规则dynamic:保持空闲状态,直到被activete规则激活,作为一条log规则你也可以定义自己的规则类型,把它们和一个或者几个输出插件联系在一起。然后你就可以在snort规则中使用这些规则类型了。这个例子将建立一个类型,它将只以tcpmp格式输出日志:ruletypesuspicious{typelogoutputlog_tcpmp:suspocious.log}下面这个例子将建立一个类型,把日志发送到syslog和MySql数据库:ruletyperedalert{typealertoutputalert_syslog:LOG_AUTHLOG_ALERToutputdatabase:log,user=snortdbname=snorthost=localhost}
‘柒’ 如何判断Snort是否工作正常
您好,很高兴为您解答。
在规则集文件(snort.conf)后面添加一些简单的规则:
java">.alertipanyany->anyany(msg:"GotanIPPacket";classtype:not-suspicious;
sid:2000000;rev:1;).alerticmpanyany->anyany(msg:"GotanICMPPacket";classtype:not-suspicious;
sid:2000001;rev:1;).alerticmpanyany->anyany(msg:"ICMPLargeICMPPacket";dsize:>800;
reference:arachnids,246;classtype:bad-unknown;sid:2000499;rev:4;)
前面两个规则分别在捕获任何IP数据包和ICMP数据包的时候产生一个告警。它们在遇到每一个数据包的时候都触发告警,所以在数据流量很大的网络段不适合使用这些规则。最后一个规则是对499号签名ID的拷贝进行修改以放宽产生告警的门限来满足我们的测试目的正常情况下你应该避免放宽告警门限,因为这样会产生很多的误告警。
最后,Snort还有一个测试功能选项(“-T”),它可以轻松地检测到用户批准的配置变更。可以输入命令“snort -c /etc/snort/snort.conf -T”,然后查看输出来判断变化的配置是否工作正常。如果工作正常,Snort将返回0,反之返回1。可以使用下面两条命令来示范一下:在Linux系统下snort -c /etc/snort/snort.conf -T和echo "Return code: $?",Windows系统下snort -c ./Snort.conf -T和echo Return code: %ERRORLEVEL%。
由于通常情况下系统会运行几个Snort的拷贝,所以可以让一个Snort实例进行监视,而在另一个上修改配置并进行测试,一旦配置测试完成以后,就可以停止监视Snort实例,然后立即重新启动Snort来执行改变的配置。
一些老式的规则使用传输控制协议报头标志来判断某个数据包是否属于一个已建立的传输控制协议会话连接。而新式的规则使用“established”关键字来判断不管是哪种规则,都不可能仅仅使用Netcat从线路上提取期望的传输控制协议数据包中的有效载荷,并使用Snort去“检查”这些有效载荷——因为在相应的规则下,这些载荷必须作为已建立的传输控制协议会话的一部分,Snort才能够检查并触发告警。“established”关键字能够有效地减少误告警,但是在测试Snort的时候效果不好,这就是我们使用网间控制报文协议或上面的自定义规则的原因。
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~O(∩_∩)O~
‘捌’ windows下snort怎样启动和退出
假设你的snort.exe位于d:\snort\bin\snort.exe。按以下步骤:
开始——运行——cmd——d:——cd snort\bin——snort
但snort一般都是配合命令来用的,要加一些选项才有效果。如(这里的路径是我电脑上的):
snort -c c:\snort\etc\snort.conf -l c:\snort\logs -d -e -v
如果要结束,可以用Ctrl+c,则退出snort。
说一下,snort轻量级入侵检测方案,在windows下安装、配置、调试成功还是不太容易的。特别是配置和调试,你要有心理准备。