Snort 使用手册,第 1 部分: 安装与配置

来源:互联网 发布:北京中信网络 编辑:程序博客网 时间:2024/05/29 02:30

原文地址:http://www.ibm.com/developerworks/cn/web/wa-snort1/

保护和分析 Web 站点及其流量

Brett McLaughlin, 作家兼编辑, O'Reilly Media Inc.

简介: Web 站点是 Internet 技术中最脆弱也最易受攻击的部分。尝试接触 Snort,它是一款免费、开源的网络入侵防御系统(Network Intrusion Prevention System,NIPS)和网络入侵检测系统(Network Intrusion Detection System,NIDS)工具,用于管理和防御黑客入侵您的 Web 站点、应用程序和支持 Internet 的程序。了解 Snort 能够如何帮助保护您的站点,分析您的网络的真实情况。学习本文之后,您将懂得利用 Snort 提供的某些高级入侵检测,并根据 Snort 提供的信息来优化您的站点和网络。

本文的标签:  snort



安全性是重中之重

假设您已经付出了几个月乃至几年的时间来学习最热门的 Web 技术。您阅读了 developerWorks 的文章,购买了相关图书,在您的 Mac OS X 终端和 Windows® shell 上进行了试验。您已经设法构建了一个非常出色的约有 100 个页面的 Web 应用程序 ——— 有一部分是静态 HTML,还有一部分由 PHP 脚本生成。您已经开始添加某些 Ajax 技术和特效,使您的站点更具交互性,更具响应能力。您正处于 Web 编程世界的巅峰。

然而某一天早上醒来之后,您突然发现站点上全是某个与您毫无相关的站点的全页横幅广告。此外,您的购物车也慢得跟蜗牛一样,因为数千个无用数据包正在冲击您的 Web 站点,这也使客户烦恼和愤怒。

尽管听起来很有戏剧性,但大多数认真的 Web 开发人都知道有些人已经遇到过类似的场景,或者自己亲身经历过这样的场景。无论您的站点或应用程序有多出色,只要未得到周全的保护,即便是相当成功的,也会成为攻击的目标。无论是十二岁的顽童,还是作为商业间谍的专业黑客,Web 站点都是非常脆弱的,比其他类型的应用程序更容易受到攻击。只要每个月支付 20 美元(或者掌握一点接线技巧),任何人都可以随意访问 Internet。您的任务是保护站点,而不仅仅是开发站点。

developerWorks Ajax 资源中心
请访问 Ajax 资源中心,这是有关开发 Ajax 应用程序所需的免费工具、代码和信息的一站式中心。由 Ajax 专家 Jack Herrington 主持的活跃 Ajax 社区论坛 也许可以帮助您解答疑问。

安全性不是他人的责任

现在,您可能在受挫地摇着头,想着:“在办公大厅另一端那个人” 负责处理安全性。您可能认为,处理安全性是那个人 的责任。尽管从理论上来说,这是正确的。但从实践角度来看,则并非如此。如果您未执行基本的入侵检测(以及防御)就将站点托付给他人,那么站点出现问题的话,就可能造成很大损失。

并非所有开发人员都是安全专家,但所有开发人员都应该 了解足够多的知识,执行某些基本的网络和流量分析,并在其应用程序内构建基本的安全性。在最糟糕的情况下,开发人员也应该把所需要的安全性告诉安全技术人员,从而确保其站点受到了保护。毫无疑问,由于您是 开发人员,安全性也就是您的 工作的一部分。

基本安全性并不困难

掌握 OSI 网络模型、了解 TCP/IP 的所有方面、每天钻研两次信息包,这些任务都困难得令人沮丧,但掌握入侵检测和防御(稍后我将更详细地定义这些术语)的基础知识并不困难。通过这篇文章以及不久之后即将推出的第二部分,您将成为一名合格的安全性管理者,能够运用安全性的语言,能够发现应用程序中正在发生什么,而无需排队等候 IS 或 IT 处理。

因此,请关闭您喜爱的 IDE(至少将其最小化),启动终端或 shell,花几个小时钻研安全性。您不会后悔的,这将使您的应用程序和为这些应用程序付钱的客户更加顺利。

Snort:一种入侵检测工具

对于大多数系统和网络管理员来说,Snort 是一种常见的、熟悉的工具。遗憾的是,Web 程序员并不这样认为。如果提到 Snort,他们就将它与 tracerouteipconfig 等技术混同起来,认为那不是 Web 开发人员应该管的。

然而,Snort 绝不仅仅是一种管理员的工具。它是一种入侵检测系统 —— 而不仅仅是工具。尽管主要通过命令行使用,但 Web 程序员以及管理员也可轻松访问它。它是开源的,也就是说,它是免费的,与大多数开源工具不同,它得到了非常完善的维护。有着全面的文档(包括在线形式和图书形式,请参见参考资料 中提供的链接),在您阅读本文(或许是本系列的下一期)时,您将与众多网络和安全性管理员一样熟悉 Snort。

那么究竟什么是入侵检测系统?

今天开放网络的数量达到历史高峰。内部网依然很常见,但可通过其他方式公开访问的站点中受保护的部分更加常见。对于企业黑客来说,要做的工作并不是很复杂。他们不必再去尝试潜入网络并找到毫不了解的域或网络,只需进入自己了解的某个网络的一部分即可。

入侵检测将识别对网络的非常规访问;这种访问与以不当的方式访问 Web 页面一样简单(或许是受保护的管理表单或 shell 对 Web 站点的整个根目录的访问)。另一方面,入侵可能非常复杂,例如更改 DNS 表,使得对一个站点的请求权不重定向到其他由黑客控制的域中,或使用一个更加随意的文件来替代 Apache Web 服务器上的 .htaccess 文件,允许黑客添加、删除和更改用户信息 —— 包括密码在内。

当然,检测部分的核心就是识别并防止这种情况发生。因此,谈论入侵检测的工具或系统时,内容涉及到来自 Cisco 的高端专业防火墙和简单的 Snort 安装等等。并非有很多组织能够为高端硬件投入大量资金,因此像 Snort 这样的开源应用程序非常适合实施基本的入侵检测,而带来的费用和麻烦较少。

您确信这是我的问题?

确实,入侵检测和 Snort 的使用都超越了 Web 站点本身,延伸为更广泛的网络安全问题。作为 Web 开发人员,没有必要成为 Snort 专家,也没有必要将 20% 的 Web 开发时间投入到入侵检测的工作之中。出色的面向开发人员的入侵检测旨在通过最少的时间获得最大的收益。即每次修订 Web 站点时都花点时间,为您的站点防止大多数攻击。

获得 Snort

现在,您已经获得了 Snort?首先使用 Web 浏览器访问 Snort 的 Web 站点(参见 参考资料)。左侧有一个很显眼的 “GET SNORT” 链接,就在那只大鼻子猪的下方。(严格来说,Snort 的徽标就是一头大鼻子粉红色小猪,似乎在喷鼻息)。在本文撰写之时,最新的可付诸生产的版本是 2.8。本文的所有内容都同样适用于 Snort 的 2.x 版本,只需进行少许调整,甚至完全不需要调整。

如果您使用的是 Linux® 或 Windows,可以下载二进制文件。单击生产文件列表下的 “Click to view binaries >>” 链接即可下载这些文件。

  • 如果您使用的是 Windows,首先单击二进制文件的链接,随后单击 win32/ 链接。您将看到一个 .exe 文件,名为 Snort_2_8_0_2_installer.exe,单击即可开始下载 Snort。
  • 对于 Linux,选择二进制文件链接,然后单击 linux/。您可以在几个 RPM 中做出选择,有些 RPM 带有对 MySQL 和 PostreSQL 的预置支持。选择所需 RPM,这样就准备完毕了。

如果您希望专研得深入一些,或者如果您使用的不是 Windows、Linux 系统(如 Mac OS X),则应从主下载链接中选择下载 GZipped TAR 文件,其名称类似于 snort-2.8.0.2.tar.gz(如果在本文撰写发表之后,发布的版本出现变化,具体文件名可能会略有不同)。此文件是 Snort 的源代码,您可以通过此源代码为您的特定平台进行生成。

通过源代码安装 Snort

有三种基本安装类型:

  • 在 UNIX® 类型的平台上(UNIX、Linux、Mac OS X、Cygwin)通过源代码安装
  • 在 Linux 上通过 RPM 安装
  • 通过 Windows .exe 安装程序进行安装

如果您正在使用 UNIX 类型的平台,则可通过源代码生成 Snort。这是最灵活的一种选项,能够确保专为您的系统生成 Snort。这种方法要稍微多花一些功夫,也有一些命令行或终端体验,您很有可能能够顺利完成安装。

Snort 需要一些二进制文件,尤其是通过源代码安装时。因此,在开始处理 Snort 包本身之前,应准备好这些二进制文件。

Windows 用户,继续使用二进制文件

通过源代码安装 Snort 并不困难,它非常适合命令行环境,但需要使用 C 编译器和众多二进制文件。即便您已经在自己的 Windows 计算机上安装了 Cygwin,使用 GUI 安装程式来使 Snort 准备好正常运行也是非常简单的。如果您要访问 Mac OS X 或 Linux 计算机,那么就应该选择通过源代码进行安装,但若您正在保护一个 Windows 组件(假设是 Internet Information Server),那么就不要引入不必要的麻烦。

在 Mac OS X 上安装 C 编译器

要通过源代码安装 Snort,您需要使用 C 编译器。大多数 Linux 和 UNIX 平台都提供了一个 C 编译器,名为 gcc,因此无需进行额外的处理。对于 Mac OS X 用户,gcc 编译器在默认情况下不会安装。

要获得用于 Mac OS X 的 gcc,请访问 Apple Developer Connection(参见 参考资料),登录并选择 Downloads。您将在页面右侧看到许多分类。选择 Developer Tools,然后查找 Xcode,下载用于 Tiger 或 Mac OS X 的更早期版本(即 10.4.x 或更早的版本)的 Xcode 2.5 的磁盘镜像;如果您目前使用的是 Leopard(10.5.x 或更新版本),请选择 Xcode 3.0。要下载的文件都很大,绝不仅仅是一个 C 编译器,因此请耐心等待下载完成。

最后,打开磁盘镜像,浏览 Installer 文件夹。运行安装程序,按提示完成各个步骤即可。为了确定您已经成功安装了 gcc,运行命令gcc 即可:

[bdm0509:~/Desktop] gccpowerpc-apple-darwin8-gcc-4.0.1: no input files

这是一个错误(您并未给 gcc 提供任何需要编译的内容),但它指出了您的系统应该安装编译器。在 UNIX、Linux、Solaris 或 Cygwin on Windows 上也会获得类似的响应。

添加 PCRE 支持

Snort 需要 Perl Compatible Regular Expressions,也就是 PCRE。您可以在线免费下载该库(参见 参考资料 部分),它可用于多种平台。将 .tar.gz 文件解压缩到一个目录中,切换到此目录:

[bdm0509:~/Desktop] tar xzf pcre-7.6.tar.gz [bdm0509:~/Desktop] cd pcre-7.6

现在,通过 configure 脚本配置此安装(稍后对 Snort 也要进行相同的处理)。结果如清单 1 所示。


清单 1. 为安装配置 PCRE 包
                [bdm0509:~/Desktop/pcre-7.6] ./configurechecking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yeschecking for a thread-safe mkdir -p... ./install-sh -c -dchecking for gawk... nochecking for mawk... nochecking for nawk... no...Lots more output here......config.status: executing script-chmod commandsconfig.status: executing delete-old-chartables commandspcre-7.6 configuration summary:    Install prefix .................. : /usr/local    C preprocessor .................. : gcc -E    C compiler ...................... : gcc    C++ preprocessor ................ : g++ -E    C++ compiler .................... : g++    Linker .......................... : /usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld    C preprocessor flags ............ :     C compiler flags ................ : -O2    C++ compiler flags .............. : -O2    Linker flags .................... :     Extra libraries ................. :     Build C++ library ............... : yes    Enable UTF-8 support ............ : no    Unicode properties .............. : no    Newline char/sequence ........... : lf    \R matches only ANYCRLF ......... : no    EBCDIC coding ................... : no    Rebuild char tables ............. : no    Use stack recursion ............. : yes    POSIX mem threshold ............. : 10    Internal link size .............. : 2    Match limit ..................... : 10000000    Match limit recursion ........... : MATCH_LIMIT    Build shared libs ............... : yes    Build static libs ............... : yes    Link pcregrep with libz ......... : no    Link pcregrep with libbz2 ....... : no    Link pcretest with libreadline .. : no

接下来您只需要完成用于生成和编译代码的程序,然后将其安装到系统恰当的位置上即可。大多数程序、工具和实用工具(包括 PCRE 和 Snort)都允许您通过一个命令完成所有这些步骤:make install。但在执行这条命令之前,您应作为 root 用户登录或使用sudo 命令。Snort 和 PCRE 等大多数软件包都需要写入受保护的目录,而普通用户通常无法访问这样的目录。使用 root 用户的权限或sudo 命令就能顺利完成。您应看到如清单 2 所示的结果。


清单 2. 安装 PCRE(使用 sudo)
                [bdm0509:~/Desktop/pcre-7.6] sudo make installPassword:test -z "/usr/local/lib" || ./install-sh -c -d "/usr/local/lib" /bin/sh ./libtool --mode=install /usr/bin/install -c  'libpcre.la'      '/usr/local/lib/libpcre.la'/usr/bin/install -c &.libs/libpcre.0.0.1.dylib /usr/local/lib/libpcre.0.0.1.dylib(cd /usr/local/lib && { ln -s -f libpcre.0.0.1.dylib libpcre.0.dylib ||      { rm -f libpcre.0.dylib && ln -s libpcre.0.0.1.dylib libpcre.0.dylib; }; })(cd /usr/local/lib && { ln -s -f libpcre.0.0.1.dylib libpcre.dylib ||      { rm -f libpcre.dylib && ln -s libpcre.0.0.1.dylib libpcre.dylib; }; })/usr/bin/install -c .libs/libpcre.lai /usr/local/lib/libpcre.la/usr/bin/install -c .libs/libpcre.a /usr/local/lib/libpcre.achmod 644 /usr/local/lib/libpcre.aranlib /usr/local/lib/libpcre.a----------------------------------------------------------------------Libraries have been installed in:   /usr/local/lib...Lots more output here......test -z "/usr/local/include" || ./install-sh -c -d "/usr/local/include" /usr/bin/install -c -m 644 'pcre.h' '/usr/local/include/pcre.h' /usr/bin/install -c -m 644 'pcrecpparg.h' '/usr/local/include/pcrecpparg.h' /usr/bin/install -c -m 644 'pcre_stringpiece.h'      '/usr/local/include/pcre_stringpiece.h'test -z "/usr/local/lib/pkgconfig" || ./install-sh -c -d "/usr/local/lib/pkgconfig" /usr/bin/install -c -m 644 'libpcre.pc' '/usr/local/lib/pkgconfig/libpcre.pc' /usr/bin/install -c -m 644 'libpcrecpp.pc' '/usr/local/lib/pkgconfig/libpcrecpp.pc'

有了这些库和工具,您就可以转向核心的 Snort 配置和安装了。

配置 Snort

下载了 Snort 源代码的 .tar.gz 文件之后,将其解压缩到一个便于访问的目录中。可以使用这样的命令:

[bdm0509:~/Desktop] tar xzf snort-2.8.0.2.tar.gz

在 Mac OS X 中,也可以双击文件,由 GUI 解压工具来处理解压缩的工作。您将获得一个类似于 snort-2.8.0.2 的文件夹,内容应如清单 3 所示。


清单 3. Snort 安装文件夹的目录列表
                [bdm0509:~/Desktop/snort-2.8.0.2] lsCOPYINGChangeLogLICENSEMakefile.amMakefile.inRELEASE.NOTESaclocal.m4config.guessconfig.h.inconfig.subconfigureconfigure.incontribdepcompdocetcinstall-shltmain.shm4missingmkinstalldirspreproc_rulesrpmschemassnort.8srctemplatesverstuff.plylwrap

现在,切换到刚刚创建的目录。运行 configure,这是一个脚本命令,尝试为您自动配置安装。您的输出应如清单 4 所示。


清单 4. 为安装配置 Snort 包
                [bdm0509:~/Desktop/snort-2.8.0.2] ./configurechecking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yeschecking for a thread-safe mkdir -p... ./install-sh -c -dchecking for gawk... nochecking for mawk... nochecking for nawk... nochecking for awk... awkchecking whether make sets $(MAKE)... yeschecking whether to enable maintainer-specific    portions of Makefiles... nochecking for style of include used by make... GNUchecking for gcc... gcc...lots more output......config.status: creating doc/Makefileconfig.status: creating contrib/Makefileconfig.status: creating schemas/Makefileconfig.status: creating rpm/Makefileconfig.status: creating preproc_rules/Makefileconfig.status: creating m4/Makefileconfig.status: creating etc/Makefileconfig.status: creating templates/Makefileconfig.status: creating src/win32/Makefileconfig.status: creating config.hconfig.status: executing depfiles commands

在您的系统上安装 Snort

在安装了 PCRE 之后,下一步就是:再次运行 make install,同样以 root 用户的身份或使用 sudo 命令运行。您的输出应如清单 5 所示。


清单 5. 在 Snort 目录上运行 make install
                [bdm0509:~/Desktop/snort-2.8.0.2] sudo make installPassword:Making install in srcMaking install in sfutilgcc -DHAVE_CONFIG_H -I. -I../.. -I../.. -I../../src -I../../src/sfutil   -I/sw/include -I../../src/output-plugins -I../../src/detection-plugins   -I../../src/dynamic-plugins -I../../src/preprocessors   -I../../src/preprocessors/flow -I../../src/preprocessors/portscan    -I../../src/preprocessors/flow/int-snort  -I../../src/preprocessors/HttpInspect/include   -I../../src/preprocessors/Stream5 -I../../src/target-based  -I/usr/local/include   -fno-strict-aliasing  -g -O2 -Wall -DDYNAMIC_PLUGIN -fno-strict-aliasing   -c sfghash.c...Lots more output......Making install in preproc_rulesmake[2]: Nothing to be done for `install-exec-am'.make[2]: Nothing to be done for `install-data-am'.make[2]: Nothing to be done for `install-exec-am'.test -z "/usr/local/share/man/man8" || ./install-sh -c -d "/usr/local/share/man/man8" /usr/bin/install -c -m 644 './snort.8' '/usr/local/share/man/man8/snort.8'

如果在运行 configuremake 的解压缩目录中未看到很多变化,也不必担心。这里的大多数工作都是在系统用于二进制文件、库和可执行文件的目录中完成的。

在 Linux 上通过 RPM 安装 Snort

RPM 表示 RPM Package Manager。(没错,这个缩写实际上是循环的。并不是很有意义,但符合事实。)RPM on Linux 是可以轻松安装的软件包,因为 RPM 支持是市面上所有 Linux 发布版的核心。从 Snort Web 站点下载了一个 RPM 之后,只需将您下载的文件名作为参数运行rpm 命令即可,如清单 6 所示。


清单 6. 在 Snort RPM 上调用 rpm
                [bdm0509@pegasus]# rpm -ivh snort-2.8.0.2-1.RH5.i386.rpmPreparing...     ################################################ [100%]   1:snort       ################################################ [100%]

ivh 选项代表安装、详尽和井号,它会安装软件包,同时告诉您所有细节(还会为您提供井号状态指标)。在本例中,安装是在 Red Hat 上进行的,但您会在任何 Linux 发布版上看到类似的结果。

与通过源代码安装 Snort 类似,您可能需要作为 root 用户登录来运行此命令,或使用 sudo 命令来作为超级用户安装 RPM。Snort 希望其二进制文件能够置于受保护的目录中,如 /usr/bin、/usr/local/bin,因此标准系统上的安装需要高于大多数普通用户账户的权限。

通过 Windows 二进制安装程序安装 Snort

您下载的 Windows 安装程序的名字应类似于 Snort_2_8_0_2_Installer.exe。运行安装程序,在 Windows 提示时确认您信任该应用程序,接受 Snort 许可协议。

选择数据库支持

您的第一个决定就是希望提供哪种类型的数据库支持。图 1 展示的屏幕允许您在默认设置(即支持 SQL Server 的配置)与支持 Oracle 的配置之间做出选择。


图 1. 选择所需的数据库登录支持
默认情况下,Snort 可以登录到 MySQL 和 ODBC 数据源。

此屏幕上的选项均应用于登录:Snort 在嗅探包时可以登录数据库。(如果您对此感到迷惑,在下文中将得到解释。)如果您不希望登录到数据库,而是希望仅登录到文件,或者希望登录到 MySQL 数据库以及 Microsoft Access 等 ODBC 可访问的数据库,则应选择第一个选项。否则选择用于 SQL Server 或 Oracle 的选项。

选择要安装的组件

接下来是选择要包含在安装之中的组件(参见图 2)。


图 2. 指出您希望安装哪些 Snort 组件
确保四类 Snort 安装组件均已选中

这里有四个选项:Snort 本身、动态模块、文档和模式。没有理由不全部安装,完全安装只需要大约 24 MB 的空间,因此应选中所有组件继续操作。

选择安装目录

默认情况下,Snort 将安装在 C:\Snort 中,如图 3 所示。


图 3. 选择 Snort 安装目录
如果没有信心正确更改此选项,请接受默认安装目录。

这个默认目录是理想的首选目录。因为 Snort 并没有过多的 GUI 组件,它实际上不属于典型的 Windows 应用程序,安装目录也不在 C:\Program Files 之下。除非您能够为 Snort 这样的程序选择标准安装目录,否则应使用默认设置。

安装和关闭

奇怪的是,Snort 并未提供非常有用的 “安装完成” 屏幕。与之不同,您将看到一个已经完成的状态条和一个 Close 按钮(如图 4 所示)。


图 4. 安装在此时已经完成
完成的状态条使您了解 Snort 已经安装。

单击 Close 按钮,您就会看到弹出窗口,表明 Snort(几乎)已经为运行做好了准备(如图 5 所示)。


图 5. Snort 指出一些安装后的任务
您仍然需要安装 WinPcap 并更新一些路径

安装 WinPcap

Snort 明确地告诉您:在 Snort 能够使用之前,还有一些安装工作需要完成。第一项就是 WinPcap。WinPcap 是 Windows Packet Capture Library 的简写,它提供了某种类型的网络访问,而 Snort 的 IDS 和包嗅探功能需要这些访问。请访问 WinPcap 的 Web 站点(参见参考资料),单击Get WinPcap 链接。

选择最新的稳定版本下载,在本文撰写之时,最新版本是 4.0.2。下载包括一个 Windows 安装程序,可双击启动它(如图 6 所示)。


图 6. WinPcap 的安装很简单
WinPcap 是 Snort 的包嗅探功能所必需的。

安装非常简单,只要连续单击 Next 按钮即可。这样,WinPcap 就可随时运行了。

编辑路径

接下来的内容有些偏离主题,至少不是这篇文章关注的主题。Snort 的安装提示您编辑 snort.conf 文件,观察在哪里查找规则和其他配置文件。这非常重要,但应该是我们后面讨论的话题。目前,只要安装好 Snort 和 WinPcap 即可。

但是,这里还有一个步骤,需要处理之后才能继续。您需要将 Snort 可执行文件添加到 PATH 语句之中,它的位置是 C:\Snort\bin\snort.exe(假设您选择的是默认安装目录)。设置的位置与操作系统有关。您需要找到 System Properties 对话框(在 “控制面板” 中或者选择 “控制面板” > “系统”),选择Advanced System Properties,注意观察一个名为 Environment Variables 的按钮或选项卡。

其中有两个框(类似于图 7)。您需要选择上边的框,也就是用户变量,它仅应用于您的用户。(您很可能不希望系统上的所有用户都能运行 Snort,而无视您竭尽全力为某些程序设定的安全性制约。)


图 7. Windows 提供两组环境变量
您需要选择用户变量,而不是系统变量

如果还没有用于 PATH 的项,请选择上方的 New... 按钮。如果您已经有了一个项,则应选择 Edit..。在对话框中,输入PATH 作为变量名,输入 C:\Snort\bin 作为值。图 8 展示了在完成时的效果。


图 8. 创建一个 PATH 变量并在 Snort 的可执行文件中指向它
创建一个 PATH 变量,使您的系统能够运行 Snort。

选择 OK,然后关闭所有对话框。打开命令提示符,键入 snort,您应看到类似于图 9 所示的输出结果。


图 9. 通过命令提示符运行 Snort
确认您的安装可以正常工作。

提示:下文将重复这一步骤,在 运行 Snort 二进制文件 一节中,但如果您使用的是 Windows,那么值得立即学习,因为这些步骤能够纠正与环境变量设置相关的所有问题。

测试安装

在完成安装之后,您需要采取几个步骤,确保 Snort 可在系统上正常运行。一切都很简单,但在每次安装新版本的 Snort 或在新机器上安装 Snort 时都需要执行这些步骤。

运行 Snort 二进制文件

可以执行的最简单的测试就是运行 snort 命令。要开始测试,请切换到机器上的任意随机目录。但为了安全起见,请不要在 Snort 安装目录中执行此命令。您应得到类似于清单 7 所示的输出结果。


