1、课程设计指导书二1. 用 Snort 构建实用的入侵检测系统1.1 实验目的(1) 网络数据获取与分析是网络入侵检测系统的基础。通过实验让同学们掌握网络数据获取及数据还原的方法和实现。(2) 通过实验让同学们加深对网络数据获取原理的理解。(3) 通过实验让同学们初步了解在 linux 下的程序开发过程、开发环境。(4) 为利用第三方软件分析进一步分析数据打下基础。 1.2 实验内容(1) 安装除 snort 以外的其它软件,如 Apach、PHP、mysql 、acid 的安装等相关软件。(2) 完成相应的配置文件的配置,如配置数据库输出插件、制订入侵防范策略等(3) 能利用下载的检测规则,检
2、测入侵。(4) 自已完成一条规则的编写,并进行正确性测试。(5) 完成对检测规则的压力测试。 1.3 实验要求(1) 认真完成所规定的实验内容。(2) 将配置文件的的改动部分存储下来,传送到系 ftp 服务器上。文件名命名规则是Lab2_学号(3) 所操作的重要步骤和结果用截屏的方法和文件的方式保存和存储,并送到 ftp 服务器上(4) 认真完成每一个实验步骤,并做好记录。(5) 根据所做的全部实验做一个简单总结。 1.4 实验准备(1) 熟悉 linux 基本命令(2) 熟悉 linux 系统的安装配置(3) 熟悉虚拟机的安装和操作(4) 理解入侵检测系统的基本原理和实现技术(5) 理解 S
3、nort 的工作原理 (6) 参考教材参考资料及网上有关资料- 从 http:/httpd.apache.org/ 下载 Apache 软件- 从 http:/ php 软件- 从 http:/ mysql 数据库软件- 从 http:/www.cert.org/kb/acid 下载 ACID 软件- 从 http:/www.tcpdump.org 下载 libpcap 库-从 http:/www.pcre.org 下载 libpcre 库-从 http:/www.snort.org 下载 snort 软件-从 http:/ 下载 adobd-从 http:/www.aditus.nu/jpg
4、raph 下载 jpgraph1.5 实验过程1.5.1 平台的搭建首先是对此入侵检测系统所在的平台进行搭建,本文采用的是 RedHat 9.0 为内核的 Linux 操作系统,可以采用直接硬盘分区的安装方式,也可以采用 Vmware 虚拟机进行安装。以 Snort 为核心搭建的入侵检测系统是支持多平台了的,由于 Linux 是开源系统并且安全性也比较好,所以这里采用了它。在安装 RedHat 9.0 需要的一些注意事项主要在网络配置方面,需要取消“使用 Bootd/DHCP”,针对公司的网段填写“IP 地址” 、 “子网掩码” 、 “预设网关器的 IP 地址”以及“第一个名称服务器地址” 。
5、这样配置的原因是最好不要让在手工配置 snort.conf 中的 home_net 值是一个动态 IP,如果只能使用 DHCP 进行上网,那么在运行 Snort 之前要修改 snort.conf 中的地址。主机名称配为 localhost,方便以后的配置。防火墙设置为中安全性,允许进入的服务为 SSH 和 WWW。对于系统需要安装的套件组群可以选择为:X Windows SystemGnome Desktop EnvironmentKDE Desktop Environment(不安装 )EditorsEngineering and Scientific(不安装)Graphical Inter
6、netText based internetOffice/Productivity(不安装)Sound and Video(不安装)Authoring and Publishing(不安装)GraphicsGames and Entertainment(不安装)Server(全不安装)Development toolsKernel developmentX Software DevelopmentGnome Software Development(不安装)KDE Software Development(不安装)Administration(不安装)System ToolsPrinting
7、support(不安装)安装完成后,入侵检测系统所需的平台已经基本搭建完成,如果是用虚拟机进行安装的还可以装一下 Vmware-tools 方便使用。安装 Vmware-tools 的方法:点击虚拟机 VM 菜单下的 Install Vmware-tools,然后 Vmware-tools 安装包就会挂在 mnt/cd-rom 下,解压 rpm 包,安装后重启系统,在终端中输入 Vmware-config.pl 然后按照提示点击回车确定就可以了。1.5.2 服务器的建立需要下载的软件有 Zlib(有些 RedHat9 中已经安装了 Zlib,可以使用 rpm -qa|grep zlib 进行查
8、询是否安装) 、MYSQL 、Apache、PHP。然后可以将下载的文件放入 usr/local/src 目录下方便安装以及进行管理。安装 zlib 1.2.3: zlib 是很多应用程序都在使用的压缩库,可提供数据压缩/ 解压例程。#tar zxvf zlib-1.2.3.tar.tar /对压缩文件解压缩#cd zlib-1.2.3#./configure; make test /默认路径,测试编译#make install#cd 安装 MYSQL: MySQL 是比较广泛使用的开放源代码的 SQL 数据库软件,相对与其他的数据库系统来说,MySQL 具有快速、可靠并且易于使用的优点,可以
9、用它处理比较大的数据库,比较适合中小型企业入侵检测系统所产生的大量报警信息。首先建立 MySQL 使用者和群组:#groupadd mysql#useradd g mysql mysql在/root 底下找到檔名叫 “.bash_profile”需要对 MYSQL 的路径进行配置,使用文本编辑软件找到 PATH 这行并且改为 PATH=$PATH:$HOME/bin:/usr/local/mysql/bin 然后回到 usr/local/src 目录下进行安装#tar zxvf mysql-4.1.18.tar.gz#cd mysql-4.1.18#./configure -prefix=/u
10、sr/local/mysql /该命令的作用是 MYSQL 的安装路径#make /编译#make install在安装完毕后需要进行配置#scripts/mysql_install_db#chown R root /usr/local/mysql /将该目录下的所有文件的的拥有者改为 root#chown R mysql /usr/local/mysql/var#chgrp R mysql /usr/local/mysql#cp support-files/my-f /etc/f然后修改 conf 文件,编辑/etc/ld.so.conf,加入两行/usr/local/mysql/lib/m
11、ysql 和/usr/local/lib在 root 目录下搜索新的动态链接库:root# ldconfig v下面通过增加启动进程来设定 MYSQL 自动开机执行#cd usr/local/src/mysql-4.1.18/support-files首先将 mysql.server 复制到自启动文件夹中#cp mysql.server /etc/init.d/mysql在 3 级启动项下创建软连接:#cd /etc/rc3.d#ln s /init.d/mysql S85mysql#ln s /init.d/mysql K85mysql在 5 级启动项下创建软连接:#cd /etc/rc5.
12、d#ln s /init.d/mysql S85mysql#ln s /init.d/mysql K85mysql#cd /init.d改变 MySQl 的访问权限,文件主人(u)为可执行可写可读,同组人(g)其他人(o)都为可执行可读。#chmod 755 mysql假如安装到这边都没有发生过错误,请利用指令“ps ef |grep mysql”测试看看你安装的MySQL运作正不正常。如果出现下面这两个服务则表示MYSQL安装成功。root 3201 0 11 9:35 pts/0 00:00:00 /bin/sh/usr/local/mysql/bin/mysqld_safe -user=
13、mysqlmysql 3241 3201 3 9:35 pts/0 00:00:00 /usr/local/mysql/lib/mysqld -basedir=/usr/local/mysql -datadir=/usr/local/mysql/var -user=mysql -pid-file=/usr/local/mysql/var/patrick-redhat.pid skiplocking安装Apache:Apache是世界上使用最广泛的 Web服务器,与Snort一样Apache也是开放源代码的,Snort服务器还有很多其他组件需要用到Apache源代码,并且控制台也需要 Web服务
14、器的支持才能正确运行。在根目录下使用mkdir www建立一个文件夹 www,将Apache、PHP 以及PHP组件都安装在这个目录下,方面对服务器进行管理。#tar zxvf httpd-2.2.6.tar.gz /解压缩#cd httpd-2.2.6#./configure -prefix=/www enable-so /设置安装路径为 www#make#make install执行 “/www/bin/apachectl start”确定 apache 有正常启动执行,在上网浏览器中输入本主机的 IP地址,通常使用 127.0.0.1 进行本地测试,如果网页中出现 It works!则证
15、明 Apache 安装成功,httpd服务启动成功。然后执行 “/www/bin/apachectl stop”来终止 Apache 服务,以方便后续软件的安装。安装PHP:PHP是一个应用程序服务器,用来处理由PHP程序设计语言编写的代码,是目前非常常用的嵌入html脚本语言。控制台ACID就是用PHP语言编写的,将传感器收集的入侵数据制作成动态网页,此外ACID的接口都是PHP编写的,所以说要使用ACID就必须安装PHP应用程序服务器。#tar -xvzf php-4.4.8.tar.gz#cd php-4.4.8#./configure -prefix=/www/php -with-ap
16、xs2=/www/bin/apxs -with-config-filepath=/www/php -enable-sockets -with-mysql=/usr/local/mysql -with-zlibdir=/usr/local -with-gd本行命令设定了PHP的安装路径,关联相关软件,使PHP支持这些软件。如果关联中出现错误,根据提示安装所需要的软件包即可,关联成功后执行:#make#make install然后将PHP的配置文件复制到/www/php目录下#cp php.ini-dist /www/php/php.ini下面需要修改/www/conf 目录底下的 httpd.c
17、onf配置文件,该文件是 Apache的配置文件,主要是为了让Apache支持 PHP4,支持压缩程序、图片、应用程序以及.php网页,找到相关语句并修改为(若没有则添加) 。LoadModule php4_module modules/libphp4.soAddType application/x-tar .tgzAddType image/x- icon .icoAddType application/x-httpd-php .phpDirectoryIndex index.php index.html index.html.var然后将Apache设置为自启动:#cd /www/bin#
18、cp apachectl /etc/init.d/httpd /将 Apache 应用程序复制到自启动文件夹中#cd /etc/rc3.d#ln s /init.d/httpd S85httpd#ln s /init.d/httpd K85httpd#cd /etc/rc5.d#ln s /init.d/httpd S85httpd#ln s /init.d/httpd K85httpd下面建立一个PHP测试档测试看看是否安装设定建立正常,使用文本编辑器在目录/www/htdocs底下建立一个档名”test.php” ,内容为并保存。然后在上网浏览器中输入http:/127.0.0.1/tes
19、t.php ,如果出现图3-1中的画面,则证明Apache、php服务器建立成功。图5-1 PHP 测试截图1.5.3 Snort传感器的建立安装Libpcap:Libpcap是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,用于访问数据链路层。该库提供的C函数接口可用于需要捕获经过网络接口数据包的系统开发上。在本系统中作为Snort的抓包函数库,这个库为不同的平台提供了一致的编程接口,在安装了Libpcap的平台上,以Libpcap为接口写的程序,可以自由地跨平台使用。#tar zxvf libpcap-0.9.8.tar.gz#cd libpcap-0.9.8#./con
20、figure /默认安装路径就可以#make#make install安装Snort:本入侵检测系统的核心,运行为传感器上,通过装载解析规则对Libpcap抓的包进行预处理解释并传递报警。建立 Snort 使用者及群组#groupadd snort#useradd g snort snort#mkdir /etc/snort /建立文件夹用来存放规则,配置文件#mkdir /var/log/snort /建立 Snort 日志存放的文件夹#tar zxvf snort-2.2.0.tar.gz#cd snort-2.2.0#./configure -with-mysql=/usr/local/
21、mysql /采用默认路径,并关联 MySQl 数据库#make#make install将规则集和snort.conf配置文件复制到本地/etc/snort#cd rules#cp * /etc/snort#cd /etc#cp snort.conf /etc/snort#cp *.config /etc/snort下面是对 Snort 进行配置,对 /etc/snort 目录下的 snort.conf 配置文件进行修改,找到此行#var HOME_NET 10.1.1.0/24 将其改成所属的 IP 网段,如果不做修改可以用内定值 var HOME_NET any;对#var EXTERN
22、AL_NET 进行修改,将值改为希望监控的外网地址段;修改 snort 规则的路径 var RULE_PATH /etc/snort/;找到这行,将其前面的“#”拿掉即可动#preprocessor portscan $HOME_NET 4 3 portscan.log 这是增加了端口扫描预处理模块;找下面这一行,并修改部份内容 output database: alert, mysql, user=snort password=your_password dbname=snort host=localhost 这行配置文件分别指定了处理方式为报警,数据库使用为 MySQL,用户为 snort
23、,密码,入侵数据库 snort,入侵数据库所在的主机名 localhost。修改完毕后进行保存。下面将 snort 设定开机可自动执行,请切换到 snort 来源目录底下,其底下有个子目录叫 contrib,并将 S99snort 应用程序文件复制到启动文件夹中的 snort 文件夹中。#cd /usr/local/src/snort-2.2.0/contrib.#cp S99snort /etc/init.d/snort配置 snort 启动文件,使用文本编辑软件编辑/etc/init.d/snort 找到此行并进行修改CONFIG=/etc/snort/snort.conf /指定配置文件
24、路径#SNORT_GID=nogroup 再找到 “-g $SNORT_GID”,将此处去掉#cd /etc/init.d#chmod 755 snort /改变 snort 的访问权限#cd /etc/rc3.d#ln s /init.d/snort S99snort#ln s /init.d/snort K99snort#cd /etc/rc5.d#ln s /init.d/snort S99snort#ln s /init.d/snort K99snort接下来建立 snort 的数据库以及设定权限#/usr/local/mysql/bin/mysql /启动MySQL首先设置MySQL
25、的root用户登录密码:mysql SET PASSWORD FOR rootlocalhost=PASSWORD(new_password);Query OK, 0 rows affected (0.25 sec)建立数据库 snort:mysql create database snort;Query OK, 1 row affected (0.01 sec)为root用户设置localhost上的snort数据库插入和查询的权限:mysql grant INSERT,SELECT on root.* to snortlocalhost;Query OK, 0 rows affected
26、(0.02 sec)设置snort数据库的密码:mysql SET PASSWORD FOR snortlocalhost=PASSWORD(new_password);Query OK, 0 rows affected (0.25 sec)为snort用户设置对localhost上的snort数据库建立、插入、查询、删除、更新的权限:mysql grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snortlocalhost;Query OK, 0 rows affected (0.02 sec)为snort用户设置对snor
27、t数据库建立、插入、查询、删除、更新的权限:mysql grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort;Query OK, 0 rows affected (0.02 sec)退出:mysql exitBye下面添加 snort 数据库的表(在 snort-2.2.0 目录下操作) ,首先添加 snort 数据库。#/usr/local/mysql/bin/mysql -u root -p Enter password:mysql SHOW DATABASES; /查看所有数据库+-+| Database |+-
28、+| mysql | snort | test |+-+3 rows in set (0.00 sec)然后使用 snort 数据库:mysql use snortDatabase changedmysql SHOW TABLES; /查看snort中的表+-+| Tables_in_snort+-+| data| detail| encoding| event| flags| icmphdr| iphdr| opt| protocols| reference| reference_system| schema| sensor| services| sig_class| sig_referen
29、ce| signature| tcphdr| udphdr+-+19 rows in set (0.00 sec)Bye如果 snort 是这 19 张表则表示数据库建立成功。1.5.4 控制台的建立 安装 jpgraph: ACID 是基于 Web 管理的图形化用户接口,它可以采用 jpgraph 库来创建表示入侵数据的图表,创建的图形图表可以用来帮助掌握在这一段时间内入侵事件的走向,可以预测攻击的发展趋势。这种图形库有很多,也可以选择 PHPLOT 或者 Gd 来代替。#cd usr/local/src#cp jpgraph-1.12.2.tar.gz /www/htdocs /将压缩文件
30、复制到/www/htdocs#cd /www/htdocs#tar zxvf jpgraph-1.12.2.tar.gz /直接解压即可,不需要安装#rm rf jpgraph-1.12.2.tar.gz /将安装后没用的文件删除#cd jpgraph-1.12.2#rm rf README安装 adodb:要想开发可以访问各种类型的数据库的 PHP 代码,必须有一个可以对所有的数据库提供通用接口的库,这样可以使用户可以自由选择最适合这个应用程序的数据库类型了。ADODB 库就可以对许多种数据库提供通用的访问方式,它可以支持目前应用的各种数据库类型:MySQL、Oracle、SQL Serve
31、r,Sybase 等。#cd usr/local/src#cp adodb.tgz /www/htdocs/#cd /www/htdocs#tar zxvf adodb.tgz#rm rf adodb.tgz#安装 ACID:ACID 是 Snort 入侵检测系统控制台部分的核心,它是一个基于 PHP 的分析引擎,它从数据库读取入侵数据并把它显示在浏览器中。ACID 以有好的格式显示 Snort 数据并具有复杂查询功能。负责查询可利用 30 多种查询标准从大量的入侵数据中查明事件,达到这一水平的精确度需要能快速鉴别、整理误报。ACID 可以即时发送电子邮件来输出安全时间。 ACID 还有一个绘
32、图组件能用来生成图表,可以帮助处理烦乱的管理事务。#cd usr/local/src#cp acid-0.9.6b23.tar.gz /www/htdocs#cd /www/htdocs#tar zxvf acid-0.9.6b23.tar.gz#rm rf acid-0.9.6b23.tar.gz接下来需要对 ACID 进行配置,修改/www/htdocs/acid/目录下 acid_conf.php 文件,找到对应的行并修改为:指定 adodb 的路径,还有所使用的数据库类型$Dblib_path = ”/www/htdocs/adodb”;$Dbtype = “mysql”;设定记录 s
33、nort 报警信息的数据库名称;入侵数据库所在的位置;如果数据库不在本机上还应该设置 ACID 连接的远程端口,否则为空;登录到数据库上的用户名;用户口令。$alert_dbname = “snort”;$alert_host = “localhost”;$alert_port = “”;$alert_user = “snort”;$alert_password = “your_password”;/* Archive DB connection parameters */设定 ACID 连接的数据库类型;入侵数据库的位置;如果数据库不在本机上还应该设置 ACID 连接的远程端口,MySQL
34、的远程端口为 3306,如果数据库在本机上则为空;登录到数据库上的用户名;用户口令。$archive_dbname = “snort”;$archive_host = “localhost”;$archive_port = “”;$archive_user = “snort”;$archive_password = “your_password”;指定绘图库的路径$ChartLib_path = “/www/htdocs/jpgraph-1.12.2/src”;确定 ACID 使用的图片格式/* File format of charts (png, jpeg, gif) */$chart_f
35、ile_format = “png”;修改完成了保存,这样 ACID 基本配置完毕了,下面在上网浏览器中输入http:/127.0.0.1/acid/acid_main.php 进行测试,出现 ACID DB SETUP 的页面,点击 Create ACID AG 后会出现下面的提示:Successfully created acid_agSuccessfully created acid_ag_alertSuccessfully created acid_ip_cacheSuccessfully created acid_event这样再进入数据库查看 snort 数据库中的表,发现多了ac
36、id_ag 、 acid_ag_alert、 acid_ip_cache、 acid_event这四张表。然后再次打开浏览器,进入 http:/127.0.0.1/acid/acid_main.php 出现了图 5-2 中的画面,则安装成功。图 5-2 ACID 测试截图ACID 支持一些内部文档属性和使用警报组的事件管理组建。一个警报组是 ACID 的一个功能特性,它使警报聚集到一个以定义的一个组中。警报组能够用于聚集多个警报,构成安全事件。至此一个实用的入侵检测系统已经基本构建成功。1.5.5 验证与测试过程参考实验一1.6 实验报告要求(1) 将完成所规定的实验内容的步骤和过程写出来。(2) 将利用规则库检测入侵的实验过程和报警内容写出来(3) 将自己编写的规则用于入侵检测的过程写出来(4) 写出实验过程中的难点,要点(5) 实验完成后认真进行总结: 如此搭建的入侵检测系统是否能用于实际的工作环境? 与命令行方式的 SNORT 相比有哪些优点? 还存在哪些不足?