构建基于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