清单 7. 测试 Snort 二进制文件
                [bdm0509:~] snort   ,,_     -*> Snort! <*-  o"  )~   Version 2.8.0.2 (Build 75)     ''''    By Martin Roesch & The Snort Team: http://www.snort.org/team.html           (C) Copyright 1998-2007 Sourcefire Inc., et al.           Using PCRE version: 7.6 2008-01-28USAGE: snort [-options] <filter options>Options:   -A         Set alert mode: fast, full, console, test or none  (alert file alerts only)              "unsock" enables UNIX socket logging (experimental).   -b         Log packets in tcpdump format (much faster!)   -B <mask>  Obfuscated IP addresses in alerts and packet dumps using CIDR mask   -c <rules> Use Rules File <rules>   -C         Print out payloads with character data only (no hex)   -d         Dump the Application Layer   -D         Run Snort in background (daemon) mode   -e         Display the second layer header info   -f         Turn off fflush() calls after binary log writes   -F <bpf>   Read BPF filters from file <bpf>   -g <gname> Run snort gid as <gname> group (or gid) after initialization   -G <0xid>  Log Identifier (to uniquely id events for multiple snorts)   -h <hn>    Home network = <hn>   -H         Make hash tables deterministic.   -i <if>    Listen on interface <if>   -I         Add Interface name to alert output   -k <mode>  Checksum mode (all,noip,notcp,noudp,noicmp,none)   -K <mode>  Logging mode (pcap[default],ascii,none)   -l <ld>    Log to directory <ld>   -L <file>  Log to this tcpdump file   -M         Log messages to syslog (not alerts)   -m <umask> Set umask = <umask>   -n <cnt>   Exit after receiving <cnt> packets   -N         Turn off logging (alerts still work)   -o         Change the rule testing order to Pass|Alert|Log   -O         Obfuscate the logged IP addresses   -p         Disable promiscuous mode sniffing   -P <snap>  Set explicit snaplen of packet (default: 1514)   -q         Quiet. Don't show banner and status report   -r <tf>    Read and process tcpdump file <tf>   -R <id>    Include 'id' in snort_intf<id>.pid file name   -s         Log alert messages to syslog   -S <n=v>   Set rules file variable n equal to value v   -t <dir>   Chroots process to <dir> after initialization   -T         Test and report on the current Snort configuration   -u <uname> Run snort uid as <uname> user (or uid) after initialization   -U         Use UTC for timestamps   -v         Be verbose   -V         Show version number   -w         Dump 802.11 management and control frames   -X         Dump the raw packet data starting at the link layer   -y         Include year in timestamp in the alert and log files   -Z <file>  Set the performonitor preprocessor file path and name   -?         Show this information<Filter Options> are standard BPF options, as seen in TCPDumpLongname options and their corresponding single char version   --logid <0xid>                  Same as -G   --perfmon-file <file>           Same as -Z   --pid-path <path>               Specify the path for the Snort PID file   --snaplen <snap>                Same as -P   --help                          Same as -?   --version                       Same as -V   --alert-before-pass             Process alert, drop, sdrop, or reject before pass,                                    default is pass before alert, drop,...   --treat-drop-as-alert           Converts drop, sdrop, and reject rules into alert                                    rules during startup   --process-all-events            Process all queued events (drop, alert,...),                                    default stops after 1st action group   --dynamic-engine-lib <file>     Load a dynamic detection engine   --dynamic-engine-lib-dir <path> Load all dynamic engines from directory   --dynamic-detection-lib <file>  Load a dynamic rules library   --dynamic-detection-lib-dir <path> Load all dynamic rules libraries from                                    directory   --dump-dynamic-rules <path>     Creates stub rule files of all loaded rules libraries   --dynamic-preprocessor-lib <file>  Load a dynamic preprocessor library   --dynamic-preprocessor-lib-dir <path> Load all dynamic preprocessor libraries from                                    directory   --dump-dynamic-preproc-genmsg <path>  Creates gen-msg.map files of all loaded                                    preprocessor libraries   --create-pidfile                Create PID file, even when not in Daemon mode   --nolock-pidfile                Do not try to lock Snort PID file   --disable-inline-initialization Do not perform the IPTables initialization in inline                                    mode.   --loop <count>                  In combination with the -r <tf> option,                                    this will read the tcpdump file continuously                                   for <count> times.  A value of 0 will read the pcap                                    until Snort is killed.ERROR: Uh, you need to tell me to do something...Fatal Error, Quitting..

最后出现了错误,但在这个过程中完成了一些重要的事情:

  1. 它确认了 Snort 二进制文件已正确安装到了您的路径中。这也就是说,您可以从计算机的任何目录运行它。
  2. 它为您提供了关于 Snort 版本及其相关库的重要信息。请注意靠近输出顶端的这段输出内容:
       ,,_     -*> Snort! <*-  o"  )~   Version 2.8.0.2 (Build 75)     ''''    By Martin Roesch & The Snort Team: http://www.snort.org/team.html           (C) Copyright 1998-2007 Sourcefire Inc., et al.           Using PCRE version: 7.6 2008-01-28                    

    这使您可以轻而易举地看到正在运行的 Snort 和 PCRE 的版本。
  3. 它为您提供了可向 Snort 发送的简单命令纲要。

使用 Snort 进行嗅探

您知道,Snort 是一种入侵检测系统,但它是如何检测入侵的呢?Snort(和大多数高端 IDS)都会嗅探 网络流量。嗅探器是一种工具或设备(带有网卡),用于监控计算机之间的网络流量。有些嗅探器是 “第三方”,嗅探外部机器与嗅探器本身之间的流量。也有一些嗅探器会嗅探网络和嗅探器本身所在计算机之间的流量。在下一期的文章中,我们将进一步介绍嗅探,如果您目前对嗅探有不明确的地方,请不要担心。

目前,嗅探是一种简单而有用的方法,能够确保 Snort 已安装且能够正常工作,能够监控网络流量。使用 -v 标记运行 snort 命令,这告知 Snort 嗅探网络流量,将信息输出到控制台。清单 8 展示了在 Mac OS X 机器上运行 snort -v 的输出结果。


清单 8. 使用 Snort 进行嗅探
                [bdm0509:~] snort -vRunning in packet dump mode        --== Initializing Snort ==--Initializing Output Plugins!Verifying Preprocessor Configurations!****** interface device lookup found: en0***Initializing Network Interface en0ERROR: You don't have permission to sniff.Try doing this as root.Fatal Error, Quitting..

是的,这是一个错误,在这里输出有一个重要的目的:Snort 需要广泛的权限来完成大量工作。嗅探是一项基本操作,但毫无疑问,如果没有 root 权限,没有使用sudo 的能力,就很难充分利用 Snort。

尝试相同的命令,但这一次在超级用户的账户下运行。您应看到类似于清单 9 的输出结果。必须使用 Ctrl+C 退出,否则 Snort 将一直运行。


