0°

snort安装配置

软件版本

Apache:Web服务器;
PHP:Web语言;
Mysql:数据库;
libpcap-1.3.0:Unix/Linux平台下网络抓包函数库;
pcre-8.31:用C语言编写的正则表达式函数库;
libdnet-1.12:提供了低层网络数据包的构造、处理和发送功能;
daq-1.1.1:Snort关联函数库;
snort-2.9.2.3:Snort安装包;
snortrules-snapshot-2923:snort规则包;
acid-0.9.6:snort控制台;
adodb517:连接mysql数据库插件;
jpgraph-3.5.0b1:图形处理插件;
注:过程中假设所有软件源码包下载存放于/usr/local/src

相关下载地址

http://www.tcpdump.org
http://www.pcre.org
http://code.google.com/p/libdnet
http://www.snort.org
http://acidlab.sourceforge.net
http://sourceforge.net/projects/adodb/files
http://jpgraph.net

安装依赖包

libpcap

root #tar zxvf libpcap-1.3.0.tar.gz
root #cd libpcap-1.3.0
root #./configure --prefix=/usr
root #make
root #make install

pcre

root #tar zxvf pcre-8.31.tar.gz
root #cd pcre-8.31
root #./configure
root #make
root #make install

libdnet

root #tar zxvf libdnet-1.12.tgz
root #cd libdnet-1.12
root #./configure
root #make
root #make install

daq

root #tar zxvf daq-1.1.1.tar.gz
root #cd daq-1.1.1
root #./configure
root #make
root #make install

snort

root #tar zxvf snort-2.9.3.tar.gz
root #cd snort-2.9.3
root #./configure --prefix=/usr/local/snort –enable-dynamicplugin –with-mysql
root #make
root #make install

说明:”–prefix=DIR(指定安装目录), –with-mysql=DIR(数据库mysql目录)”

部署配置

解压snort规则包到snort目录

root #cd /usr/local/snort
root #tar zxvf /usr/local/src/snortrules-snapshot-2923.tar.gz

修改snort配置文件

root #vi /usr/local/snort/etc/snort.conf

修改以下内容:

ipvar HOME_NET 192.168.1.242	//服务器IP,2个以上IP为:[192.168.1.1,192.168.1.2]或192.168.1.0/24;
output database: log, mysql, user=snort dbname=snort host=localhost	//去掉#号,配置数据库;
var RULE_PATH /usr/local/snort/rules	//规则目录路径;
var SO_RULE_PATH /usr/local/snort/so_rules	//规则目录路径;
var PREPROC_RULE_PATH /usr/local/snort/preproc_rules	//规则目录路径;
var WHITE_LIST_PATH ../rules	//前面加#注释掉;
var BLACK_LIST_PATH ../rules	//前面加#注释掉;

建立snort数据库

root #mysql -u root -p	//登陆mysql数据库;
mysql>create database snort; //创建snort数据库;
root #mysql –u root -p < /usr/local/src/snort-2.9.3/schemas/create_mysql snort	//导入数据表;

创建snort日志文件存放目录

root #mkdir /var/log/snort

配置snort控制台

将acid,adodb,jpgraph解压放到站点目录;
修改配置

root #vi /usr/local/apache2/htdocs/acid_conf.php
$DBlib_path = "/usr/local/apache2/htdocs/adodb";	//修改adodb路径;
$alert_dbname   = "snort";	//数据库名称;
$alert_host     = "localhost";	//数据库服务器地址,默认;
$alert_port     = "";	//默认3306无需修改;
$alert_user     = "root";	//数据库用户名;
$alert_password = "123456";	//密码;
$ChartLib_path = "/data0/htdocs/snort/jpgraph/src";	//修改jpgraph路径;

重启Apache访问站点即会出现ACID安装界面,点”Setup Page”,再点击”Create Acid AG”,回到首页即可;

启动snort

snort有三种工作模式:嗅探器,数据包记录器,网络入侵检测系统;嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上;数据包记录器模式把数据包记录到硬盘上;网路入侵检测模式是最复杂的,而且是可配置的;我们可以让snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动作;

snort启动参数:
-v 在终端显示;
-d 显示应用层数据;
-e 显示链路层包头;
-c snort.conf文件目录,解析snort.conf;
-i 网卡接口,指定抓包的网卡;
-A full	以默认文本输出报警日志;

嗅探器模式

所谓的嗅探器模式就是snort从网络上读出数据包然后显示在你的控制台上;首先,我们从最基本的用法入手;如果你只要把TCP/IP包头信息打印在屏幕上,只需要输入下面的命令:

root #/usr/local/snort/bin/snort -v

使用这个命令将使snort只输出IP和TCP/UDP/ICMP的包头信息;如果你要看到应用层的数据,可以使用:

root #/usr/local/snort/bin/snort -vd

这条命令使snort在输出包头信息的同时显示包的数据信息;如果你还要显示数据链路层的信息,就使用下面的命令:

root #/usr/local/snort/bin/snort -vde

注意这些选项开关还可以分开写或者任意结合在一块;例如,下面的命令就和上面最后的一条命令等价:

root #/usr/local/snort/bin/snort -d -v –e

数据包记录器模式

如果要把所有的包记录到硬盘上,你需要指定一个日志目录,snort就会自动记录数据包:

root #/usr/local/snort/bin/snort -dev -l /var/log/snort

当然/var/log/snort目录必须存在,否则snort就会报告错误信息并退出;当snort在这种模式下运行,它会记录所有看到的包将其放到一个目录中,这个目录以数据包目的主机的IP地址命名,例如:192.168.10.1
如果你只指定了-l命令开关,而没有设置目录名,snort有时会使用远程主机的IP地址作为目录,有时会使用本地主机IP地址作为目录名;为了只对本地网络进行日志,你需要给出本地网络:

