一、准备工作


手动编译安装Snort时所需的准备工作如下所示。

步骤 1准备软件环境。在安装前,必须在交换机上设置SPAN。中高端Cisco交换机都有SPAN功能。SPAN须为一个专用端口。以下是在虚拟机环境下的实验,须把网卡设置为混杂模式。

步骤2安装VMwareWorkstations虚拟机。准备SecureCRT工具。

步骤3到异步社区的本书页面中统一获取安装资源。

步骤4使用镜像CentOS-6.8-x86_64-mini在虚拟机中安装操作系统。

步骤5重启系统后设置系统IP、网关及DNS

默认安装时,网络IP是自动获取的,需要改成静态IP地址。

#ifconfig -a                                   //查看网卡配置信息

#vi/etc/sysconfig/network-scripts/ifcfg-eth0   //编辑网卡配置文件

DEVICE="eth0"

BOOTPROTO="dhcp"

HWADDR="00:0C:29:BA:53:4E"

IPV6INIT="yes"

NM_CONTROLLED="yes"

ONBOOT="yes"

TYPE="Ethernet"

UUID="685d0725-02ab-41b9-b9bf-6a52fc68c0f8"

 

修改为静态IP地址的方法是将BOOTPROTO="dhcp"中的"dhcp"改为"static"然后增加以下内容(内网IP配置):

IPADDR=192.168.91.29

NETMASK=255.255.255.0

GATEWAY=192.168.91.2

DNS1=192.168.91.2

DNS2=8.8.8.8                //DNS地址的配置根据当地网络供应商进行添加

 

最后保存退出,重启网络服务。

步骤6复制软件到指定目录。

libdnet-1.12.tgzdaq-2.0.4.tar.gzsnort-2.9.7.0.tar.gzsnortrules-snapshot-2970.tar.gz4个文件复制到CentOS 6.8系统/usr/local/src/目录下。

经过以上6个步骤之后,Snort安装的准备工作完成。


二、安装Snort

准备工作完成之后,接着开始正式安装Snort。编译安装Snort需要如下几个步骤。

步骤1安装基本环境和依赖包。

#yum install -y gcc gcc-c++ flex bison zlib* libxml2 libpcap* pcre* tcpdump git libtool curl man make

 

步骤2解压LibdnetDAQSnort安装包。

在服务器的安装配置过程中,大家很可能会到官网下载最新版本的源码包,但是那样就会遇到各种依赖包缺失的问题,导致无法安装成功。因为有些软件(比如Snort)要在DAQDataAcQuisition,数据采集器)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

 

下面必须依次安装LibdnetDAQSnort3个包。

m     安装libdnet-1.12.tgz

#cd /usr/local/src/libdnet-1.12/

#./configure

#make && make install

 

m     安装DAQ

#cd daq-2.0.4

#./configure

#make && make install

 

m     安装Snort 2.9(安装Snort前一定要正确安装LibdnetDAQ)。

#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

m     新建目录/etc/snort/

#mkdir /etc/snort/

 

m     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

 

m     将下载的Snort压缩包解压缩后复制到/etc/snort/目录下。

#cd /etc/snort/

#cp /usr/local/src/snort-2.9.7.0/etc/* .

 

m     设置当前目录下所有文件的属主。

#cd /etc/snort

#chown -R snort:snort *

 

m     新建黑白名单规则文件。

#touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules

 

/etc/snort/rules下新建white_list.rulesblack_list.rules这两个文件。

m     编辑配置文件snort.conf,修改以下几行的内容。

#vi /etc/snort/snort.conf

 

设置网络变量,将第45ipvarHOME_NET any改为ipvar HOME_NET 192.168.x.x段,并写成CIDR格式。也可以添加多个网段,来看下面这个例子。

ipvar HOME_NET  [192.168.0.0/16,172.16.0.0/16]

48ipvar 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

 

m     设置日志保存路径。

config logdir:/var/log/snort/

 

m     配置输出插件。

Snort可通过数据库插件(spo_database.cspo_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!”的提示,则表示安装配置成功。

步骤10ping命令测试。

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