分享
 
 
 

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

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

简介

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本身还有很多功能,但是本文基本没有涉及,关于这些功能的运用将单独讨论。:)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有