| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
snort入侵检测系统优化配置本文比较深入地讨论了snort入侵检测系统(Intrusion Dection System)的体系结构和配置,我针对构建基于snort的入侵检测系统对原文作了一些改动,希望对你部署自己的snort入侵检测系统能够有所帮助:)。 简介 伴随者Internet爆炸式的发展,需要重新审视网络安全问题。防火墙作为一种解决方案得到了广泛的应用。然而这还不够,你还需要入侵检测系统的保护。 本文将讨论综合讨论当前入侵检测系统的不同体系结构。并且会重点介绍开放源码的入侵检测系统的一个安全框架以及配置。 1.使用入侵检测系统的理由 你可能会对是否需要使用入侵检测系统还有疑问,下面是使用IDS的理由,不过还需要你自己决定。: 网络庞大而复杂,并且难以监视。IDS的记录能够帮助你找出网络中潜在的安全问题。 snort是Martin Roesch等人开发的一个IDS工具,基于libpcap库。Martin Roesch本人把snort定位为一个轻量级的入侵检测系统,具有跨平台特征,并且易于配置。然而,它的易于配置特性却值得商榷,因为在1.7版中,它的配置文件语法解析有点问题。不过,在1.8版中,有了很大改进,并加入了一些新的特征。 本文不可能提供一个snort的完整参考,你可以从snort的官方站点http://www.snort.org获得需要的文档。本文将重点介绍snort-1.8的配置。 下图表示snort IDS的基本工作,下一节我将对各曾做详细介绍。 图-1.基本的snort IDS
在这一节我将一步步地讨论snort的设置。首先,我们假想一个非常简单的网络拓扑结构:
不能在入侵检测系统中运行daemon程序。 我们从定义一个你的防火墙配置的所谓port matrix开始,它能够帮助你配置入侵检测系统。这个port matrix如表-1所示: 表-1.Port Matrix Universe : 0.0.0.0/0 : IDS-if = eth0 +------------+---------------------+----------+ eth0: [Aa-Ca] and [Aa-Ac] -> /opt/ids/etc/snort.d/eth0/policyrules/pass.rules 为了帮助理解,我们举例说明。例如:允许tcp intranet 1024:65535 -> 0.0.0.0/0 80方向的报文通过。确切一点说是:允许tcp fw-if0 1024:65535 -> 0.0.0.0/0 80方向的报文通过。这是因为来自intranet的连接经过IP地址伪装(masquerade)获得了防火墙外部接口的IP地址。此外,,tcp Universe 1024:65535 -> dmz-net 80方向的报文也是允许通过的。 如图2所示,在我们的网络上,有一个IDS记录网络数据。以后,我将深入解释这种部署的隐患和问题。现在,我们来看入侵检测系统的配置。为此,我编写了一个脚本,它可以很好地帮助你做一些准备工作。当然,你可以选择自己的配置。 列表-1.预处理脚本 然后,你只要把snort源代码包中的或者从http://www.snort.org得到的规则集复制到/opt/ids/etc/snort.d/idrules目录下就可以了。 下面,我们需要设置配置文件ids.conf。列表-2是eth0接口配置文件的内容,以/opt/ids/etc/snort.d/eth0/ids.conf命名。重复使用以下命令可以为其它的网络接口产生ids.conf配置文件: sed -e ''s/eth0/eth1/g'' /opt/ids/etc/snort.d/eth0/ids.conf >/opt/ids/etc/snort.d/eth1/ids.conf 表-2.ids.conf文件的内容 下面我们对这个配置文件做一些解释。config指令(第6-10行)可以设置一些你需要的选项,而不必通过难以使用的命令行来设置。例如:config show_year将代替snort的-y命令行选项。 ids.conf文件的下一个片段是ruletypes(14-30行)。在这一片段中,你可以定义新的规则类型和新规则类型的新特征。例如:你可以定义一个类型mtype,使snort不但使用tcpdump的格式记录日志,而且还要把报警信息发给syslog。定义一个好的规则类型需要一些技巧,你可能需要阅读snort用户手册(从1.8版开始,源代码包中附带了snort的主要编写者Martin Roesch撰写的snort用户手册)获得更多信息。在这个文件中,我们加入了新的规则类型以提高报警的准确性,并且定义了一个规则类型规则链,对这个规则连做顺序处理,从而减少误报警的发生。然而,你需要注意在一个规则类型中处理顺序并没有给出。以上文件的配置顺序尽量按照图-1中的层次来划分。 下面我们看一下各个规则类型的排序: config order: drop activation dynamic alert pass info deny drop alert alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-CGI w3-msql solaris x86 access"; flags: A+; uricontent: "/bin/shA-cA/usr/openwin"; nocase;reference:cve,CVE-1999-0276; reference:arachnids,211;classtype:attempted-recon;) snort的模式匹配引擎会对报文进行模式匹配,如果命中就会产生报警,写到syslog和tcpdump格式的文件中。 pass info deny deny ip any any -> any any 注意:ip协议类型是snort-1.8版褂梅植际絀DS日志主机表示双向的意思,但是规则中却没有TCP标志。eth0的第一条规则表示: pass tcp $Universe 1024: -> $DMZ 80 (TCP state flags: ALL) 和 你当然不希望这样,而且,如果你希望减少漏报的发生,就必须把它分成三条规则: pass tcp $Universe 1024: -> $DMZ 80 这种设置就比使用一条双向的放行规则好一些。我们不希望从DMZ(非军事区)向外发起连接。 4.1 修改syslog-ng的配置文件 syslog-ng是一个新的日志软件,是传统的syslogd的一个替代产品,比syslogd具有更多的特征,你可以从http://www.balabit.hu/products/syslog-ng/获得其源代码。因为我们可能会使用tcp协议记录日志并且需要在日志文件中保留产生报警的系统的名字,所以我们选择syslog-ng。下面是一个其配置: 列表-3.入侵检测系统的syslog-ng配置文件 同时,我们还需要设置中心日志主机(loghost)的syslog-ng的配置文件: 列表-4.中心日志主机的syslog-ng配置 到此为止,所有的基本配置已经完成。下面我们就可以以精灵模式启动snort在后台运行了: snort -D -i eth0 -c /opt/ids/etc/snort.d/eth0/ids.conf -l /opt/ids/var/log/ids/eth0 最后,我们测试一下我们的配置,你可以使用nmap进行扫描或者连接到WEB服务器发出一个GET请求,触发某条规则引起报警: echo -e "/bin/shA-cA/usr/openwin" | netcat your_web server 80 如果列表-2的http_decode预处理模块生效,下面的连接将引起报警: echo -e "%2fbin%2fsh%41-c%41/usr%2fopenwin" | netcat your_web server 80 5.入侵检测系统的问题 使用入侵检测系统后,你的日志文件将充满扫描企图、误报警以及其它其它无法预测的数据。你应该避免入侵检测系统的一些潜在问题: 速度问题。一个过载的入侵检测系统会导致错误的报警和非正常的模式检测。 而是使用下面的指令代替: GET %2fbin%2fsh%41-c%41/usr%2fopenwin HTTP/1.0 就可能逃过IDS的检测。 翻译后记: 由于水平所限,可能对原文的某些地方无法准确理解,造成一些错误,请原谅。:)
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||