Snort是一个著名的免费而又功能强大的轻量级入侵检测系统,具有使用简便、轻量级以及封堵效率高等特点,本文从实用操作的角度介绍了如何用Snort保证上网主机的安全。
入侵检测技术是继“防“
火墙”、“数据加密”等传统安全保护措施之后的新一代安全保障技术。它对计算机和网络资源上的恶意使用行为进行识别和响应,它不仅检测来自外部的入侵行为,同时也监督内部用户的未授权活动。而且,随着网络服务器对安全性要求的不断增大,如何在Linux环境下抵御黑客入侵和攻击,切实保证服务器的安全具有重大的实践意义。
Snort是一个强大的轻量级的免费网络入侵检测系统,其特点如下:
1.轻量级的网络入侵检测系统:Snort虽然功能强大,但其代码非常简洁、短小,源代码压缩包只有1.8M多。
2.Snort的可移植性好:Snort的跨平台性能极佳,目前已经支持类Unix下Linux、Solaris、Freebsd、Irix、HP-ux、微软的Windows2000等服务器系统。
3.Snort的功能非常强大
Snort具有实时流量分析和日志IP网络数据包的能力,能够快速检测网络攻击,及时发出报警。利用XML插件,Snort可以使用SNML(简单网络标志语言)把日志放到一个文件或者适时报警。Snort能够进行协议分析和内容的搜索/匹配,现在Snort能分析的协议有TCP、UDP、ICMP,将来可能增加对ARP、IPX等协议的支持。它能够检测多种方式的攻击和探测,例如缓冲区溢出、秘密端口扫描、CGI攻击、SMB探测、探测存在系统指纹特征的企图等。Snort的日志格式既可以是tcpdump式的二进制格式,也可以解码成ASCⅡ字符格式,更加便于用户尤其是新手检查。使用数据库输出插件,Snort可以把日志记录进数据库。使用TCP流插件,Snort可以对TCP包进行重组。
4.Snort的扩展性较好,对于新的攻击反应迅速
作为一个轻量级的网络入侵检测系统,Snort有足够的扩展能力。它使用一种简单的规则描述语言,最基本的规则只是包含四个域:处理动作、协议、方向、注意的端口,例如“log tcp any any-> 192.168.0.1/24 79”。发现新的攻击后,可以很快根据“bugtraq”邮件列表,找出特征码,写出检测规则。因为规则语言简单,所以容易上手,节省人员的培训费用。
5.遵循公共通用许可证GPL:Snort遵循通用公共许可证GPL,所以只要遵守GPL ,任何组织和个人都可以自由使用。
Snort的体系结构
包解码 Snort的包解码支持以太网和SLIP及PPP媒体介质。包解码所做的工作就是为探测引擎准备数据,其功能是捕获网络传输数据并按照TCP/IP协议的不同层次将数据包进行解析。Snort利用libpcap库函数进行数据采集, 该库函数可以为应用程序提供直接从链路层捕获数据包的接口函数,并可以设置数据包过滤器来捕获指定的数据。网络数据采集和解析机制是整个NIDS实现的基础,其中最关键的是要保证高速和低的丢包率,这不仅仅取决于软件的效率还同硬件的处理能力相关。对于解析机制来说,能够处理数据包的类型的多样性也同样非常重要。
探测引擎 探测引擎是Snort的心脏,它主要负责的工作是:按照启动时加载的规则,对每个数据包进行分析。探测引擎将Snort规则分解为链表头和链表选项进行引用。链表头由诸如源/目标IP地址及端口号这些普通信息标识,链表选项定义一些更详细的信息如TCP 标志、ICMP代码类型、特定的内容类型、负载容量等。探测引擎按照Snort规则文件中定义的规则依次分析每个数据包。与数据包中数据匹配的第一条规则触发在规则定义中指定的动作,凡是与规则不匹配的数据包都会被丢弃。
日志记录/告警系统 告警和日志是两个分离的子系统。日志允许将包解码收集到的信息以可读的格式或以tcpdump格式记录下来。可以配置告警系统,使其将告警信息发送到syslog、flat文件、Unix套接字或数据库中。在进行测试或在入侵学习过程当中,还可以关掉告警。缺省情况下,所有的日志将会写到/var/log/Snort文件夹中,告警文件将会写到/var/log/Snort/alerts文件中。Snort的数据包记录器子系统主要提供了如下方式:“Fast Model”,采取tcpdump的格式记录信息 ;“Readable Model”,按照协议格式记录,易于用户查看;“Alert to syslog”,向syslog发送报警信息;“Alert to text file”,以明文形式记录报警信息。
值得提出的是,Snort考虑到用户需要高性能的时候,即网络数据流量非常大,可以将数据包信息进行压缩从而实现快速报警。