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

  • A+
所属分类:互联网络 技术展台

作者: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 [[email protected] ids]initdb --pgdata=/opt/ids/var/pgsql --pglib=/opt/ids/lib [[email protected] 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记录日志的数据库  [[email protected] 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 [[email protected] ids]createdb -W -U snort snort (建立snort数据库,这个数据库归snort使用) Password:123456 (密码只输入一次,要注意其准确性) CREATE DATABASE [[email protected] ids]cd /path-of-snort-source/ (进入snort源代码所在的目录) [[email protected] snort-1.8.1-RELEASE]psql snort snort< ./contrib/create_postgresql [[email protected] 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 <  /etc/security/console.apps/razorback < >根据自己的系统进行设置。 因为,安装程序不能自动安装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.启动系统  系统安装完成后,我们就可以启动系统了。  [[email protected] ids]/opt/ids/bin/pg_ctl -w -D /opt/ids/var/pgsql -o "-o -F" start [[email protected] ids]su # /opt/ids/bin/snort -D -c /opt/etc/snort.d/snort.conf # /opt/ids/bin/apactl start  然后,使用startx启动X-window系统。  [[email protected] ids]razorback& [[email protected] ids]netscape https://sunlovely.com.cn  总结  本文主要讲述了如何搭建一个基本的snort的入侵检测系统的具体步骤。snort本身还有很多功能,但是本文基本没有涉及,关于这些功能的运用将单独讨论。:)

下载服务恢复

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: