基于CentOS平台的Snort+Barnyard安装步骤

开发 开发工具
本教程基于Cent OS 6.8 最小化安装为基础,展示了在其中安装Snort2.9.7.0的全过程。

一、背景

入侵检测系统(IDS)不但可以主动发现网络内遭受攻击,还可以作为防火墙的补充,虽然不能阻止网络入侵行为,但是能够帮助系统对网络攻击进行报警和分析。相当于部署在网络中的隐形摄像头。

然而Snort作为一种开源IDS系统,网上遍布各种版本的不同类型的安装资料,给初学者带来诸多不便,往往参考了一堆文档,还是无法达到预期。

本教程基于Cent OS 6.8 最小化安装为基础,展示了在其中安装Snort2.9.7.0的全过程。

阅读范围: 适用于初级网络运维人员参考使用。

系统安装

二、准备软件环境

在安装前,必需做SPAN,SPAN端口监控是一种在现有网络结构中引入监控网段的方法。Cisco交换机的中高端产品都有SPAN端口或镜像端口。Span端口既可以是一个专用端口,也可以通过该端口实现交换机上所有的端口的配置选项设定。下文实在虚拟机环境下完成的实验,所以只要把网卡设置为混杂模式即可。

(1).准备虚拟机工具Vmware or VirtualBox 或其他种类的虚拟机。当然远程连接工具也不可或缺比如:Xshell5 或 SecureCRT。

(2).下载操作系统镜像: http://pan.baidu.com/s/1pKSmNs3 附件中包含了实验里涉及到的软件包和脚本文件。

(3).安装虚拟机(本文以Vmware Workstation 12为例进行安装)

wKioL1hOWffB6XyHAAE5Vz8FtlM374.jpg-wh_50

图1

(4).将系统IP地址改为静态IP

默认安装,网络IP是自动获取,我们需要改成固定IP。

  1. #ifconfig-a  \\查看所有网卡的状态 
  2. #vi/etc/sysconfig/network-scripts/ifcfg-eth0    \\编辑网卡配置文件 
  3. DEVICE="eth0" 
  4. BOOTPROTO="dhcp" 
  5. HWADDR="00:0C:29:BA:53:4E" 
  6. IPV6INIT="yes" 
  7. NM_CONTROLLED="yes" 
  8. ONBOOT="yes" 
  9. TYPE="Ethernet" 
  10. UUID="685d0725-02ab-41b9-b9bf-6a52fc68c0f8" 

下面开始改成静态IP

BOOTPROTO="dhcp" -> BOOTPROTO="static"

接着,增加以下内容:

  1. IPADDR=192.168.91.29 
  2. NETMASK=255.255.255.0 
  3. GATEWAY=192.168.91.2 
  4. DNS1=192.168.91.2 
  5. DNS2=8.8.8.8  \\DNS配置根据当地网络供应商进行添加 

DNS还可以在其他的文件进行配置

  1. # vi /etc/resolv.conf 

加入

  1. nameserver 202.96.2.2 

退出保存,重启网络服务。实际 /etc/resolv.conf 是自动调用之前网卡配置文件DNS配置信息。

(5).本套教程主要基于网络安装所以大家必须保证网络畅通。

三、安装依赖包

1.安装wget工具

  1. #yum install -ywget 

更换成阿里云的源

  1. #wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 
  2. #yum clean all 
  3. #yum makecache 

更新系统(完成后会升级所有包,改变软件设置和系统设置,系统版本内核都升级)

  1. #yum-y update 
  2.     
  3. #yuminstall -y epel-release 

安装epel源,EPEL,即ExtraPackages for Enterprise Linux,这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的,对RHEL标准yum源是一个很好的补充,完全免费使用,由Fedora项目维护,EPEL 包含一个叫做epel-release的包,这个包包含了EPEL源的gpg密钥和软件源信息。您可以通过yum安装到您的企业版Linux发行版上。

