本教程基于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为例进行安装)
图1
(4).将系统IP地址改为静态IP
默认安装,网络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" -> BOOTPROTO="static"
接着,增加以下内容:
IPADDR=192.168.91.29NETMASK=255.255.255.0GATEWAY=192.168.91.2DNS1=192.168.91.2DNS2=8.8.8.8\\DNS配置根据当地网络供应商进行添加
DNS还可以在其他的文件进行配置
#vi/etc/resolv.conf
加入
nameserver202.96.2.2
退出保存,重启网络服务。实际 /etc/resolv.conf 是自动调用之前网卡配置文件DNS配置信息。
(5).本套教程主要基于网络安装所以大家必须保证网络畅通。
三、安装依赖包
1.安装wget工具
#yuminstall-ywget
更换成阿里云的源
#wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-6.repo#yumcleanall#yummakecache
更新系统(完成后会升级所有包,改变软件设置和系统设置,系统版本内核都升级)
#yum-yupdate#yuminstall-yepel-release
安装epel源,EPEL,即ExtraPackages for Enterprise Linux,这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的,对RHEL标准yum源是一个很好的补充,完全免费使用,由Fedora项目维护,EPEL 包含一个叫做epel-release的包,这个包包含了EPEL源的gpg密钥和软件源信息。您可以通过yum安装到您的企业版Linux发行版上。
检查系统是否安装epel-release
#rpm-qepel-releasepackageepel-releaseisnotinstalled
2.安装基本环境和依赖包
#yuminstall-ygccgcc-c++flexbisonzlib*libxml2libpcap*pcre*tcpdumpgitlibtoolcurlmanmake
3.解压DAQ、Libdnet、Snort
在服务器的安装配置过程中,大家很可能会到官网去下载最新版本的源码包,但是那样以来就会遇到各种依赖包缺失的问题,从而导致无法安装成功。因为有些软件比如Snort要在DAQ安装好之后才能继续,而DAQ依赖于Libdnet安装好了,才能再安装上DAQ。所以安装源码的顺序犹然重要。在学习本文时一定要注意版本的一致性,也就是大家一定要挑选本文指定的版本进行试验,只要成功了,你对Snort配置的信心就会大增,学习兴趣也更加浓郁。
当然,使用源码安装并不特别复杂,只是在安装过程里排错的难度较大。如何解决安装过程中的依赖问题,可以参考《如何解决源码包安装时的依赖性问题》http://chenguang.blog.51cto.com/350944/1034095 。
给大家打好预防针了,下面继续安装。
cd/usr/local/srctar-zxvf/root/Desktop/libdnet-1.12.tgztar-zxvf/root/Desktop/daq-2.0.4.tar.gztar-zxvf/root/Desktop/snort-2.9.7.0.tar.gz
安装libdnet-1.12.tgz
cd/usr/local/src/libdnet-1.12/./configuremake&&makeinstall
友情提示:
有些初学者会选择安装rpm包,尤其手动安装libdnet这个包时会遭遇以下问题:
[root@localhost~]#rpm-ivhlibdnet-1.12-6.el6.i686.rpmwarning:libdnet-1.12-6.el6.i686.rpm:HeaderV3RSA/SHA256Signature,keyID0608b895:NOKEYerror:Faileddependencies:libc.so.6isneededbylibdnet-1.12-6.el6.i686libc.so.6(GLIBC_2.0)isneededbylibdnet-1.12-6.el6.i686libc.so.6(GLIBC_2.1)isneededbylibdnet-1.12-6.el6.i686libc.so.6(GLIBC_2.1.3)isneededbylibdnet-1.12-6.el6.i686libc.so.6(GLIBC_2.3)isneededbylibdnet-1.12-6.el6.i686libc.so.6(GLIBC_2.3.4)isneededbylibdnet-1.12-6.el6.i686libc.so.6(GLIBC_2.4)isneededbylibdnet-1.12-6.el6.i686libc.so.6(GLIBC_2.7)isneededbylibdnet-1.12-6.el6.i686
安装DAQ 这是安装snort的前提。下面开始安装DAQ
cddaq-2.0.4./configuremake&&makeinstall
安装snort2.9,(安装snort前一定要编译安装libdnet-1.12.tgz)
cd/usr/local/src/snort-2.9.7.0./configure--enable-sourcefiremake&&makeinstall
四、添加用户和组
创建用户、组、设置权限因为在root身份下解包的文件权限都是跟root有关,所以要修改成snort用户的属主和相关权限。
groupadd-g40000snortuseraddsnort-u40000-d/var/log/snort-s/sbin/nologin-cSNORT_IDS-gsnortcd/etc/snortchown-Rsnort:snort*\\执行这条命令前先看看文件的属主
执行之后:
[root@localhostsnort]#ls-ltotal312-rw-r--r--.1snortsnort1281Nov2806:14attribute_table.dtd-rw-r--r--.1snortsnort3757Nov2806:14classification.configdrwxr-xr-x.2snortsnort4096Nov182014etc-rw-r--r--.1snortsnort23058Nov2806:14file_magic.conf-rw-r--r--.1snortsnort31643Nov2806:14gen-msg.map-rw-r--r--.1snortsnort13478Nov2806:14Makefile-rw-r--r--.1snortsnort190Nov2806:14Makefile.am-rw-r--r--.1snortsnort12388Nov2806:14Makefile.indrwxr-xr-x.2snortsnort4096Nov182014preproc_rules-rw-r--r--.1snortsnort687Nov2806:14reference.configdrwxr-xr-x.2snortsnort4096Nov2806:15rules-rw-r--r--.1snortsnort26772Nov2806:14snort.confdrwxr-xr-x.4snortsnort4096Nov112014so_rules-rw-r--r--.1snortsnort2335Nov2806:14threshold.conf-rw-r--r--.1snortsnort160606Nov2806:14unicode.map
下面,接着设置/var/log/snort目录的属主属性。
chown-Rsnort:snort/var/log/snort
五、配置Snort
1.新建/etc/snort目录
#mkdir/etc/snort#cd/etc/snort
复制配置文件到当前目录
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
45行ipvarHOME_NETany>ipvarHOME_NET192.168.x.x你的的IP网段,写成CIDR格式,可以添加多个网段举例:ipvarHOME_NET[192.168.0.0/16,172.16.0.0/16]ipvarEXTERNAL_NETany>ipvarEXTERNAL_NET!$HOME_NET104行varRULE_PATH../ruls>varRULE_PATH/etc/snort/rules105行varSO_RULE_PATH../so_rules>varSO_RULE_PATH/etc/snort/so_rules106行varPREPROC_RULE_PATH../preproc_rules>varPREPROC_RULE_PATH/etc/snort/preproc_rules113行varWHITE_LIST_PATH../rules>109varWHITE_LIST_PATH/etc/snort/rules114行varBLACK_LIST_PATH../rules>110varBLACK_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
输出格式如下:
May1000:03:38xxxxxxsnort:INFO-ICQAccess[Classification:content:"MKD/"Priority:0]:1.1.1.1:5435->1.2.2.5:80
六、配置开机自动启动 snort程序
接着输入如下命令:
cd/usr/local/src/snort-2.9.7.0/rpmcpsnortd/etc/init.d/snortdcp/usr/local/src/snort-2.9.7.0/rpm/snort.sysconfig/etc/sysconfig/snortchkconfig--add/etc/init.d/snortdchkconfigsnortdon
新建连接文件
cd/usr/sbinln-s/usr/local/bin/snortsnort在/usr/sbin/目录中新建连接文件snort
新建目录设置权限
mkdir-p/usr/local/lib/snort_dynamicruleschown-Rsnort:snort/usr/local/lib/snort_dynamicruleschown-R755/usr/local/lib/snort_dynamicrules
七、测试snort
#snort-T-ieht0-usnort-gsnort-c/etc/snort/snort.conf
如果配置正确系统提示成功。
图2
如果你看到“snort successfully validated the configuration!”提示就表示安装配置成功啦!别高兴太早,下面还有更艰巨的任务。
#snort-vde
1)添加一条规则测试
#vi/etc/snort/rules/local.rules
加入如下内容:
alerticmpanyany->$HOME_NETany(msg:"Ping";sid:1000003;rev:1;)
其他规则:
dropicmpanyany->anyany(itype:0;msg:"ChanPing";sid:1000002;)alerticmpanyany->$HOME_NET81(msg:"ScanningPort81";sid:1000001;rev:1;)alerttcpanyany->$HOME_NET22(msg:"ScanningPort22";sid:1000002;rev:1;)alerticmpanyany->anyany(msg:"UDPTesingRule";sid:1000006;rev:1;)alerttcpanyany->$HOME_NET80(msg:"HTTPTest!!!";classtype:not-suspicious;sid:1000005;rev:1;)
友情提示:
对Snort性能影响最大的是Snort的配置和规则集的设置,如果你是第一次接触IDS可能更在乎功能的实现而不注重性能,如果你是专家就要考虑规则之间的逻辑。
举个例子,假设你直接配置snort输出插件交给snort产生输出,发送到数据库,这个时候在加上你启用了很多规则,会导致Snort性能严重下降甚至崩溃。
2.)Ping Snort主机
我们用ping命令来进行测试,是为了使其产生alert。ping命令使用的是最典型的ICMP回显保温,在IDS中使用Libpcap函数所捕获的也就是ICMP数据包。下面在Snort主机上操作:
snort-ieth0-c/etc/snort/snort.conf-Afast-l/var/log/snort/
3) 设置规则的注意事项:
对snort的性能影响最大的是snort的配置设定以及规则集设置。内部瓶颈则主要出现在包解码阶段,要snort检查包的容,那么它比一般的规则都要更加耗费系统资源。启用的检查包内容的规则越多,snort的运行就需要越多的系统资源。如果要激活预处理程序中的某些设置选项,就会需要消耗额外的系统资源。最明显的例子就是启用在frag2预处理程序和stream4预处理程序中的“最大存储容量(memcap)”选项。如果您打算激活大量耗费资源的预处理程序选项,最好确定有足够的硬件资源的支持。我曾经遇到过一个用户花了大笔的钱购买了最先进的 IDS由于配置不当,连检测100M网都出现了丢包现象。
4) 如果顺利,便可以在alert中产生告警,用下面命令查看
#cd/var/log/snort/#tail-f/var/log/snort/alert
图3
收到告警,就代表阶段性胜利,我们希望把这些告警存储到数据库中,下面接着安装数据库。
八、安装 MySql
#yuminstall-ymysql-servermysql-develphp-mysqlphp-adodbphp-pearphp-gdlibtoolphp-imapphp-ldapphp-mbstringphp-odbcphp-pearphp-xmlphp-pecl-apcchkconfig--levels235mysqldon/etc/init.d/mysqldstart
接着为数据库管理员赋密码,我们可以用mysql_secure_installation(secure installation是安全的安装模式,用来安全的初始化我们的MySql服务器)命令也可以用下面的方法。
/usr/bin/mysqladmin-urootpassword"123456"
注意以后用root用户登录phpmyadmin是密码也是这个。
九、建库并设定读取权限
#mysql-uroot-p
输入刚 设置的密码123456
mysql>createdatabasesnort;mysql>usesnort;mysql>createuser"snort"@"localhost"IDENTIFIEDBY"123456";
这里的123456是mysql snort 的password
创建名为snort、密码为123456的数据库用户并赋予名为snort数据库权限
mysql>grantcreate,select,update,insert,deleteonsnort.*tosnort@localhostidentifiedby"123456";mysql>setpasswordfor‘snort’@’localhost’=password("123456");mysql>source/usr/local/src/barnyard2-1.9/schemas/create_mysql;
注意:路径先解压barnyard2-2-1.13这个文件执行前确保snort库被选中,路径写对。
报错:ERROR 1046 (3D000): No database selecte
新建数据库也可以用以下命令:
#echo"createdatabasesnort;"|mysql-uroot-p
提示一下错误:
ERROR:Failedtoopenfile"/usr/local/src/barnyard2-2-1.13/schemas/create_mysql",error:2Mysql>usrsnort;mysql>showtables;+------------------+|Tables_in_snort|+------------------+|data||detail||encoding||event||reference_system||schema||sensor||udphdr|+------------------+16rowsinset(0.00sec)mysql>flushprivileges;mysql>exit
十、安装配置Barnyard2
上面提到过,Snort配置文件中自身含有插件允许将Snort报警记录到Mysql中,但这样以来,系统会形成瓶颈 ,当IDS系统检测到攻击行为,就会用到INSERT语句向数据库里写入数据,导致到UPDATE时非常慢。所以直接将Snort输出到数据库,这种方案的效率并不高。这里就使用外部代理将报警输出到Barnyard2。言而言之Barnyard的作用是读取snort产生的二进制事件文件并存储到MySQL。
1.源码包方式安装
cd/usr/local/src/tarzxvf/root/Desktop/barnyard2-1-9.tar.gzcdbarnyard2-1-9/./configure--with-mysql--with-mysql-libraries=/usr/lib64/mysql\\配置参数很重要切勿出错。make&&makeinstall
2.第二种方法:用GIT安装
也下面的可以安装
gitclonegit://github.com/firnsy/barnyard2.gitcdbarnyard2/./autogen.shautoreconf-fvi-I./m4./configure--with-mysql--with-mysql-libraries=/usr/lib64/mysql/make&&makeinstall
3.配置barnyard2
首先创建目录和文件
mkdir/var/log/barnyard2touch/var/log/snort/barnyard2.waldo[root@localhostbarnyard2]#ls-l/var/log/snort/barnyard2.waldo-rw-r--r--.1rootroot0Nov2806:56/var/log/snort/barnyard2.waldo
接下来还是要设置属主
#chownsnort.snort/var/log/snort/barnyard2.waldols-l/var/log/snort/barnyard2.waldo-rw-r--r--.1snortsnort0Nov2806:56/var/log/snort/barnyard2.waldo
根Snort类似,Barnyard的配置也是通过.conf文件来完成,为了达到这一目的将barnyard2的配置模板文件复制到/etc/snort目录下。
#cp/root/Desktop/barnyard2-1.9/etc/barnyard2.conf/etc/snort
4.修改配置文件
加入如下行内容
#vi/etc/snort/barnyard2.confconfiglogdir:/var/log/barnyard2\\该目录权限snort.snortconfighostname:localhostconfiginterface:eth0configwaldo_file:/var/log/snort/barnyard2.waldo
数据库输出插件可以将Snort二进制的日志存放到Mysql数据库中,下面这条配置定义了用户snort,密码:123456,数据库名称:snort 以及主机名localhost
outputdatabase:log,mysql,user=snortpassword=123456dbname=snorthost=localhost
编辑完成后保存退出。
接着新建一个文件。
touch /var/log/snort/barnyard2.waldo
5.修改属主
chownsnort.snort/var/log/barnyard2chownsnort.snort/var/log/snort/barnyard2.waldocp/etc/snort/etc/sid-msg.map/etc/snort
6.Snort 和Barnyard 测试
snort-q-usnort-gsnort-c/etc/snort/snort.conf-ieth0-D
你不会看到输出结果,因为程序在后台运行,-D 参数表示后台运行。
同样ping你的主机。 继续运行以下内容
barnyard2-c/etc/snort/barnyard2.conf-d/var/log/snort-fsnort.log-w/var/log/snort/barnyard2.waldo-gsnort-usnort
(该命令为一行)
图4
注意:跟snort命令类似,barnyard2后面还也可以跟参数 “-T”表示测试。另外,针对baryard2测试时的问题在http://edu.51cto.com/course/cid-7896.html 课程中有详细的视频讲解。
此时,报警到底存入到数据库了吗?,可以检测下:
#mysql-usnort-p-Dsnort-e"selectcount(*)fromevent"
图5
如果没有那么下面需要检查配置文件并重启程序,对于他的参数解释如下:
#barnyard2-c/etc/snort/barnyard2.conf-d/var/log/snort/-fsnort.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
【本文为清一色专栏作者“李晨光”原创稿件,转载请联系原作者】
戳这里,看该作者更多好文