清单 9. 使用 Snort 进行嗅探(成功的结果)
                [bdm0509:~] sudo snort -vPassword:Running in packet dump mode        --== Initializing Snort ==--Initializing Output Plugins!Verifying Preprocessor Configurations!****** interface device lookup found: en0***Initializing Network Interface en0Decoding Ethernet on interface en0        --== Initialization Complete ==--   ,,_     -*> Snort! <*-  o"  )~   Version 2.8.0.2 (Build 75)     ''''    By Martin Roesch & The Snort Team: http://www.snort.org/team.html           (C) Copyright 1998-2007 Sourcefire Inc., et al.           Using PCRE version: 7.6 2008-01-28Not Using PCAP_FRAMES03/31-08:55:12.179192 192.168.1.102:64862 -> 239.255.255.253:427UDP TTL:1 TOS:0x0 ID:10292 IpLen:20 DgmLen:64Len: 36=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:12.179498 192.168.1.102:64863 -> 239.255.255.253:427UDP TTL:1 TOS:0x0 ID:10293 IpLen:20 DgmLen:64Len: 36=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:12.180121 192.168.1.102:64864 -> 239.255.255.253:427UDP TTL:1 TOS:0x0 ID:10294 IpLen:20 DgmLen:64Len: 36=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:12.180278 192.168.1.102:64865 -> 239.255.255.253:427UDP TTL:1 TOS:0x0 ID:10295 IpLen:20 DgmLen:64Len: 36=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:12.247880 192.168.1.102:64866 -> 192.168.1.255:137UDP TTL:64 TOS:0x0 ID:10296 IpLen:20 DgmLen:78Len: 50=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:12.248297 192.168.1.103:137 -> 192.168.1.102:64866UDP TTL:64 TOS:0x0 ID:8075 IpLen:20 DgmLen:90Len: 62=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:12.599248 192.168.1.102:55381 -> 192.168.1.101:139TCP TTL:64 TOS:0x0 ID:10297 IpLen:20 DgmLen:64 DF******S* Seq: 0x42127B5E  Ack: 0x0  Win: 0xFFFF  TcpLen: 44TCP Options (8) => MSS: 1460 NOP WS: 0 NOP NOP TS: 1428368232 0 TCP Options => SackOK EOL ...LOTS more output here...=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:21.976018 0.0.0.0:68 -> 255.255.255.255:67UDP TTL:64 TOS:0x0 ID:48134 IpLen:20 DgmLen:328Len: 300=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:21.976800 ARP who-has 192.168.1.104 tell 192.168.1.103/31-08:55:22.968515 192.168.1.1:67 -> 255.255.255.255:68UDP TTL:150 TOS:0x0 ID:6040 IpLen:20 DgmLen:576Len: 548=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+03/31-08:55:22.977578 ARP who-has 192.168.1.104 tell 192.168.1.104^C*** Caught Int-SignalRun time prior to being shutdown was 14.231224 seconds===============================================================================Packet Wire Totals:   Received:           78   Analyzed:           78 (100.000%)    Dropped:            0 (0.000%)Outstanding:            0 (0.000%)===============================================================================Breakdown by protocol (includes rebuilt packets):      ETH: 78         (100.000%)  ETHdisc: 0          (0.000%)     VLAN: 0          (0.000%)     IPV6: 0          (0.000%)  IP6 EXT: 0          (0.000%)  IP6opts: 0          (0.000%)  IP6disc: 0          (0.000%)      IP4: 71         (91.026%)  IP4disc: 0          (0.000%)    TCP 6: 0          (0.000%)    UDP 6: 0          (0.000%)    ICMP6: 0          (0.000%)  ICMP-IP: 0          (0.000%)      TCP: 57         (73.077%)      UDP: 14         (17.949%)     ICMP: 0          (0.000%)  TCPdisc: 0          (0.000%)  UDPdisc: 0          (0.000%)  ICMPdis: 0          (0.000%)     FRAG: 0          (0.000%)   FRAG 6: 0          (0.000%)      ARP: 3          (3.846%)    EAPOL: 0          (0.000%)  ETHLOOP: 0          (0.000%)      IPX: 0          (0.000%)    OTHER: 4          (5.128%)  DISCARD: 0          (0.000%)InvChkSum: 0          (0.000%)  Upconvt: 0          (0.000%)  Up fail: 0          (0.000%)   S5 G 1: 0          (0.000%)   S5 G 2: 0          (0.000%)    Total: 78        ===============================================================================Action Stats:ALERTS: 0LOGGED: 0PASSED: 0===============================================================================Snort exiting

目前看来,这很可能没有太多意义,但没有关系。在本系列结束前,您将了解更多相关内容。目前,我们的任务是确保 Snort 已正确安装。如果您能够将 Snort 作为嗅探器运行,也就做好了继续使用 Snort 的准备,而不仅仅是向它发送令人迷惑的命令。

但我没有 root 访问权限!

至此为止,您已经了解到,Snort 需要的权限超过大多数普通用户账户的能力。即使您能够说服网络或系统管理员安装 Snort —— 并且为他们没有安装 Snort 而惋惜 —— 但如果没有获得额外的特权,您依然是只利用了 Snort 的部分功能。

然而,在普通的用户账户和 root 用户(或通过 sudo 命令授予的特权)之间仍然存在显著差异。大多数管理员都愿意帮助您缩短一点这个的差距。下面介绍了一种合理的方法,能使您的管理员允许您使用 Snort,并授予您使用 Snort 所需的权限:

安装 Snort

首先,安装 Snort。同样,某些管理员已经使用了 Snort。切记,Snort 不必运行在您希望保护和嗅探的机器之上。例如,您可能在几台服务器上管理几个 Web 站点。如果 Snort 能在所有服务器上运行并访问,并且您能够轻松通过远程登录使用它,这当然更好;但您也可以在您自己的机器上运行 Snort,并将其指向运行站点的服务器,从而获得大量信息。因此,您将能够使用 Snort 在您自己的桌面或笔记本电脑上为所欲为(重申一下,这并不是理想的做法,但至少可以算是朝着正确方向发展的一个步骤)。

如果管理员对您提起 Snort 毫无动情,请为他们推荐本文或 参考资料 中提到的某些 Snort 书籍。如果您能帮助保护他们负责的服务器,那么他们可能会更乐于为您提供所需的更多权限。

确保您可以运行 Snort

下一项优先任务就是确保您能够运行 snort 命令。因为 Snort 安装在 /usr/local/bin 中(默认目录),因此这非常简单,只需为所有用户或您的用户账户开放此目录,或者允许您的用户(或一个可以添加用户账户的组)使用该特定的二进制文件。最好的方法是首先提出最具体的请求。询问您的管理员,他们能否使您的特定用户账户可以运行 /usr/local/bin/snort。

实际上,大多数管理员都有较重的工作压力,往往十分忙碌。他们授予您的权限通常会超过您所要求的权限,但希望您不会提出一些在他们看来十分荒谬的要求,例如为您的账户授予对其负责的服务器上所有重要可执行程序的访问权限。您通常会得到居中的权限,例如进入可访问 Snort 等并不通用的程序的组,但这些程序并不存在像更改用户密码或删除用户账户那样的危险。

确保您能够使用 Snort

遗憾的是,Snort 需要写入大量受限的目录,并且要在其中运行。这也就是说,即便您可以运行 Snort,通常也无法使用它来做任何有生产意义的事情。参考下面的步骤,并坚持阅读本系列文章,我们将提供解决方法。