检查系统是否安装epel-release

  1. #rpm -q epel-release  
  2. packageepel-release is not installed 

2.安装基本环境和依赖包

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

3.解压DAQ、Libdnet、Snort

在服务器的安装配置过程中,大家很可能会到官网去下载最新版本的源码包,但是那样以来就会遇到各种依赖包缺失的问题,从而导致无法安装成功。因为有些软件比如Snort要在DAQ安装好之后才能继续,而DAQ依赖于Libdnet安装好了,才能再安装上DAQ。所以安装源码的顺序犹然重要。在学习本文时一定要注意版本的一致性,也就是大家一定要挑选本文指定的版本进行试验,只要成功了,你对Snort配置的信心就会大增,学习兴趣也更加浓郁。

当然,使用源码安装并不特别复杂,只是在安装过程里排错的难度较大。如何解决安装过程中的依赖问题,可以参考《如何解决源码包安装时的依赖性问题》http://chenguang.blog.51cto.com/350944/1034095

给大家打好预防针了,下面继续安装。

  1. cd /usr/local/src 
  2. tar -zxvf /root/Desktop/libdnet-1.12.tgz 
  3. tar -zxvf /root/Desktop/daq-2.0.4.tar.gz 
  4. tar -zxvf /root/Desktop/snort-2.9.7.0.tar.gz 

安装libdnet-1.12.tgz

  1. cd /usr/local/src/libdnet-1.12/ 
  2. ./configure 
  3. make && make install 

 

友情提示:

有些初学者会选择安装rpm包,尤其手动安装libdnet这个包时会遭遇以下问题:

  1. [root@localhost ~]# rpm -ivh libdnet-1.12-6.el6.i686.rpm 
  2. warning: libdnet-1.12-6.el6.i686.rpm:Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY 
  3. error: Failed dependencies: 
  4.       libc.so.6is needed by libdnet-1.12-6.el6.i686 
  5.       libc.so.6(GLIBC_2.0)is needed by libdnet-1.12-6.el6.i686 
  6.       libc.so.6(GLIBC_2.1)is needed by libdnet-1.12-6.el6.i686 
  7.       libc.so.6(GLIBC_2.1.3)is needed by libdnet-1.12-6.el6.i686 
  8.       libc.so.6(GLIBC_2.3)is needed by libdnet-1.12-6.el6.i686 
  9.       libc.so.6(GLIBC_2.3.4)is needed by libdnet-1.12-6.el6.i686 
  10.       libc.so.6(GLIBC_2.4)is needed by libdnet-1.12-6.el6.i686 
  11.       libc.so.6(GLIBC_2.7)is needed by libdnet-1.12-6.el6.i686 

安装DAQ 这是安装snort的前提。下面开始安装DAQ

  1. cd daq-2.0.4 
  2. ./configure 
  3. make && make install 

安装snort2.9,(安装snort前一定要编译安装libdnet-1.12.tgz)

  1. cd /usr/local/src/snort-2.9.7.0 
  2. ./configure--enable-sourcefire 
  3. make && make install 

四、添加用户和组

创建用户、组、设置权限因为在root身份下解包的文件权限都是跟root有关,所以要修改成snort用户的属主和相关权限。

  1. groupadd -g 40000 snort 
  2. useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort 
  3. cd /etc/snort 
  4. chown -R snort:snort *            
  5. \\执行这条命令前先看看文件的属主 

