入侵检测系统Snort的安装、配置与测试
在学习snort的时候,参考了很多文章,遇到了许多坑。这里是完成搭建的过程。
在Ubuntu 16.04下安装snort
在配置过程中,需要弄清楚snort的数据流向,这对配置非常重要,也方便我们排错。
具体的数据流向为:
snort->Barnyard2->mysql->base
snort将告警信息通过Barnyard2写入mysql,base读取mysql中的数据显示出来。
安装snort
首先,新建一个文件夹来保存需要的tar包的文件夹
#mkdir ~/snort_src
#cd ~/snort_src
安装必备的组件
#sudo apt-get install -y build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev
build-essential:提供用于编译软件的构建工具(GCC等)。
bison,flex:DAQ所需的解析器(DAQ将在下面安装)。
libpcap-dev:Snort所需的网络流量捕获库。
libpcre3-dev:支持Snort所需正则表达式的函数库。
libdumbnet-dev:libdnet库为几个低层网络例程提供了一个简化的可移植接口。许多安装Snort的指南都是从源代码安装此库的,尽管这不是必需的。
zlib1g-dev:Snort所需的压缩库。
liblzma-dev:提供对swf文件的解压缩(adobe flash)
openssl和libssl-dev:提供SHA和MD5文件签名
Snort所需的最后一个库是Nghttp2的开发库
#sudo apt-get install -y libnghttp2-dev
在snort官网下载数据采集器(DAQ)来抽象对数据包捕获库的调用
#cd ~/snort_src
#wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz
#tar -xvzf daq-2.0.6.tar.gz
#cd daq-2.0.6
#./configure
#make
#sudo make install
源码安装snort
#cd ~/snort_src
#wget https://snort.org/downloads/snort/snort-2.9.9.0.tar.gz
#tar -xvzf snort-2.9.9.0.tar.gz
#cd snort-2.9.9.0
#./configure --enable-sourcefire
#make
#sudo make install
更新共享库
#sudo ldconfig
Snort安装会将Snort二进制文件放在/ usr / local / bin / snort,因此,创建到/ usr / sbin / snort的符号链接
#sudo ln -s /usr/local/bin/snort /usr/sbin/snort
安装后输入snort -V看到以下内容
将snort配置为NIDS
基本配置:出于安全原因, Snort应该以非特权用户身份运行,创建一个snort用户和组
#sudo groupadd snort
#sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
创建snort需要的文件和文件夹
# 创建Snort目录:
#sudo mkdir /etc/snort
#sudo mkdir /etc/snort/rules
#sudo mkdir /etc/snort/rules/iplists
#sudo mkdir /etc/snort/preproc_rules
#sudo mkdir /usr/local/lib/snort_dynamicrules
#sudo mkdir /etc/snort/so_rules
# 创建一些存储规则和ip列表的文件
#sudo touch /etc/snort/rules/iplists/black_list.rules
#sudo touch /etc/snort/rules/iplists/white_list.rules
#sudo touch /etc/snort/rules/local.rules
#sudo touch /etc/snort/sid-msg.map
# 创建日志文件
#sudo mkdir /var/log/snort
#sudo mkdir /var/log/snort/archived_logs
# 调整权限
#sudo chmod -R 5775 /etc/snort
#sudo chmod -R 5775 /var/log/snort
#sudo chmod -R 5775 /var/log/snort/archived_logs
#sudo chmod -R 5775 /etc/snort/so_rules
#sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
# 改变文件夹的所有权
#sudo chown -R snort:snort /etc/snort
#sudo chown -R snort:snort /var/log/snort
#sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
将解压后snort中的文件复制到我们新建的文件夹中
#cd ~/snort_src/snort-2.9.9.0/etc/
#sudo cp *.conf* /etc/snort
#sudo cp *.map /etc/snort
#sudo cp *.dtd /etc/snort
#cd ~/snort_src/snort-2.9.9.0/src/dynamic-#preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
#sudo cp * /usr/local/lib/snort_dynamicpreprocessor/
基本的文件结构如下:
编辑snort配置文件
注释掉Snort导入默认规则文件集的行
#sudo sed -i \'s/include \$RULE\_PATH/#include \$RULE\_PATH/\' /etc/snort/snort.conf
修改snort.conf文件(这里使用gedit编辑器)
#sudo gedit /etc/snort/snort.conf
文件中修改如下 #配置网络信息,这里的IP是192.168.147.138,所以ip如下
ipvar HOME_NET 192.168.0.0/16
我们需要告诉Snort我们之前创建的所有文件夹的位置。这些设置也是snort.conf文件的一部分
var RULE_PATH /etc/snort/rules # 104行左右
var SO_RULE_PATH /etc/snort/so_rules # 105行左右
var PREPROC_RULE_PATH /etc/snort/preproc_rules # 106行左右
var WHITE_LIST_PATH /etc/snort/rules/iplists # 113行左右
var BLACK_LIST_PATH /etc/snort/rules/iplists # 114行左右
#启用规则文件
include $RULE_PATH/local.rules #取消注释,在545行左右
测试snort
#sudo snort -T -c /etc/snort/snort.conf -i ens33 #ens33是网卡,可用ifconfig查看
然后我们看到如下结果,配置成功
接下里,编辑规则文件,编写两条基本的规则
#sudo gedit /etc/snort/rules/local.rules
保存后退出
开始测试
#sudo snort -T -c /etc/snort/snort.conf -i ens33
可以看到如下结果
开始检验,用一台别的主机ping snort的主机
#sudo /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33
可以看到如下结果
到这里,基本的测试规则就完成了
在规则中,没有关于ARP欺骗检测规则定义,但是可以通过snort的内置模块进行检测。
具体配置如下
在snort.conf文件中配置
#sudo gedit /etc/snort/snort.conf
将网关地址IP地址和MAC地址双向绑定
用科来数据包播放器发送ARP欺骗报文(也可以通过kali发送ARP欺骗报文),执行以下命令
#sudo /usr/local/bin/snort -A -q -u snort -g snort -c /etc/snort/snort.conf -t ens33
可以看到如下结果,检测到欺骗报文。
安装Barnyard2和配置Mysql
下一步,安装Barnyard2,这是一个专用的后台处理程序,将有助于减少Snort服务器上的负载
安装一些必备组件
安装mysql时系统会提示输入root密码,这里我使用的密码为123
#sudo apt-get install -y mysql-server libmysqlclient-dev mysql-client autoconf libtool
编辑snort.conf文件
#sudo vi /etc/snort/snort.conf
#添加一行以告诉Snort以二进制形式输出事件。在snort.conf中的第520行之后(该行为注释掉的示例),添加以下行并保存文件:
output unified2: filename snort.u2, limit 128
接下来,安装Barnyard2
去到需要安装的目录下
#cd ~/snort_src
#wget https://github.com/firnsy/barnyard2/archive/master.tar.gz -O barnyard2-Master.tar.gz
#tar zxvf barnyard2-Master.tar.gz
#cd barnyard2-master
#autoreconf -fvi -I ./m4
Barnyard2需要访问dnet.h库,该库是我们先前与Ubuntu libdumbnet软件包一起安装的,创建一个链接
#sudo ln -s /usr/include/dumbnet.h /usr/include/dnet.h
#sudo ldconfig
根据系统结构,运行Barnyard2在MySQL的库(这里时64位的)
#./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu
然后继续
#make
#sudo make install
测试barnyard2是否安装成功
#barnyard2 -V
为Snort配置为使用Barnyard2,从源程序包中复制一些文件
#sudo cp ~/snort_src/barnyard2-master/etc/barnyard2.conf /etc/snort/
#sudo mkdir /var/log/barnyard2
#sudo chown snort.snort /var/log/barnyard2
#sudo touch /var/log/snort/barnyard2.waldo
#sudo chown snort.snort /var/log/snort/barnyard2.waldo
创建数据库
#输入的密码为安装时设定的密码
#mysql -u root -p
mysql> create database snort;
mysql> use snort;
mysql> source ~/snort_src/barnyard2-master/schemas/create_mysql
mysql> CREATE USER \'snort\'@\'localhost\' IDENTIFIED BY \'123\';
mysql> grant create, insert, select, delete, update on snort.* to \'snort\'@\'localhost\';
mysql> exit
创建数据库后,要将信息告诉Baenyard2,编辑barnyard2.conf文件
#sudo gedit /etc/snort/barnyard2.conf
在文件的末尾添加(末尾有关于数据库的配置,可以选择取消注释,然后修改)
output database: log, mysql, user=snort password=123 dbname=snort host=localhost sensor name=sensor01
然后运行如下命令:
#sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2 -w /var/log/snort/barnyard2.waldo -g snort -u snort
运行结果如图,等待数据传入
安装base
创建可视化界面,这里使用的是base,base需要php5,但是ubuntu16中以不可用,转为了php7(如果配置不对,后面配置base时会出现错误,导致有些页面显示不出来)
安装php5软件包
#sudo add-apt-repository ppa:ondrej/php
#sudo apt-get update
#sudo apt-get install -y apache2 libapache2-mod-php5.6 php5.6-mysql php5.6-cli php5.6 #php5.6-common php5.6-gd php5.6-cli php-pear php5.6-xml
安装pear图像图
#sudo pear install -f --alldeps Image_Graph
下载安装adodb
#cd ~/snort_src
#wget https://sourceforge.net/projects/adodb/files/adodb-php5-only/adodb-520-for-#php5/adodb-5.20.8.tar.gz
#tar -xvzf adodb-5.20.8.tar.gz
#sudo mv adodb5 /var/adodb
#sudo chmod -R 755 /var/adodb
下载base并复制到apache2目录下
#cd ~/snort_src
#wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz
#tar xzvf base-1.4.5.tar.gz
#sudo mv base-1.4.5 /var/www/html/base/
创建和配置base文件
#cd /var/www/html/base
#sudo cp base_conf.php.dist base_conf.php
#sudo vi /var/www/html/base/base_conf.php
文件配置如下
$BASE_urlpath = \'/base\'; # 50
$DBlib_path = \'/var/adodb/\'; # 80
$alert_dbname = \'snort\'; # 102
$alert_host = \'localhost\';
$alert_port = \'\';
$alert_user = \'snort\';
$alert_password = \'123\'; # 106
修改base文件权限
#sudo chown -R www-data:www-data /var/www/html/base
#sudo chmod o-r /var/www/html/base/base_conf.php
这里也可以不配置base文件,可以在http://localhost/base中设置
重启apache
#sudo service apache2 restart
浏览器打开 http://localhost/base/index.php
可以看到如下结果
这样就基本完成。需要更加完善则需要自定义规则。