首先,默认情况下,Snort 所做的许多工作都要在受限目录中完成,它可以请求不受保护的目录。因此,您可以选择使 Snort 登录您已经有权访问的目录,减少部分权限问题。但最终,您依然会看到错误,如清单 10 所示。


清单 10. 权限错误
[bdm0509:~] snort -vRunning in packet dump mode        --== Initializing Snort ==--Initializing Output Plugins!Verifying Preprocessor Configurations!****** interface device lookup found: en0***Initializing Network Interface en0ERROR: You don't have permission to sniff.Try doing this as root.Fatal Error, Quitting..

坏消息是:不存在好的规避方法,它需要通常与 root 用户相关联的权限。但也有好消息:也是这篇文章对 Web 开发人员而不仅仅是系统和网络管理员都有意义 —— 您在本地机器上配置和运行的一切都适用于在生产机器上运行的 Snort。因此,在您生成配置文件时,了解如何记录警报,为 Snort 开发规则,而这一切都在您的本地安装上完成(甚至可能是一台笔记本电脑),这样,您就是在构建一个可在任何位置检测入侵的系统。

虽然大多数管理员不会允许您自由支配,但许多管理员会准许您为他们提供脚本和规则文件(在下一期的文章中,我们将进一步介绍规则),由他们来替您运行 —— 往往是在您小心谨慎的时候。这是最好的情况吗?或许不是,但仍然会提供站点保护,这也是底线。

使日志和警报通过邮件发送给您

对于大多数 IDS 和管理员来说,最遗憾的事实莫过于常常发现很多问题,也忽略了很多问题。管理员有繁重的工作,即便您已经很好地设置了 Snort,为它提供了可靠的规则,仍然不代表您将得到一个安全的系统。大多数入侵都需要操作。因而,如果有可能,您应该要求管理员通过邮件为您发送日志和警报文件,不久之后,您的 Snort 将可以生成此类文件。您可以每周要求一次,作为自动化作业完成,但还可能需要配置 Snort,在问题出现时,自动为您和管理员发送邮件。同样,弄清楚在您的机器上完成此任务的配置,然后将其提交给管理员,帮助管理员完成此工作。

这样,无论您是 root 用户、具有超级用户特权的网络管理员,还是因系统管理员保护过度而为安装 PHP 脚本据理力争的 Web 开发人员,您都将受益于对 Snort 的深入理解。

试用三项功能

至此,您应已得到了可正常工作的 Snort 安装,也对使 Snort 运行(即便在半受限的环境中)有了一些深入的理解。在本文结束之前,我们有机会来观察和试用 Snort 的三项基本功能。这使您能够为下一篇文章做好准备,并具体了解 Snort 能够为您的系统带来怎样的影响。

Snort 是一种包嗅探器

就是一组格式化的数据。网络不习惯于用较大的数据块或较小的字节来表示数据,而习惯于以包为单位。包不仅提供了数据,还提供了关于数据的简单信息。这允许包的发送方表明所发送的数据类型,也使包的接收方能够在研究数据本身之前对包的数据略有认识(称为有效负载)。

我的 IP 地址是什么?

有多种方法可用于确定您的计算机的 IP 地址。大多数 GUI 都提供了以可视化方法查找计算机 IP 地址的手段。Windows 中的网络控制面板提供了相关报告(在 TCP/IP 协议下);在 Mac OS X 上,System Preferences 中的 Network 面板将告诉您 IP 地址。还可利用一些命令。在 Windows 中,从命令行中运行ipconfig。在 Mac OS X 、Linux 和 UNIX 中,ifconfig 的变体将完成此任务。

包嗅探器是一种工具,它会嗅探或调查包。使用 Snort,您可以在包的级别检查网络流量,这允许您查看原始数据,以及包的接收方附加到原始数据之上的信息。这是您使用带有-v 标记的 snort 命令时获得的结果,将 Snort 作为包嗅探器运行时,您会获得三方面的信息:

  1. 关于 Snort 将信息记录到何处及其所检查的网络接口的信息。
  2. Snort 所嗅探的包,发送到指定网络接口,或从指定网络接口发出。
  3. Snort 在本次运行中完成的所有任务的汇总(在您结束嗅探时输出,通常要使用 Ctrl+C 控制)。

在下一篇文章中,您将了解到这些包中究竟有哪些内容,如何开始对这些包进行基本分析。目前,只需思考一下,对于各包来说,所有信息是都是针对该包报告的。这里是一个包的输出结果:

03/31-08:55:12.180121 192.168.1.102:64864 -> 239.255.255.253:427UDP TTL:1 TOS:0x0 ID:10294 IpLen:20 DgmLen:64Len: 36

如果您不确定,可尝试在您自己的机器上嗅探包,使用您自己的 Snort 安装,作为辅助,您还需要查看自己的 IP 地址。这将允许您将尚不确定的内容整理在一起。

Snort 是一种包记录器

包嗅探非常出色,但如您所见,Snort 的包嗅探模式假设您一直关注着显示器,急切地查看数千行网络数据。当然,您已经有了需要设计的站点和需要掌控的世界,所以这显然不理想。通过为 Snort 添加-l 开关,就能告诉它将包记录到您选定的目录中(如清单 11 所示)。


清单 11: 告诉 Snort 在何处记录包
[bdm0509:~/Documents/developerworks/snort_1] sudo snort -l myLogDir/Password:Running in packet logging modeLog directory = myLogDir/        --== Initializing Snort ==--Initializing Output Plugins!Verifying Preprocessor Configurations!****** interface device lookup found: en0***Initializing Network Interface en0Decoding Ethernet on interface en0        --== Initialization Complete ==--   ,,_     -*> Snort! <*-  o"  )~   Version 2.8.0.2 (Build 75)     ''''    By Martin Roesch & The Snort Team: http://www.snort.org/team.html           (C) Copyright 1998-2007 Sourcefire Inc., et al.           Using PCRE version: 7.6 2008-01-28Not Using PCAP_FRAMES

请注意,这条命令在前台启动 Snort;如果此时按下 Ctrl+C,重新调出终端提示符,也就中止了 Snort 的记录。因此,应将 Snort 作为包记录器在一个可最小化、可忽略的窗口中运行,更好的方法是,将其作为长期运行的进程(作为守护进程或系统进程)。

退出此进程时,Snort 会为您提供与前述相同的汇总数据。但也会在您指定的目录中创建一个文件,列举所嗅探过的包:

[bdm0509:~/Documents/developerworks/snort_1] ls myLogDir/snort.log.1206998502

打开这个文件,您将看到 Snort 运行时嗅探过的包的更多具体信息。但务必牢记,如果必须作为超级用户(使用 sudo)或 root 用户运行 Snort,也就必须使用相同的权限打开此文件。