执行之后:

  1. [root@localhost snort]# ls -l 
  2. total 312 
  3. -rw-r--r--. 1 snort snort   1281 Nov 2806:14 attribute_table.dtd 
  4. -rw-r--r--. 1 snort snort   3757 Nov 28 06:14 classification.config 
  5. drwxr-xr-x. 2 snort snort   4096 Nov 18 2014 etc 
  6. -rw-r--r--. 1 snort snort  23058 Nov 28 06:14 file_magic.conf 
  7. -rw-r--r--. 1 snort snort  31643 Nov 28 06:14 gen-msg.map 
  8. -rw-r--r--. 1 snort snort  13478 Nov 28 06:14 Makefile 
  9. -rw-r--r--. 1 snort snort    190 Nov 28 06:14 Makefile.am 
  10. -rw-r--r--. 1 snort snort  12388 Nov 28 06:14 Makefile.in 
  11. drwxr-xr-x. 2 snort snort   4096 Nov 18 2014 preproc_rules 
  12. -rw-r--r--. 1 snort snort    687 Nov 28 06:14 reference.config 
  13. drwxr-xr-x. 2 snort snort   4096 Nov 28 06:15 rules 
  14. -rw-r--r--. 1 snort snort  26772 Nov 28 06:14 snort.conf 
  15. drwxr-xr-x. 4 snort snort   4096 Nov 11 2014 so_rules 
  16. -rw-r--r--. 1 snort snort   2335 Nov 28 06:14 threshold.conf 
  17. -rw-r--r--. 1 snort snort 160606 Nov 2806:14 unicode.map 

下面,接着设置/var/log/snort目录的属主属性。

  1. chown -R snort:snort/var/log/snort 

五、配置Snort

1.新建/etc/snort目录

  1. #mkdir /etc/snort 
  2. #cd /etc/snort 

复制配置文件到当前目录

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

将/usr/local/src/snort-2.9.7.0/etc下配置文件复制到当前目录

tar -zvxf /root/Desktop/snortrules-snapshot-2970.tar.gz把规则包解压到当前目录

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

在/etc/snort/rules下新建white_list.rules和black_list.rules两个文件。

2.编辑snort配置文件

vi /etc/snort/snort.conf

  1. 45行  ipvar HOME_NET any         >        ipvar HOME_NET 192.168.x.x    你的的IP网段,写成CIDR格式,可以添加多个网段 
  2.  举例:ipvarHOME_NET  [192.168.0.0/16,172.16.0.0/16] 
  3.    ipvar EXTERNAL_NET any             >     ipvar EXTERNAL_NET!$HOME_NET    
  4. 104行 var RULE_PATH ../ruls                >   var RULE_PATH /etc/snort/rules 
  5. 105行 var SO_RULE_PATH  ../so_rules       >  var SO_RULE_PATH     /etc/snort/so_rules 
  6. 106行 var PREPROC_RULE_PATH ../preproc_rules   >    var PREPROC_RULE_PATH/etc/snort/preproc_rules 
  7.   
  8. 113行 var WHITE_LIST_PATH ../rules             >   109 varWHITE_LIST_PATH   /etc/snort/rules 
  9. 114行 var BLACK_LIST_PATH ../rules             >   110 var BLACK_LIST_PATH   /etc/snort/rules 

3.设置log目录属组 snort.snort

config logdir :/var/log/snort

4.配置输出插件:

到521行修改成如下内容:

output unified2:filename snort.log,limit 128

注意:也可以启用tcpdump插件,启用后在/var/log/snort/目录下产生tcpdump.log.时间戳的文件用

tcpdump -r 文件名来读取这个文件。

在OSSIM里是这样写的“output unified2: filenamesnort,limit 128”

还可以,取消snort.conf文件中以下几行的注释,可以使snort向系统日志文件中日志数据:报警存储在哪儿?

output alert_syslog: LOG_AUTH LOG_ALERT

输出格式如下:

  1. May 10 00:03:38 xxxxxx snort: INFO - ICQAccess [Classification: 
  2. content:"MKD / " Priority: 0]:1.1.1.1:5435 -> 1.2.2.5:80 

六、配置开机自动启动 snort程序

接着输入如下命令:

  1. cd /usr/local/src/snort-2.9.7.0/rpm 
  2. cp snortd /etc/init.d/snortd 
  3. cp /usr/local/src/snort-2.9.7.0/rpm/snort.sysconfig  /etc/sysconfig/snort 
  4. chkconfig --add /etc/init.d/snortd 
  5. chkconfig snortd on 

