Q010 如何在Linux下编译安装Snort?
准备工作完成之后,接着开始正式安装Snort。编译安装Snort需要如下几个步骤。
步骤1.安装基本环境和依赖包。
#yum install -y gcc gcc-c++ flex bison zlib* libxml2 libpcap* pcre* tcpdump git libtool curl man make
步骤2.解压Libdnet、DAQ及Snort安装包。
在服务器的安装配置过程中,大家很可能会到官网下载最新版本的源码包,但是那样就会遇到各种依赖包缺失的问题,导致无法安装成功。因为有些软件(比如Snort)要在DAQ(Data AcQuisition,数据采集器)library安装好之后才能继续安装,而只有Libdnet安装完成,才能安装DAQ。操作如下:
#cd /usr/local/src #tar -zxvf libdnet-1.12.tgz #tar -zxvf daq-2.0.4.tar.gz #tar -zxvf snort-2.9.7.0.tar.gz
下面必须依次安装Libdnet、DAQ和Snort这3个包。
·安装libdnet-1.12.tgz。
#cd /usr/local/src/libdnet-1.12/ #./configure #make && make install
·安装DAQ。
#cd daq-2.0.4 #./configure #make && make install
·安装Snort 2.9(安装Snort前一定要正确安装Libdnet和DAQ)。
#cd /usr/local/src/snort-2.9.7.0 #./configure --enable-sourcefire #make && make install
步骤3.添加用户和组。
创建用户和组,并设置权限。在root身份下解包的文件权限都与root有关,所以要修改成Snort用户的属主和相关权限。
#groupadd -g 40000 snort //新添加一个Snort组 #useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort //将Snort用户加入Snort组,并且不允许登录系统
步骤4.新建目录/var/log/snort并设置其属性。
#mkdir /var/log/snort #chown –R snort:snort /var/log/snort
步骤5.配置Snort。
·新建目录/etc/snort/。
#mkdir /etc/snort/
·将snortrules-snapshot-2970.tar.gz解压到/etc/snort/目录下。
#cd /etc/snort # tar –zxvf /usr/local/src/snortrules-snapshot-2970.tar.gz –C . #cp /etc/snort/etc/sid-msg.map /etc/snort
·将下载的Snort压缩包解压缩后复制到/etc/snort/目录下。
#cd /etc/snort/ #cp /usr/local/src/snort-2.9.7.0/etc/* .
·设置当前目录下所有文件的属主。
#cd /etc/snort #chown -R snort:snort *
·新建黑白名单规则文件。
#touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
在/etc/snort/rules下新建white_list.rules和black_list.rules这两个文件。
·编辑配置文件snort.conf,修改以下几行的内容。
#vi /etc/snort/snort.conf
设置网络变量,将第45行的ipvar HOME_NET any改为ipvar HOME_NET 192.168.x.x网段,并写成CIDR格式。也可以添加多个网段,来看下面这个例子。
ipvar HOME_NET [192.168.0.0/16,172.16.0.0/16] 将48行ipvar EXTERNAL_NET any 改为 ipvar EXTERNAL_NET!$HOME_NET 第104行 var RULE_PATH ../ruls 改为 var RULE_PATH /etc/snort/rules 第105行 var SO_RULE_PATH ../so_rules 改为var SO_RULE_PATH /etc/snort/so_rules 第106行 var PREPROC_RULE_PATH ../preproc_rules 改为 var PREPROC_RULE_PATH/etc/snort/ preproc_rules 第113行 var WHITE_LIST_PATH ../rules 改为 var WHITE_LIST_PATH /etc/snort/rules 第114行 var BLACK_LIST_PATH ../rules 改为 var BLACK_LIST_PATH /etc/snort/rules
·设置日志保存路径。
config logdir:/var/log/snort/
·配置输出插件。
Snort可通过数据库插件(spo_database.c和spo_databaseh)将预处理器输出的日志写入数据库,但下面的配置一方面将报警写入alert文件,另一方面将预处理器输出的日志写入到unified2格式的二进制文件中,以供Barnyard2读取使用。
将第521行修改成如下内容:
output unified2:filename snort.log,limit 128
以上几处修改完成后,保存退出。
步骤6.新建目录snort_dynamicrules并设置权限。
#mkdir -p /usr/local/lib/snort_dynamicrules #chown -R snort:snort /usr/local/lib/snort_dynamicrules #chmod -R 755 /usr/local/lib/snort_dynamicrules
步骤7.在/usr/sbin/目录下新建名为Snort的软链接文件。
#cd /usr/sbin #ln -s /usr/local/bin/snort snort
步骤8.添加测试规则。
#vi /etc/snort/rules/local.rules
加入如下内容:
alert icmp any any -> $HOME_NET any (msg:"ICMP Packet Detected";sid:1000003;rev:1;)
步骤9.测试Snort。
#snort -T -i eht0 -u snort -g snort -c /etc/snort/snort.conf
如果配置正确,则系统启动后显示如下内容。
pcap DAQ configured to passive. Acquiring network traffic from "eth0". Set gid to 113 Set uid to 109 --== Initialization Complete ==-- ,,_ -*> Snort! <*- o" )~ Version 2.9.3.1 IPv6 GRE (Build 40) '''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2012 Sourcefire, Inc., et al. Using libpcap version 1.1.1 Using PCRE version: 8.02 2010-03-19 Using ZLIB version: 1.2.3.4 Rules Engine: SF_SNORT_DETECTION_ENGINE Version 1.16 <Build 18> Preprocessor Object: SF_GTP (IPV6) Version 1.1 <Build 1> Preprocessor Object: SF_SIP (IPV6) Version 1.1 <Build 1> Preprocessor Object: SF_SMTP (IPV6) Version 1.1 <Build 9> Preprocessor Object: SF_IMAP (IPV6) Version 1.0 <Build 1> Preprocessor Object: SF_DNS (IPV6) Version 1.1 <Build 4> Preprocessor Object: SF_REPUTATION (IPV6) Version 1.1 <Build 1> Preprocessor Object: SF_DCERPC2 (IPV6) Version 1.0 <Build 3> Preprocessor Object: SF_MODBUS (IPV6) Version 1.1 <Build 1> Preprocessor Object: SF_SSH (IPV6) Version 1.1 <Build 3> Preprocessor Object: SF_SDF (IPV6) Version 1.1 <Build 1> Preprocessor Object: SF_POP (IPV6) Version 1.0 <Build 1> Preprocessor Object: SF_SSLPP (IPV6) Version 1.1 <Build 4> Preprocessor Object: SF_FTPTELNET (IPV6) Version 1.2 <Build 13> Preprocessor Object: SF_DNP3 (IPV6) Version 1.1 <Build 1> Snort successfully validated the configuration! Snort exiting
如出现“Snort successfully validated the configuration!”的提示,则表示安装配置成功。
步骤10.用ping命令测试。
用ping命令进行测试的目的是为了产生报警。ping命令使用ICMP协议,在IDS中使用Libpcap函数所捕获的也是ICMP数据包。下面在Snort主机上操作:
#snort -i eth0 -c /etc/snort/snort.conf -A fast
与此同时,日志文件记录在/var/log/snort/alert和/var/log/snort/snort.log中。可用下面的命令查看。
#cd /var/log/snort/ #tail -f /var/log/snort/alert
alert文件收到报警,代表本实验成功,下面要将这些报警存储到数据库。