root #/usr/local/snort/bin/snort -dev -l /var/log/snort -h 192.168.1.0/24

这个命令告诉snort把进入C类网络192.168.1的所有包的数据链路、TCP/IP以及应用层的数据记录到目录./log中;
如果你的网络速度很快,或者你想使日志更加紧凑以便以后的分析,那么应该使用二进制的日志文件格式;所谓的二进制日志文件格式就是tcpdump程序使用的格式;使用下面的命令可以把所有的包记录到一个单一的二进制文件中:

root #/usr/local/snort/bin/snort -l /var/log/snort -b

注意此处的命令行和上面的有很大的不同;我们勿需指定本地网络,因为所有的东西都被记录到一个单一的文件;你也不必冗余模式或者使用-d、-e功能选项,因为数据包中的所有内容都会被记录到日志文件中;
你可以使用任何支持tcpdump二进制格式的嗅探器程序从这个文件中读出数据包,例如:tcpdump或者Ethereal;使用-r功能开关,也能使snort读出包的数据;snort在所有运行模式下都能够处理tcpdump格式的文件;例如:如果你想在嗅探器模式下把一个tcpdump格式的二进制文件中的包打印到屏幕上,可以输入下面的命令:

root #/usr/local/snort/bin/snort -dv -r packet.log

在日志包和入侵检测模式下,通过BPF(BSD Packet Filter)接口,你可以使用许多方式维护日志文件中的数据;例如,你只想从日志文件中提取ICMP包,只需要输入下面的命令行:

root #/usr/local/snort/bin/snort -dvr packet.log icmp

网络入侵检测模式

snort最重要的用途还是作为网络入侵检测系统(NIDS),使用下面命令行可以启动这种模式:

root #/usr/local/snort/bin/snort -dev -l /var/log/snort -h 192.168.1.0/24 -c snort.conf

snort.conf是规则集文件;snort会对每个包和规则集进行匹配,发现这样的包就采取相应的行动;如果你不指定输出目录,snort就输出到/var/log/snort目录;
注意:如果你想长期使用snort作为自己的入侵检测系统,最好不要使用-v选项;因为使用这个选项,使snort向屏幕上输出一些信息,会大大降低snort的处理速度,从而在向显示器输出的过程中丢弃一些包;
此外,在绝大多数情况下,也没有必要记录数据链路层的包头,所以-e选项也可以不用:

root #/usr/local/snort/bin/snort -d -h 192.168.1.0/24 -l /var/log/snort -c snort.conf

这是使用snort作为网络入侵检测系统最基本的形式,日志符合规则的包,以ASCII形式保存在有层次的目录结构中;
网络入侵检测模式下的输出选项
在NIDS模式下,有很多的方式来配置snort的输出;在默认情况下,snort以ASCII格式记录日志,使用full报警机制;如果使用full报警机制,snort会在包头之后打印报警消息;如果你不需
要日志包,可以使用-N选项;
snort有6种报警机制:full、fast、socket、syslog、smb(winpopup)和none;其中有4个可以在命令行状态下使用-A选项设置;这4个是:

-A fast:报警信息包括:一个时间戳(timestamp)、报警消息、源/目的IP地址和端口; 
-A full:是默认的报警模式; 
-A unsock:把报警发送到一个UNIX套接字,需要有一个程序进行监听,这样可以实现实时报警; 
-A none:关闭报警机制;

使用-s选项可以使snort把报警消息发送到syslog,默认的设备是LOG_AUTHPRIV和LOG_ALERT;可以修改snort.conf文件修改其配置;
snort还可以使用SMB报警机制,通过SAMBA把报警消息发送到Windows主机;为了使用这个报警机制,在运行./configure脚本时,必须使用–enable-smbalerts选项;
下面是一些输出配置的例子:
使用默认的日志方式(以解码的ASCII格式)并且把报警发给syslog:

root #/usr/local/snort/bin/snort -c snort.conf -l /var/log/snort -s -h 192.168.1.0/24

使用二进制日志格式和SMB报警机制:

 root #/usr/local/snort/bin/snort -c snort.conf -b -M WORKSTATIONS

遇到的错误

1. ERROR!  Libpcap library version >= 1.0.0  not found.
解决办法: ln -s /usr/local/lib/lib* /usr/lib/
2. ERROR:parser.c(5047) Could not stat dynamic module path "/usr/local/lib/snort_dynamicengine/libsf_engine.so": No such file or directory.
解决办法: ln -s /usr/local/snort/lib/snort_dynamicpreprocessor /usr/local/lib/snort_dynamicpreprocessor
3. ERROR:parser.c(5047) Could not stat dynamic module path "/usr/local/lib/snort_dynamicengine/libsf_engine.so": No such file ordirectory.
解决办法: ln -s /usr/local/snort/lib/snort_dynamicengine /usr/local/lib/snort_dynamicengine
4. ERROR: parser.c(5047) Could not stat dynamic module path "/usr/local/lib/snort_dynamicrules/bad-traffic.so": No such file or directory.
解决办法: ln -s /usr/local/snort/so_rules/precompiled/Centos-5-4/i386/2.8.6.0 /usr/local/lib/snort_dynamicrules
注:根据实际系统版本选择.

参考资料

http://man.ddvip.com/net/snort/index.html
http://www.ibm.com/developerworks/cn/web/wa-snort1/
http://www.ibm.com/developerworks/cn/web/wa-snort2/index.html
http://www.ibm.com/developerworks/cn/linux/l-snort/index.html
http://www.howtoforge.com/intrusion-detection-with-snort-mysql-apache2-on-ubuntu-7.10

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论