新建连接文件

  1. cd /usr/sbin 
  2. ln -s /usr/local/bin/snort snort  
  3. 在/usr/sbin/目录中新建连接文件snort 

新建目录设置权限

  1. mkdir -p /usr/local/lib/snort_dynamicrules 
  2. chown -R snort:snort /usr/local/lib/snort_dynamicrules 
  3. chown -R 755 /usr/local/lib/snort_dynamicrules 

七、测试snort

  1. #snort -T -i eht0 -u snort -g snort -c /etc/snort/snort.conf 

如果配置正确系统提示成功。

测试snort

图2

如果你看到“snort successfully validated the configuration!”提示就表示安装配置成功啦!别高兴太早,下面还有更艰巨的任务。

  1. #snort -vde 

1)添加一条规则测试

  1. #vi /etc/snort/rules/local.rules 

加入如下内容:

  1. alert icmp any any -> $HOME_NET any (msg:"Ping";sid:1000003;rev:1;) 

其他规则:

  1. drop icmp any any -> any any (itype:0;msg:"Chan Ping";sid:1000002;) 
  2. alert icmp any any -> $HOME_NET 81 (msg:"Scanning Port 81";sid:1000001;rev:1;) 
  3. alert tcp any any -> $HOME_NET 22 (msg:"Scanning Port 22";sid:1000002;rev:1;) 
  4. alert icmp any any -> any any (msg:"UDP Tesing Rule";sid:1000006;rev:1;) 
  5. alert tcp any any -> $HOME_NET 80(msg:"HTTP Test!!!"; classtype:not-suspicious; sid:1000005;  rev:1;) 

友情提示:

对Snort性能影响最大的是Snort的配置和规则集的设置,如果你是第一次接触IDS可能更在乎功能的实现而不注重性能,如果你是专家就要考虑规则之间的逻辑。

举个例子,假设你直接配置snort输出插件交给snort产生输出,发送到数据库,这个时候在加上你启用了很多规则,会导致Snort性能严重下降甚至崩溃。

2.)Ping Snort主机

我们用ping命令来进行测试,是为了使其产生alert。ping命令使用的是最典型的ICMP回显保温,在IDS中使用Libpcap函数所捕获的也就是ICMP数据包。下面在Snort主机上操作:

  1. snort -i eth0 -c /etc/snort/snort.conf -A fast-l /var/log/snort/ 

3) 设置规则的注意事项:

对snort的性能影响最大的是snort的配置设定以及规则集设置。内部瓶颈则主要出现在包解码阶段,要snort检查包的容,那么它比一般的规则都要更加耗费系统资源。启用的检查包内容的规则越多,snort的运行就需要越多的系统资源。如果要激活预处理程序中的某些设置选项,就会需要消耗额外的系统资源。最明显的例子就是启用在frag2预处理程序和stream4预处理程序中的“最大存储容量(memcap)”选项。如果您打算激活大量耗费资源的预处理程序选项,最好确定有足够的硬件资源的支持。我曾经遇到过一个用户花了大笔的钱购买了最先进的 IDS由于配置不当,连检测100M网都出现了丢包现象。

4) 如果顺利,便可以在alert中产生告警,用下面命令查看

  1. #cd /var/log/snort/ 
  2. #tail -f /var/log/snort/alert 

测试snort

图3

收到告警,就代表阶段性胜利,我们希望把这些告警存储到数据库中,下面接着安装数据库。

八、安装 MySql

  1. #yum install -y mysql-server mysql-devel php-mysql php-adodb php-pear php-gd libtool php-imapphp-ldap php-mbstring php-odbc php-pear php-xml php-pecl-apc 
  2. chkconfig --levels235 mysqld on 
  3. /etc/init.d/mysqldstart 

接着为数据库管理员赋密码,我们可以用mysql_secure_installation(secure installation是安全的安装模式,用来安全的初始化我们的MySql服务器)命令也可以用下面的方法。

  1. /usr/bin/mysqladmin -u root password '123456'   