查看该文件,它与上文列出的嗅探器输出略有不同。实际上,它的用处更小 —— 除非您想了解 Snort 如何分析自己的文件。这也是另一篇文章的主题,现在您尝试了使用 Snort、使用命令行版本、包嗅探器,但包记录器的更多内容不在此处赘述。

Snort 是 IDS(或 NIDS)

从根本上来说,包嗅探和包记录(以及对这些记录的分析)都是入侵检测系统(或者说 Snort 的另一种称呼:NIDS,即网络入侵检测系统)的子系统。这是 Snort 最杰出的领域。也是涉猎广泛、讲究技巧的方面。由于入侵的类型不断迅速变化,Snort 有一组规则,您可从 Snort 的站点下载这些规则,它们详细阐述了这些入侵,允许 Snort 观察入侵。规则频繁更改,保证(至少是尝试保证)与最新攻击的各种类型保持一致。

此外,您需要配置 Snort,告诉它在感知到攻击时应采取怎样的措施。这是您此前与之建立良好合作关系的网络和系统管理员出面拯救您的站点的时机……让他们来负责采取措施应对攻击。但如果您能通过提交配置和规则文件来使他们注意到攻击,那么您就已经在这场游戏中占据了领先地位。

如果您耐心不足,或者无法等待尝试将 Snort 作为 IDS 使用,请尝试运行 snort -A,这会将 Snort 切换为警报 模式。您必须付出一定的努力,才能使它正常运作,但在等待下一篇文章发表期间,这是一项不错的 Snort 试验。

结束语

Web 开发不仅仅与 HTML 和 CSS 有关,Web 编程的范畴也远不止 Java™ 代码、C++ 和 PHP。实际上,您要构建的是功能型应用程序。如果用户无法上线、无法从他们喜爱的厂商那里购买商品、无法在当地美术馆中找到最新抽象水彩画的价格,那么您的所有代码都等于零。无论您的编程和设计技能有多么出众,用户都不能 —— 也不会使用遭受过攻击,有着不恰当图片、报价过高或者更低(这对厂商来说,更加糟糕)的购物车的应用程序和 Web 页面。出色的开发人员和设计人员不仅仅是代码写手。他们至少应该参与保护自己的资产,就像好的投资商一样。他们的工作成果正常运行的时间越长,其价值也就越高。

可以证明,Snort 是市面上最好、最易用或许也是最便宜的入侵检测系统。在几分钟内即可完成安装,它易于设置和运行,它十分灵活。从包嗅探、分析一直到向您或管理员发出可能出现入侵的警报,Snort 能够保护您的工作成果,使之免受攻击。目前,您应在至少一台机器上运行 Snort(如果您真正理解了,那么或许应该在几台不同平台的机器上运行),执行一些基本的包嗅探工作。您应该很好奇,这些包中究竟有什么内容,Snort 还允许您做哪些事情。

在等待这些包的具体信息,思考出色的 IDS 应该检测哪些类型的警报并继续试用 Snort 时,这里有一些关于实践的想法。首先,以包嗅探或包分析模式启动 Snort。随后,尝试以下场景:

  • 如果您的机器嗅探包上已经有了一个 Web 服务器,将另一机器上的浏览器指向该 Web 服务器,随意浏览。请注意另一台机器(使用浏览器的机器)的 IP 地址。您在来自 Snort 的包日志或输出中看到了哪些内容?您能否找到 Web 流量?
  • 尝试从另外一台机器远程登录或 FTP 登录到所嗅探的机器。然后您看到了怎样的流量?
  • 在没有 index.html(或 .php、.htm 等)的 Web 服务器上创建目录。在该目录中放置一些文件,允许匿名目录列表。将另外一台机器的浏览器指向该目录。流量(和表示该流量的包)与普通的 HTML 或 PHP 页面是否有差别?有什么样的差别?
  • 使用 Apache .htaccess 文件或您的服务器所提供的内容设置身份验证。从另外一台机器访问受保护的资源。包看上去是怎样的?在成功登录时又是怎样?使用有效凭据而未能成功登录时又是怎样?

这只是一些想法,但能帮助您很好地理解在典型的 Web 服务器请求/响应模型中四处传递的包。试试看您能否确定什么是 “正常” 的流量,什么是不正常的流量。请继续关注下个月的文章,我们将进一步探讨警报、规则等内容,介绍如何避免您的系统遭遇严重的入侵。


参考资料

学习

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。

  • 关于 Snort 的一切都源于 Snort Web 站点。

  • Red Hat Linux 在 利用 Snort 保护您的 Red Hat Linux 系统 方面有一项杰出的特性。或许有几分过时,但基本概念依然适用。

  • 如果您希望利用 Snort 的强大力量,但更倾向于具有专业支持的商业产品,请查看 Sourcefire's IDS,该产品构建于 Snort 的基础之上。

  • developerWorks Web 开发专区 包含大量的 Web 2.0 开发工具和信息。

  • developerWorks Ajax 资源中心 包含不断增加的大量 Ajax 内容以及有用资源,可以让您立即开始开发 Ajax 应用程序。

获得产品和技术

  • Snort 下载主页 提供了所有 Snort 二进制文件和源文件下载。

  • 可从 Apple Developer Connection 下载一个用于 Mac OS X 的 C 编译器。需要使用账户登录,但注册和下载都是免费的。

  • 下载 Perl Compatible Regular Expressions 库。

  • WinPcap 允许 Windows 平台上的 Snort 链路层网络访问。

  • ManagingSecurity with Snort and IDS Tools(Kerry Cox 和 Christopher Gerg;O'Reilly Media, Inc.)提供了更加全面的安全性简介,还包括大量特定于 Snort 的内容,帮您管理您的站点。

  • Snort Cookbook(Angela Orebaugh、Simon Biles 和 Jacob Babbin;O'Reilly Media, Inc.)是一份出色的 Snort 入门资料,指导您执行具体的任务,从基本的安装到高级的入侵检测和网络优化。

讨论

  • developerWorks blog:加入 developerWorks 社区。

关于作者

Brett McLaughlin 的照片

Brett McLaughlin 自从 Logo 时代以来一直从事计算机方面的工作。(还记得那个小三角符号么?)最近几年里,他已成为 Java 和 XML 社区中最著名的作家和程序员之一。他曾在 Nextel Communications 从事复杂企业系统的实现;在 Lutris Technologies 进行实际应用服务器的编写;最近他在 O'Reilly Media, Inc. 继续编写和编辑相关书籍。Brett 即将完成的书Head Rush Ajax将为 Ajax 引入饱受赞誉的创新的 Head First方法。他的上一本书 Java 1.5 Tiger: A Developer's Notebook是第一本可获得的关于最新版本 Java 技术的书籍。而他的名著 Java and XML 仍然是在 Java 语言中使用 XML 技术的权威性著作之一。