简介
在1998年,Martin Roesch 用C语言开发了开放源代码(Open Source)的入侵检测系统Snort。直至今天,Snort已发展成为一个具有多平台(Multi-Platform)、实时(Real-Time)流量分析、网络IP数据包(Pocket)记录等特性的强大的网络入侵检测/防御系统(Network Intrusion Detection/Prevention System),即NIDS/NIPS。Snort符合通用公共许可(GPL——GNU General Pubic License),在网上可以通过免费下载获得Snort,并且只需要几分钟就可以安装并开始使用。
配置环境
本教程使用的是windows xp+appserv(Apache+MySQL+PHP+phpmyadmin集成环境)+snort+acid+jpgraph+adodb+winpcap
由于不同版本的软件之间很可能会产生冲突,所以部分软件我们这里直接确定好要使用的版本号。
Snort: 版本snort-2.8.3.1.Installer.exe,可以从我的csdn上下载:https://download.csdn.net/download/qiuchi1975/11328797
Winpcap:版本3.1-WinPcap.exe,csdn下载地址:http://download.csdn.net/detail/thisnameokbu/8514263
AppServ:版本appserv-win32-2.5.10.exe,AppServ软件的安装可以代替Apache、PHP、MySQL、phpMyAdmin 4种软件各自的安装过程。CSDN下载地址:https://download.csdn.net/download/qiuchi1975/11328814
其他的软件大家可以网上搜索下载,可以直接使用!
安装snort
运行snort-2.8.3.1.Installer.exe
Snort 2.8.3.1 安装完成后,“rule”文件夹中缺少文件,高版本的Snort不带规则库是因为只向注册或付费用户提供,不在授权安装用户免费使用规则库。【解决方法:可以去Snort官网下载一部分免费规则,官网地址:www.snort.org或者百度搜索下载】
winpcap安装
这个软件安装直接一路下一步就可以!
AppServ安装
选择安装目录为:C:\AppServ
可以参考:http://jingyan.baidu.com/article/91f5db1bf72ac01c7f05e3a7.html
【注意:】
(1)Administrator’s Email Address:输入管理员的邮箱地址。本机如果已经安装了IIS并且启动了Web Server,则会因为IIS Web Server默认在TCP 80 端口监听,和Apache Web Server发生冲突。可以修改Apache Web Server在其他端口监听,当然也可以禁用或者卸载IIS。此处将监听端口设置为8080,然后"Next"
(2)安装完成后,要将C:\AppServ\php5目录下的php.ini-dist文件改名为php.ini,并启动Apache和MySQL(默认自动启动)
AppServ安装成功后,在浏览器输入http://localhost:8080/,出现如下界面:
在浏览器地址栏中输入:http://localhost:8080/phpMyAdmin/index.php,出现如下界面:
用户名:root
密码:安装时你设定的密码
进入界面如下:
(3)配置AppServ
AppServ对于其phpMyAdmin组件给出的配置不一定适合我们,为此需要进行一些设置。
Step 1: 编辑Apache服务器配置文件
打开安装目录下Apache2.2\conf文件夹里的httpd.conf,需要检查ServerName localhost:8080 DocumentRoot “C:/AppServ/www”
Step 2: 编辑phpMyAdmin中的关键文件
打开C:\AppServ\www\phpMyAdmin\libraries目录下的config.default.php文件,推荐以下修改:
(a)设置phpmyadmin的URL,$cfg[‘PmaAbsoluteUri’] = ‘http://localhost:8080/phpMyAdmin/’;这里假设phpMyAdmin在默认站点的根目录下
(b)设置root密码,$cfg[‘blowfish_secret’] = ‘XXXX’; 其中XXXX为你设置的root密码。
©$cfg[‘DefaultLang’] = ‘zh-gb2312’;
(d)$cfg[‘DefaultCharset’] = ‘gb2312’;
(e) c f g [ ′ S e r v e r s ′ ] [ cfg['Servers'][ cfg[′Servers′][i][‘auth_type’] = ‘config’;
c f g [ ′ S e r v e r s ′ ] [ cfg['Servers'][ cfg[′Servers′][i][‘user’] = ‘root’; // MySQL user
c f g [ ′ S e r v e r s ′ ] [ cfg['Servers'][ cfg[′Servers′][i][‘password’] = ‘XXXX’;
Step 3: 配置PHP初始化文件php.ini
路径(可能是C:\WINDOWS\php.ini,也可能是C:\AppServ\php5\php.ini。如果C:\WINDOWS\下没有php.ini的话,就把C:\AppServ\php5下的php.ini复制一份过去)配置如下:
**;**open_basedir=C:\AppServ\www
magic_quotes_gpc=Off
file_uploads=Off
Step 4: 针对mysql进行。首先,建立Snort运行必需的Snort库和Snort_archive库:
打开cmd输入以下命令:
cd C:\AppServ\MySql\Bin
这是进入mysql目录下,然后输入
mysql -uroot -p
输入你设置的数据库密码
正确输入密码之后会进入mysql数据库里,可以看到光标前变成了:mysql>,然后开始创建数据库!
create database snort;
create database snort_archive;
Step 5: 使用C:\Snort\schemas目录下的create_mysql脚本建立Snort运行时必需的数据表:
这里说一下,我们之所以使用2.8.3的版本也是因为2.9级以上的snort不再提供create_mysql脚本,即使直接复制过去使用也会产生很多问题。
首先我们要退出mysql登陆状态,输入exit回车,再次进入C:\AppServ\MySQL\bin\目录下,我们接下来开始创建数据表:
mysql -D snort -u root -p < C:\Snort\schemas\create_mysql
mysql -D snort_archive -u root -p < C:\Snort\schemas\create_mysql
执行完create_mysql脚本后,用户可以通过在mysql提示符下运行sql语句use snort(use snort_archive),然后 show tables来验证配置的正确性。
Step 6: 必需在Apache服务器主机(暂定为localhost)上建立ACID和Snort用户,并为它们分配相关权限和访问密码,使ACID能正常访问后台数据库mysql中Snort相关的数据文件
mysql -uroot -p
输入你设置的数据库密码
登陆数据库,然后开始创建用户:
grant usage on . to “acid”@“localhost” identified by “acidtest”;
grant usage on . to “Snort”@“localhost” identified by “snorttest”;
grant usage on . to “snort”@“localhost” identified by “snorttest”;
grant select, insert, update, delete, create, alter on snort.* to “acid”@“localhost”;
grant select, insert on snort.* to “Snort”@“localhost”;
grant select, insert on snort.* to “snort”@“localhost”;
grant select, insert, update, delete, create, alter on snort_archive.* to “acid”@“localhost”;
set password for “snort”@“localhost”=password(‘snorttest’);
set password for “acid”@“localhost”=password(‘acidtest’);
通过上述命令,我们创建了建立acid和snort用户,密码分别是acidtest和snorttest,如果需要修改密码可以通过最后两行代码进行修改!
##安装Adodb、jpgraph和ACID
将adodb和jpgraph解压复制到C:\AppServ\php5目录下,分别生成C:\AppServ\php5\adodb和C:\AppServ\php5\jpgraph目录。将acid复制到C:\AppServ\www目录下生成C:\AppServ\www\acid。(注意文件夹一定不要带版本号!)
接下来修改C:\AppServ\www\acid中的acid_conf.php文件,如下:
$DBlib_path = “C:\AppServ\php5\adodb”;
$alert_dbname = “snort”;
$alert_host = “localhost”;
$alert_port = “”;
$alert_user = “acid”;
$alert_password = “XXXX”;
$archive_dbname = “snort_archive”;
$archive_host = “localhost”;
$archive_port = “”;
$archive_user = “acid”;
$archive_password = “XXXX”;
配置完成之后,打开浏览器,输入网址http://localhost:8080/acid/acid_db_setup.php
如果配置没有错误,会出现acid创建数据库界面,直接点击create database(应该是这个按键)
如果创建成功,进入mysql后use snort 后,show tables中就会出现几个acid开头的表
配置Snort
最后一步是编辑C:\Snort\etc\snort.conf。
首先修改监控的网段,如果你虚拟机ip是192.168.220.10,就将HOME_NET修改成
var HOME_NET 192.168.220.0/24
classification.config和reference.config是两个被主配置文件snort.conf引用的配置文件。classification.config文件包括了关于snort规则分类的信息,reference.config文件中罗列了一些关于报警信息的参考网站的URL,这些参考将在snort规则中引用。它们通常存放在于snort.conf相同的目录中。在snort.conf文件中将指定这些文件的目录。如果它们的存放位置发生了改变,也可以通过将主配置文件snort.conf中的相对路径改为绝对路径来进行调整:
include classification.config
include reference.config
改为绝对路径:
include C:\Snort\etc\classification.config
include C:\Snort\etc\reference.config
然后还需要修改引用路径:
dynamicpreprocessor directory C:\Snort\lib\snort_dynamicpreprocessor
dynamicengine C:\Snort\lib\snort_dynamicengine\sf_engine.dll
并设置Snort输出alert到mysql server:
output database: alert, MySql, host=localhost user=snort password=snort dbname=snort encoding=hex detail=full
然后将从网上下载的规则复制到snort/rules文件夹下!
开始测试
打开浏览器,输入网址http://localhost:8080/acid/acid_main.php
如果之前的配置没有出错,此时应该就能看见acid控制台图形界面了!
打开cmd,输入 cd C:\snort\bin,进入snort运行目录,输入命令
snort -c "C:\Snort\etc\snort.conf" -l "C:\Snort\log" -d -e -X -v -i 2
后面的2跟你用的第几个网卡有关 需要先将apache和mysql服务打开!
如果你配置的没有问题,此时snort就已经开始运行了!同时会生成日志文件,记录在C:\Snort\log下。
如果出现Not Using PCAP_FRAMES,可以不用管,直接ping一下虚拟机ip看cmd有没有抓到数据包。
然后在C:\Snort\rules目录下的local.rules中,添加自己的规则就可以在acid控制台看到监控信息了!
示例规则语句:
alert icmp any any -> $HOME_NET any (msg:"icmp Packet";sid:1234567890;rev:1;)
alert tcp any any -> $HOME_NET any (msg:”Web Access”; sid:11111111;)
alert udp any any -> $HOME_NET any (msg:”udp access”; sid:22222222;)
分别监控icmp、tcp、udp的数据包。
ping一下之后刷新acid控制台会发现有8个alert,抓到了ICMP的包。
至此,我们基本就大功告成了!
常见错误
1.进入http://localhost:8080/acid/acid_db_setup.php报错
可以根据报错类型进行相应的修改,如果是acid@localhost、snort@localhost等信息的报错,说明在acid和snort用户创建和赋权的时候出了错,可以重新做一遍,创建用户的时候一定记得区分大小写!上面楼主创建了snort和Snort两个用户,就是一开始的时候在这里出过错,索性直接创建了两个用户。
如果出现的是php不支持mysql之类的错误,那就是你php.ini那里有一点问题,没有将php对mysql支持语句前的注释去掉,这个百度就可以解决!
2.开启snort之后出现 Not Using PCAP_FRAMES
这个错误是因为dynamicpreprocessor directory C:\Snort\lib\snort_dynamicpreprocessor和dynamicengine C:\Snort\lib\snort_dynamicengine\sf_engine.dll这里的问题,不过影响不大,不影响使用!
3.开启snort之后报错,提示rules下某规则有问题
直接打开那个文件,将错误提示的行数的规则注释掉,然后再次运行,再次出现这个问题就再次注释,一直到能够正常运行或者不报rules出问题的错误为止!。
4.cmd中snort抓到了数据包,但是acid控制台刷新不显示
出现这个原因就是因为你没有设置相应的规则,在C:\Snort\rules目录下的local.rules中,添加自己的规则
,示例规则参考上面所述。
如果还有其他的错误,可以联系我询问
进阶功能
如果还想将snort运行的日志文件写入数据库,snort也是支持的,只需要到snort.conf文件里修改一下就可以,将
output database: log, mysql, user=snort password=snorttest dbname=snortlog host=localhost
output database: alert, mysql, user=snort password=snorttest dbname=snortalert host=localhost
这两行前的注释去掉,然后输入自己设置的数据库名密码等等。
上面是我已经自己创建了日志数据库snortlog和snortalert之后,再将相应的信息输入的。
创建方法跟上面创建snort数据库一样,都是先create snortlog,然后再用create_mysql脚本创建必备的表,再然后用grant语句将snortlog和snortalert的权限赋给snort用户和acid用户,使这两个用户能够正常访问日志数据库。
查看方法就是登进数据库之后,use snortlog,然后输入 select *from event;
就可以见到相应的日志记录数据了!
非常感谢thisnameokbu老哥所写的 snort在WinXP下的集成式安装, 对我的帮助巨大!本文所说的教程也大都使用了thisnameokbu老哥的教程 https://www.cnblogs.com/leaveyourownlife/p/4245022.html ,楼主也只是更加详细的描述了整个安装过程,并且解决了一些常见的错误。