注意以后用root用户登录phpmyadmin是密码也是这个。

九、建库并设定读取权限

  1. #mysql -u root -p 

输入刚 设置的密码123456

  1. mysql>create database snort; 
  2.   
  3. mysql>use snort; 
  4. mysql>create user 'snort'@'localhost' IDENTIFIED BY '123456'; 

这里的123456是mysql snort 的password

创建名为snort、密码为123456的数据库用户并赋予名为snort数据库权限

  1. mysql>grant create,select,update,insert,delete on snort.* tosnort@localhost identified by '123456'; 
  2.   
  3. mysql>set password for ‘snort’@’localhost’=password('123456'); 
  4.  
  5. mysql>source /usr/local/src/barnyard2-1.9/schemas/create_mysql;     

注意:路径先解压barnyard2-2-1.13这个文件执行前确保snort库被选中,路径写对。

报错:ERROR 1046 (3D000): No database selecte

新建数据库也可以用以下命令:

  1. #echo "create database snort;" |mysql -u root -p 

提示一下错误:

  1. ERROR: 
  2. Failed to open file'/usr/local/src/barnyard2-2-1.13/schemas/create_mysql', error: 2 
  3.   
  4. Mysql>usr snort; 
  5. mysql>show tables; 
  6. +------------------+ 
  7. |Tables_in_snort  | 
  8. +------------------+ 
  9. |data             | 
  10. |detail           | 
  11. |encoding         | 
  12. |event            | 
  13. |reference_system | 
  14. |schema           | 
  15. |sensor           | 
  16. |udphdr           | 
  17. +------------------+ 
  18. 16rows in set (0.00 sec) 
  19.   
  20. mysql>flush privileges; 
  21. mysql>exit 

十、安装配置Barnyard2

上面提到过,Snort配置文件中自身含有插件允许将Snort报警记录到Mysql中,但这样以来,系统会形成瓶颈 ,当IDS系统检测到攻击行为,就会用到INSERT语句向数据库里写入数据,导致到UPDATE时非常慢。所以直接将Snort输出到数据库,这种方案的效率并不高。这里就使用外部代理将报警输出到Barnyard2。言而言之Barnyard的作用是读取snort产生的二进制事件文件并存储到MySQL。

1.源码包方式安装

  1. cd /usr/local/src/ 
  2. tar zxvf /root/Desktop/barnyard2-1-9.tar.gz 
  3. cd barnyard2-1-9/ 
  4. ./configure--with-mysql --with-mysql-libraries=/usr/lib64/mysql  \\配置参数很重要切勿出错。 
  5. make &&make install 

2.第二种方法:用GIT安装

也下面的可以安装

  1. git clone git://github.com/firnsy/barnyard2.git 
  2. cd barnyard2/ 
  3. ./autogen.sh 
  4. autoreconf -fvi -I ./m4  
  5. ./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql/ 
  6.  make && make install 

3.配置barnyard2

首先创建目录和文件

  1. mkdir /var/log/barnyard2 
  2. touch /var/log/snort/barnyard2.waldo 
  3. [root@localhost barnyard2]# ls -l/var/log/snort/barnyard2.waldo 
  4. -rw-r--r--. 1 root root 0 Nov 28 06:56 /var/log/snort/barnyard2.waldo 

接下来还是要设置属主

  1. #chown snort.snort /var/log/snort/barnyard2.waldo 
  2. ls -l /var/log/snort/barnyard2.waldo 
  3. -rw-r--r--. 1 snort snort 0 Nov 28 06:56 /var/log/snort/barnyard2.waldo 

根Snort类似,Barnyard的配置也是通过.conf文件来完成,为了达到这一目的将barnyard2的配置模板文件复制到/etc/snort目录下。

  1. #cp /root/Desktop/barnyard2-1.9/etc/barnyard2.conf /etc/snort 

