当前位置:Linux教程 - Linux - 构建基于snort的入侵检测系统

构建基于snort的入侵检测系统



        

    nixe0n



    简介
    1.安装准备



    1.1.获得snort源代码
    1.2.快速安装
    1.3.configure脚本功能选项简介
    1.4.关于本文的几个注意事项


    2.为snort提供数据库支持


    2.1.PostgreSQL数据库的编译安装
    2.2.编译snort数据库日志插件
    2.3.配置snort数据库输出插件


    3.安装分析员控制台ACID

    3.1.需要的软件
    3.2.支持软件的安装

    3.2.1.安装支持PHP的Apache WEB服务器
    3.2.2.安装ADODB和PHPlot

    3.3.安装ACID
    3.4.系统配置

    4.安装实时日志监视程序razoback

    4.1.需要的支持
    4.2.安装


    5.配置snort
    6.启动系统
    总结



    简介


    snort是一个轻量级的入侵检测系统,它具有截取网络数据报文,进行网络数据实时分析、报警,以及日志的能力。



    snort的报文截取代码是基于libpcap库的,继承了libpcap库的平台兼容性。
    它能够进行协议分析,内容搜索/匹配,能够用来检测各种攻击和探测,例如:缓冲区溢出、隐秘端口扫描、CGI攻击、SMB探测、OS指纹特征检测等等。
    snort使用一种灵活的规则语言来描述网络数据报文,因此可以对新的攻击作出快速地翻译。
    snort具有实时报警能力。可以将报警信息写到syslog、指定的文件、UNIX套接字或者使用WinPopup消息。
    snort具有良好的扩展能力。它支持插件体系,可以通过其定义的接口,很方便地加入新的功能。
    snort还能够记录网络数据,其日志文件可以是tcpdump格式,也可以是解码的ASCII格式。


    本文将介绍一个使用snort、PostgreSQL数据库、Apache、PHP、ACID和razorback搭建入侵检测系统的解决方案。


    1.安装准备


    1.1.获得snort源代码

    用户可以从snort的官方站点http://www.snort.org获得其源代码或者RPM包。使用源代码安装snort需要libpcap库,可以从ftp://ftp.ee.lbl.gov下载。如果用户使用某些插件,还可能需要其它的库,将在下面做详细介绍。

    1.2.快速安装


    安装RPM包


    rpm -ihv --nodeps snort-1.8.1-RELEASE.i386.rpm



    从源代码的快速安装

    你如果不需要一些额外的功能,可以使用快速安装,只要按照以下步骤做就可以了:

    1) 确认libpcap包已经安装完毕。
    2) ./configure
    3) make
    4) make install

    然后,你就可以使用snort了,可以参考本站的相关文章。

    1.3.configure脚本功能选项简介

    默认的功能可能无法满足你的要求,因此你可以把一些其它功能加入到你的snort二进制代码中。configure脚本提供了一些选项。通过这些选项,你可以在编译时,将一些额外的功能编译到二进制目标中。下面对这些选项做一个简要的介绍,其中一些重要的选项,例如:数据库支持、FlexResp将有专门的章节进行讨论。而一些标准的configure选项如:--prefix,此处也将不再涉及。


    --enable-smbalerts


    使SMB报警代码生效。不过,这项功能有安全隐患,需要谨慎使用。



    --enable-flexresp


    把灵活反应(Flexible Response)代码编译连接到snort二进制目标文件。它能够使snort在IP层主动断开恶意连接。这项功能需要LibNet库,可以从http://www.packetfactory.net下载其源代码。



    --with-postgresql=DIR


    提供PostgreSQL数据库支持。



    --with-libpcap-includes=DIR


    指定libpcap库头文件的位置。



    --with-libpcap-libraries=DIR


    指定libpcap静态库的位置。



    --with-mysql=DIR


    指定mysql数据库的路径。



    --with-oracle=DIR


    指定oracle数据库的位置。



    --with-openssl=DIR


    指定openssl的位置。



    --with-odbc=DIR


    提供ODBC数据库支持



    --with-oracle=DIR


    提供Oracle数据库支持



    --with-snmp


    提供SNMP协议支持,通过snortSnmp插件,snort能够向网络管理系统(Network Management System)发出snmp报警。这项功能需要ucd-snmp软件包的支持,这个包可以从http://net-snmp.sourceforge.net下载。



    --enable-idmef


    把IDMEF XML插件连接到snort二进制代码中。这个插件需要libidmef、libxml2和libntp库,可以分别从以下地址下载:


    libidmef http://www.silicondefense.com/idwg/libidmef
    libxml2(>=2.3.7) http://www.xmlsoft.org
    libntp http:/www.ntp.org


    这些库的位置由--with-libxml2-includes=DIR、--with-libxml2-libraries=DIR、--with-libntp-libraries=DIR、--with-libidmef-includes=DIR和--with-libidmef-libraries=DIR等功能选项指定。


    1.4.关于本文的几个注意事项

    本系统由snort、PostgreSQL数据库、PHP、Apacke、ACID以及其它一些辅助软件组成,所有的软件都将安装在/opt/ids/目录下。因此,在配置完成后,你需要将/opt/ids/bin加入到PATH环境变量中,把/opt/ids/lib/加入到/etc/ld.so.config文件,然后执行ldconfig -v或者LD_LIBRARY_PATH环境变量。



    2.为snort提供数据库支持


    从1.6.3版开始,snort加入了对数据库的支持,通过相应的插件,你可以将snort日志信息记录到数据库中。snort当前支持的数据库包括:PostSQL、MySQL、unixODBC和Oracle。snort还可以通过unixODBC向具有ODBC驱动的数据库记录日志信息,例如DB2、Informix等。

    本文将使用PostgreSQL数据库作为snort记录日志信息的数据库(纯粹属于个人偏好,也可以使用MySQL)。同时,在本节中还会对一些相关的程序做一些介绍,这些程序可以在snort源代码的contrib目录下找到。

    2.1.PostgreSQL数据库的编译安装


    获得软件包

    你可以从PostgreSQL的官方站点获得其源代码或者RPM包。


    安装RPM包


    #rpm -ihv postgresql-xxx.rpm
    #rpm -ihv postgresql-devel-xxx.rpm



    源代码安装


    #tar zxvf postgresql-7.1.x.tar.gz
    #cd postgresql-7.1.x
    #./configure --prefix=/opt/ids --disable-debug
    #make
    #make install



    建立数据库

    建立一个postgresql数据库非常简单。


    初始化数据库


    #mkdir -p /opt/ids/var/pgsql
    #chown ids pgsql
    [ids@localhost ids]initdb --pgdata=/opt/ids/var/pgsql --pglib=/opt/ids/lib
    [ids@localhost ids]pg_ctl -w -D /opt/ids/var/pgsql -o "-o -F" start (运行PostgreSQL后端服务器)


    数据库系统初始化完成,这个系统的管理者是ids用户。这里应该注意一个问题,由于fsync造成PostgreSQL数据库的速度大大慢于MySQL数据库,所以需要使用-o "-o -F"功能选项关闭PostgreSQL数据库的fsync功能。这样会使PostgreSQL数据库的速度大大提高,至少不会比MySQL数据库慢。


    建立snort记录日志的数据库


    [ids@localhost ids]createuser snort (建立一个snort用户)
    Shall the new user be allowed to create database?(y/n) y
    Shall the new user be allowed to create more new user?(y/n) n
    CREATE USER
    [ids@localhost ids]createdb -W -U snort snort (建立snort数据库,这个数据库归snort使用)
    Password:123456 (密码只输入一次,要注意其准确性)
    CREATE DATABASE
    [ids@localhost ids]cd /path-of-snort-source/ (进入snort源代码所在的目录)
    [ids@localhost snort-1.8.1-RELEASE]psql snort snort<./contrib/create_postgresql
    [ids@localhost snort-1.8.1-RELEASE]zcat ./contrib/snortdb-extra.gz|psql snort snort (为snort数据库建立三个表,便于以后的分析


    这样,你就成功建立一个名为snort的PostgreSQL数据库,这个数据库由snort用户使用。下面就是编译、配置snort了。

    2.2.编译snort数据库日志插件

    如果你的PostgreSQL、MySQL和unixODBC数据库是采用的标准安装,那configure可以自动检测到数据库包含文件和库文件的位置。注意: 如果你是使用RPM软件包安装的,还需要安装相应的开发包。

    但是,如果你的数据库没有安装在标准的位置,就需要设置configure脚本的选项,使其知道数据库的位置。因此,根据我们的数据库安装的位置,我们需要使用如下命令来编译安装snort:


    #CFLAGS=-O2 ./configure --with-postgresql=/opt/ids --prefix=/opt/ids
    #make
    #make install


    OK,编译安装完成。为了使snort能够使用这个数据记录日志信息,还需要正确配置snort的数据库日志插件。

    2.3.配置snort数据库输出插件

    snort通过数据库输出插件将snort产生的输出数据送到SQL数据库系统。如果要获得安装和配置这个模块更为详尽的信息,可以参考http://www.incident.org web page。这个插件使用数据库名和参数表作为其参数。

    snort数据库处处插件的配置行格式如下:


    output database: [log | alert], [type of database], [parameter list]


    有如下参数可以使用:



    host


    数据库所在的主机。如果指定了一个非零字符串,snort就使用TCP/IP协议连接以此命名的主机。如果没有主机名,snort就使用一个本地UNIX-domain套接字连接本地主机。



    port


    数据库所在服务器的端口号,或者一个UNIX-domain套接字文件。



    dbname


    数据库名字。



    user


    数据库用户名。



    passwd


    密码。



    sensor_name


    指定snort传感器的名字,如果没有指定就自动产生。



    encoding


    因为数据包的负载和选项都是二进制数据,所以没有一种简单和可移植的方式将snort的数据保存在数据库。所以在snort数据库输出插件中提供了一些选项,让你自己决定使用那种编码。可以使用的编码有:hex、base64、ascii。



    detail


    设置你要保存多少细节数据,有如下选项:



    full


    保存引起报警的数据包的所有细节,包括IP/TCP包头和负载数据。



    fast


    只记录少量的数据。如果选择这种记录方式,不利于以后对数据的分析,但在某些情况下还有其用处。使用这种方式,将记录数据包的以下域:时间戳(timestamp)、特征码(signature)、源地址、目的地址、 源端口、目的端口、TCP标志和协议。


    除此之外,还需要定义日志方法和数据库类型。有两种有效日志方法:log和alert。如果使用log,snort就会调用log输出,将日志数据记录到数据库;如果设置为alert,snort就会调用alert输出,在数据库中记录报警信息。

    下面我们在snort.conf文件中加入以下配置行:


    output database: log,postgresql,dbname=snort user=snort host=数据库所在主机(例如:localhost) password=123456


    注意:dbname、user、host、passowrd各选项之间只能有一个空格的间隔。


    3.安装分析员控制台ACID


    ACID(Analysis Console for Incident Databases)是snort使用的标准分析员控制台软件。它由CERT Coordination Center开发,是AIRCERT工程的一部分。可以从http://www.cert.org/kb/acid下载。注意:使用PostgreSQL作为snort日志数据库,需要ACID-0.9.6b2及其以上版本,因为从ACID-0.9.6b2开始,ACID才实现了数据库的抽象支持。

    ACID是一个基于PHP的分析引擎,它能够搜索、处理snort产生的数据库。


    3.1.需要的软件

    ACID需要很多软件的支持,下面是所需软件清单:


    MySQL>=3.23版或者PostgreSQL>=7.1版。


    PHP>=4.0.4版。从http://www.php.net获得。


    Apache WEB服务器,需要支持cokies。可以从http://www.apache.org下载。


    snort>=1.7版


    ADODB>=0.93版。可以从http://php.weblogs.com/adodb下载。


    还有一些可选的库。


    GD 1.8.*:PHPlot加载图象的库,http://www.boutell.com/gd/

    PHPlot>=4.4.6:PHP图形库。http://www.phplot.com



    3.2.支持软件的安装

    3.2.1.安装支持PHP的Apache WEB服务器

    假设Apache和PHP3的源程序都保存在/tmp目录下,首先登录为root:


    $ su
    # cd /tmp
    # tar -xzvf apache_1.3.x.tar.gz
    # cd apacke_1.3.x
    # ./configure
    # cd /tmp
    # tar -xzvf php4-4.0.x.tar.gz
    # cd php-4.0.x
    # ./configure --with-pgsql=/opt/ids --with-apache=../apache_1.3.x --enable-track-vars --enable-bcmath --with-gd --prefix=/opt/ids --with-php-config=/opt/ids/lib/php.ini
    # make
    # make install
    # cd ../apache_1.3.x
    # ./configure --prefix=/opt/ids --activate-module=src/modules/php4/libphp4.a
    # make
    # make install
    # cd ../php-4.0.x
    # cp php.ini-dist /opt/ids/lib/php.ini


    配置文件的修改我们将在后面介绍。

    3.2.2.安装ADODB和PHPlot

    安装adodb非常简单,分别把下载的软件包解压,然后把它们复制到一个PHP可以找到的目录:


    # tar zxvf adodb112.tgz
    # cd adodb
    # mkdir /opt/ids/share/acidsupport
    # cp * /opt/ids/share/acidsupport
    # cd ..
    # tar zxvf phplot-4.4.6.tar.gz
    # cd phplot-4.4.6
    # cp * /opt/ids/share/acidsupport



    3.3.安装ACID

    所有支持软件的安装就绪后,就可以安装ACID了。安装步骤也是非常简单:


    # tar zxvf ACID-0.9.6b11.tar.gz
    # cd acid
    # cp * /opt/ids/htdocs



    3.4.系统配置


    配置Apache服务器

    编辑/opt/ids/conf/httd.conf文件。


    Listen 127.0.0.1:80(根据自己的情况设置)
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps



    配置ACID

    ACID的配置文件是acid_config.php,这也是一个PHP文件。你需要修改以下变量:


    $DBlib_path = "/opt/ids/share/acidsupport/adodb"; /* ADODB的安装路径 */
    $DBtype = "postgres"; /* 数据库类型 */

    $alert_dbname = "snort"; /* 记录snort日志信息的数据库 */
    $alert_host = "localhost"; /* 数据库所在的地址 */
    $alert_port = "5432"; /* 数据库服务器监听的端口 */
    $alert_user = "snort"; /* 数据库用户 */
    $alert_password = "123456"; /* 用户的密码 */

    $ChartLib_path = "/opt/ids/share/acidsupport/phplot/"; /* PHPlot的安装路径 */




    4.安装实时日志监视程序razoback


    razorback是一个GNOME环境应用程序,你可以使用它实时监视snort的日志。用户可以从http://www.intersectalliance.com/获得其最新版本。

    4.1.需要的支持


    snort能够向syslog记录日志信息。


    GNOME库

    4.2.安装

    快速的安装可以使用以下命令:


    # tar zxvf razorback-0.x.x.tar.gz
    # cd razorback-0.x.x
    # ./configure --prefix=/opt/ids/
    # make
    # make install


    在正常情况下,只有root用户才可以运行razorback。razorback也可以使用PAM(插入式验证模块),通过这个途径,普通用户可以运行razorback,只要输入root的密码。


    # chmod a+s /opt/ids/bin/razorback
    # cat > /etc/pam.d/razorback < auth sufficient /lib/security/pam_rootok.so
    auth required /lib/security/pam_pwdb.so
    session optional /lib/security/pam_xauth.so
    account required /lib/security/pam_permit.so
    EOF
    # cat > /etc/security/console.apps/razorback < USER=root
    FALLBACK=true
    PROGRAM=/usr/sbin/razorback
    SESSION=true
    EOF




    5.配置snort


    在前面的安装过程中,我们对某些配置做了讨论。在这里将对其它的一些必要的配置选项进行简单的讨论,有关snort IDS详细的配置策略将有专门的文章介绍。由于版本的升级,造成配置选项的定义随版本的不同而有所变化。下面的讨论将主要针对snort-1.8.x,需要设置的选项主要在snort.conf文件中:


    设置网络变量

    首先,你需要设置本地网络的一些参数:


    var HOME_NET 本地网络IP地址/CIDR
    var EXTERNAL_NET any
    var SMTP $HOME_NET
    var SQL_SERVERS $HOME_NET
    var DNS_SERVERS $HOME_NET



    配置输出插件


    ruletype redalert
    {
    type alert
    output alert_syslog: LOG_AUTH LOG_ALERT
    output database: log, postgresql, user=snort dbname=snort host=localhost
    }


    其它的选项可以参考<<如何编写snort规则>>根据自己的系统进行设置。
    因为,安装程序不能自动安装snort的配置文件snort.conf和各种规则集文件(1.7版以*-lib命名,1.8版以*.rules命名),所以需要手工把它们复制到你指定的目录中,一般是${prefix}/etc/。当然,你可以指定其它的目录,由于snort的规则集文件很多,为了保持目录结构的清晰,我们把它们放在/opt/ids/etc/snort.d目录中:


    # mkdir -p /opt/ids/etc/snort.d
    # cp snort.conf /opt/ids/etc/snort.d
    # cp *.rules(>=1.8版)或者cp *-lib(1.7.x版) /opt/ids/etc/snort.d
    # cp classification.conf /opt/ids/etc/snort.d
    # chmod 700 /opt/ids/ids/etc/snort.d/




    6.启动系统


    系统安装完成后,我们就可以启动系统了。


    [ids@localhost ids]/opt/ids/bin/pg_ctl -w -D /opt/ids/var/pgsql -o "-o -F" start
    [ids@localhost ids]su
    # /opt/ids/bin/snort -D -c /opt/etc/snort.d/snort.conf
    # /opt/ids/bin/apactl start


    然后,使用startx启动X-window系统。


    [ids@localhost ids]razorback&
    [ids@localhost ids]netscape http://localhost




    总结


    本文主要讲述了如何搭建一个基本的snort的入侵检测系统的具体步骤。snort本身还有很多功能,但是本文基本没有涉及,关于这些功能的运用将单独讨论。:)
    发布人:netbull 来自:LinuxAid