使用Snort构建基于Linux的入侵检测系统
2006-12-29谢冬松
中小学信息技术教育 2006年3期
一个稳定、安全、高效的网络环境,不仅需要有防火墙系统、身份验证、加密传输等传统安保措施,也需要构建入侵检测系统IDS(Intrusion Detection System)进行主动性的侦知。目前,主机采用Linux承载平台运行Snort系统,不愧为中小学校阅网搭建网络IDS的理想解决方案。Snort是由Martin Roesch开发的,基于模式发现技术的IDS系统。它假定所有入侵行为(或手段)都具有特定的模式或特征,因此只要将相关入侵行为的特征写入其检测规则库,就可以用匹配的方法发现。Snort的优点在于它是遵循公共许可证GPL的免费软件,且具有安装配置简便、扩展性好、误报少、反应迅速、可跨多种平台运行等优点。
一、Snort系统的工作流程与体系结构
Snort占用系统资源很少,可以长时间稳定运行。因此,应选用基于Linux系统的主机作为Snort的承载平台。因为Linux系统提供了稳定,高效的网络服务支持,内置TCP/IP协议,它是真正意义上的多任务、多用户操作系统。Linux还具有兼容IEEEPOSIX标准,支持数十种文件系统格式,采用先进的内存管理机制等优点,它的安全性和稳定性优于Windows网络系统。无论从执行效率还是经济角度考虑都是较适宜的选择。
基于SnorL的IDS系统工作流程如右图所示:

1.加载检测规则,调用Libpcap库函数采集数据,该库函数可以为应用程序提供直接从链路层捕获数据包的接口函数,并可以设置数据包的过滤器,来捕获指定的数据。
2.解码抓取来的数据包,按照TCP/IP协议的不同层次将数据包进行解析,为Snort检测引擎准备数据。
3.根据加载的规则依次扫描每个数据包,一旦包内的数据和检测规则产生匹配,则根据规则中的处理策略对其进行处理,不产生规则匹配的数据包被视为正常包而忽略。(Snort对每个被检测的数据包都定义了三种处理方式:报警alert、记录log和忽略pass)。
4.产生告警并记录日志。在缺省安装配置下,系统日志将写入/Var/log/Snort目录中。告警文什写入/Var/log/Snort/alert目录中。
二、Snort检测原理分析
为了能够快速检测IP网络数据包,对检测到的可疑情况做出迅速反应,Snort将规则描述为规则链表结构,链表由表头(包含源端、目的端IP地址、协议、连接端口号)和链表选项(包含如TCP标志位、ICMP代码,有效负载大小,规则内容)组成。这样通过依次过滤Snort规则库中定义的规则,Snort分析每个数据包,一旦发现与规则特征产生匹配的数据包则根据预先定义的方式处理(告警或记录),否则忽略当前分析的数据包,转向下一个继续分析。
Snort广泛支持各种分析和规则匹配,目前能支持的协议类型有TCP协议、UDP协议、IPX协议,ICMP等协议。随着系统软件版本的不断改进,Snort可进行检测的协议种类将不断丰富。需要注意的是,当刚开始使用Snort时,网络管理人员常常不能将检测规则描述得比较完善,此时可以从Snort的站点(WWW.Snort.org)上下载现成的规则库,再根据本单位特有的网络情况,单独定义若干规则向其中添加即可。
Snotrt规则的总体格式分四部分,即为处理动作、协议类型、数据流向、检测端口。例:记录来自任何端口的,目标端口范围在1~1024的UDP数据流,描述为:log udp any any—>192.168.1.0/24 1:1024。
三、Snort系统的安装与运行
Snort对计算机系统软,硬件环境的要求不高,由于要求长期在线,有条件的推荐使用专用服务器(处理器相当于PⅢ及以上配置皆可)运行。系统软件方面,应用比较普遍的微软的Windows 2000Server系列或Linux等网络操作系统都可以安装运行Snort。这里将以Linux系统为例介绍,步骤如下:
可以从Snort的站点获得其源代码或者RPM包。使用源代码安装Snort需要1ibpcap库,可以从ftp://ftp.ee.1b1.gov下载安装。
1.安装RPM包
可以使用下面的命令:(注:1.7为Snort版本号)bash#rpm-Ihv--nodeps Snort-1.7-1.i386.rpm开始解压规则库libpcap包:bash#uncompress libpcap.tar.Zbash#tar xvf libpcap.tar第三步编译libpcap库:bash#./configurebash#make解压Snort—1.7.0.tar.gz:
bash#tar zxvf Snort-1.7.0.tar.gz
进入到其所在目录,编译Snort:
bash#./configure——with-libpcap-includes=/path/to/your/libcap/headers
bash#make
bash#make install
configure脚本还有一些选项:如with-mysql=DIR 支持mysql数据库with-odbc=DIR 支持ODBC数据库-enable-openssl 支持SSL
可以根据自己的实际情况选择这些选项,全部设置完毕后从新引导系统。至此,Snort安装完成。
2.将Snort作为NIDS(网络入侵检测系统)的设置
列出所有Snort选项命令开关,键入bash#Snort-?,系统显示Snort版本信息:
-*Snortl<*-
Version 1.7
By Martin Roesch(roesch@clark.net,WWW.Snort.org)
USAGE:Snort[-options]
Options:(大小写有别,这里只列出常用的参数)
-A(设置报警模式:fast、full、none只是使用报警文件)、unsock(使用Linux套接字记人日志,出于测试阶段)
-a显示ARP(Address Resolution Protocol,地址解析协议)包
-b(日志文件使用tcpdump格式)
-c(使用规则文件rules)
-d(复制应用层)
-D(在后台运行Snort)
-e(显示数据链路层包头信息)
-I(把界面名加入到报警输出界面)
-I(设置目录ld为日志目录)
-N(关闭日志功能,警报功能仍然有效)
-O(把规则测试顺序改为:PassIAlertILog)
-s(把所有警告信息记人syslog)
-u(初始化完成后,把Snort的uid设置为ne)
-X(从链路层开始复制包的数据)
-?(显示帮助信息)
启动IDS模式,将Snort作为网络入侵检测系统:/Snort—dev-I./log-h 192.168.1.O/24-c Snort.
Snort.conf是规则集文件。Snort会对整个包和规则集进行匹配,发现这样的包就采用取相应的行动。如果不指定输出目录,Snort就输出到/Var/log/Snort目录。lOg/Snort目录。
或键入:
/Snort-d-h 192.168.1.O/24-I./log-C Snort.conf
这是使用Snort作为网络入侵检测系统基本形式。为省略影响系统长期运行的不必要功能开关,日志记录符合规则的包,以ASCII码形式保存在层次日录结构中。Snort扫描数据流,将检测到的与规则库产生相应匹配的信息输出(告警),告警的配置方式较多,这里只给出简例:用户可参考有关资料根据实际网络环境自行设置。
默认方式的输入配置Snort将报警发给syslog:
/Snort-C Snort.conf-l./Iog-s-h 192.168.1.O/24大程度地避免可能遭受的攻击和侵害,需要科技人员不断总结和交流经验,努力改进管理方法和手段,共同为建立一个安全、稳定、高效的网络运行环境付出不懈的努力。
参考文献
[1]Martin Roesch Snort -Lightweogjt IntrusionDetectio for Networks :Snort.org.
[2]李洋.使用Snort搭建安全的Linux服务器[J].计算机世界。2005,