4.修改配置文件

加入如下行内容

  1. #vi/etc/snort/barnyard2.conf 
  2. config logdir:/var/log/barnyard2              \\该目录权限snort.snort 
  3. config hostname:  localhost 
  4. config interface: eth0 
  5. config waldo_file:/var/log/snort/barnyard2.waldo 

数据库输出插件可以将Snort二进制的日志存放到Mysql数据库中,下面这条配置定义了用户snort,密码:123456,数据库名称:snort 以及主机名localhost

  1. output database: log,mysql,user=snort password=123456 dbname=snort host=localhost 

编辑完成后保存退出。

接着新建一个文件。

touch /var/log/snort/barnyard2.waldo

5.修改属主

  1. chown snort.snort /var/log/barnyard2 
  2. chown snort.snort /var/log/snort/barnyard2.waldo 
  3. cp /etc/snort/etc/sid-msg.map /etc/snort 

6.Snort 和Barnyard 测试

  1. snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 -D 

你不会看到输出结果,因为程序在后台运行,-D 参数表示后台运行。

同样ping你的主机。 继续运行以下内容

  1. barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort 

(该命令为一行)

wKioL1hOY-aA0fH3AAC4lXkaeqs715.jpg

图4

注意:跟snort命令类似,barnyard2后面还也可以跟参数 “-T”表示测试。另外,针对baryard2测试时的问题在http://edu.51cto.com/course/cid-7896.html 课程中有详细的视频讲解。

此时,报警到底存入到数据库了吗?,可以检测下:

  1. #mysql -u snort -p -D snort -e "select count(*) from event" 

#mysql -u snort -p -D snort -e \"select count(*) from event\"

图5

如果没有那么下面需要检查配置文件并重启程序,对于他的参数解释如下:

  1. #barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w/var/log/snort/barnyard2.waldo  

(注意这是一条完整的命令)

解释:

-c 该选项告诉Barnyard 配置文件的路径,是必选项。

-d 告诉Barnyard Snort Unified格式文件的路径,所有Unified文件必须放在该目录下,必选项。

-f 该选项告诉Barnyard以连续方式运行时需要的Unified文件的基本名字,因为Snort在每次生成的Snort Unified文件后面加了一个UNIX时间戳;基本名字就是去掉时间戳后缀的文件名。

-w 该选项开启检验指示功能,用于告诉Barnyard检验点文件的名字,也叫做waldo文件。这个文件用于记录文件中最近处理的报警。无果不使用waldo文件,则Barnyard必须完整的载入一个日志文件,这就好像把已经存在的报警信息又传送到了入侵数据库中。

此外还可以以调试模式运行加参数-R。

本文到此大家需要多花时间练习,下次为大家介绍如何配置BASE。本文录制的视频也已经上线,大家可以参考http://edu.51cto.com/course/course_id-7896.html

【本文为51CTO专栏作者“李晨光”原创稿件,转载请联系原作者】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO博客
相关推荐

2016-10-07 23:06:31

2011-08-30 14:03:09

phpMyAdminCentOS 6.0

2010-01-15 10:16:50

CentOS rpm安

2012-09-03 10:34:30

2010-01-18 10:05:25

2010-08-25 14:37:38

snort入侵检测

2010-09-08 13:49:36

2017-03-20 15:08:04

RedisNoSQLcentos6

2015-05-25 19:34:06

KickstartCentOS

2017-03-20 16:12:41

opensslcentosnginx

2010-03-29 15:57:34

2011-03-22 10:54:01

2010-08-25 14:58:37

2014-06-24 13:23:13

2011-03-23 11:24:09

2009-09-17 09:44:31

Flex for ec

2019-04-04 10:39:23

云平台云架构云计算

2011-03-31 17:14:56

MySQL安装

2011-03-09 10:25:25

Linux安装LAMP

2021-12-31 08:15:00

Percona SerMySQL开发
点赞
收藏

51CTO技术栈公众号