有限公司在线网站,成都网站的建设,wordpress内容加密,苏州网站开发公司鹅鹅鹅注#xff1a;本实验分别使用kali和CentOS6.8进行测试#xff0c;可惜的是使用kali进行实验过程中遇到了困难#xff0c;未能完成完整实验#xff0c;而使用CentOS6.8成功完成了完整实验。
实验中用到的软件#xff1a;
https://download.csdn.net/download/weixin_5255…注本实验分别使用kali和CentOS6.8进行测试可惜的是使用kali进行实验过程中遇到了困难未能完成完整实验而使用CentOS6.8成功完成了完整实验。
实验中用到的软件
https://download.csdn.net/download/weixin_52553215/88800055
【实验目的】
了解IDS基本原理
掌握snort实现高级IDS
【实验内容】
1、实验环境kali
2、实现工作snort
【实验环境】
1、虚拟机平台VMware Workstation
2、操作系统kaliCentOS6.8
3、Snort:开源的入侵检测系统
【实验步骤】
Kali
1安装kali并检查网络
安装过程略。
1.1换源
执行如下命令
vim /etc/apt/sources.list
将原本的源注释掉 中科大Kali镜像源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib 将上面的源粘贴到下图所示位置 保存配置并退出 执行如下命令
apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get clean
2安装入侵检测系统Snort
2.1安装daq依赖程序
执行如下命令
sudo apt-get install flex
sudo apt-get install bison
sudo apt install aptitude
sudo aptitude install libpcap-dev
2.2安装daq
执行如下命令
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar xvfz daq-2.0.7.tar.gz
cd daq-2.0.7
./configure make sudo make install
make 2.3安装snort的依赖程序
执行如下命令
sudo su
aptitude install libpcre3-dev
aptitude install libdumbnet-dev
aptitude install zlib1g-dev
apt install openssl
apt-get install libssl-dev 安装LuaJIT
sudo wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
sudo tar -zxvf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5/
sudo make sudo make install
LuaJIT-2.0.5安装完成: 2.4安装Snort
执行如下命令
wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
tar xvfz snort-2.9.20.tar.gz
cd snort-2.9.20 ./configure --enable-sourcefire make sudo make install
报错fatal error: rpc/types.h: No such file or directory
执行如下命令
sudo apt-get install -y libtirpc-dev
sudo ln -s /usr/include/tirpc/rpc/* /usr/include/rpc
报错fatal error: netconfig.h: No such file or directory
执行如下命令
sudo ln -s /usr/include/tirpc/netconfig.h /usr/include 执行如下命令
snort 已成功安装
3对Snort进行配置
3.1创建一些必要的文件夹
#Snort的安装目录
sudo mkdir -p /etc/snort/rules/iplists
sudo mkdir -p /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules #存储过滤规则和服务器黑白名单
sudo touch /etc/snort/rules/iplists/default.blacklist
sudo touch /etc/snort/rules/iplists/default.whitelist
sudo touch /etc/snort/rules/so_rules #创建日志目录
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/rules/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
3.2复制文件到 /etc/snort
cd /home/lingqi/daq-2.0.7/LuaJIT-2.0.5/
cp ./snort-2.9.20/etc/*.conf* /etc/snort
cp ./snort-2.9.20/etc/*.map /etc/snort
cp ./snort-2.9.20/etc/*.dtd /etc/snort
cp ./snort-2.9.20/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/* /usr/local/lib/snort_dynamicpreprocessor/
3.3修改默认配置
# 打开配置文件
sudo vim /etc/snort/snort.conf
# 修改路径
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules/iplists/
var BLACK_LIST_PATH /etc/snort/rules/iplists/ # 让黑白名单生效 3.4安装rules包
wget Snort - Network Intrusion Detection Prevention System
sudo tar zxvf snortrules-snapshot-29181.tar.gz -C /etc/snort
报错 看报错描述stdin: not in gzip format其实已经说明了问题所在即文件不是gzip格式。可以使用“file”命令查看文件的具体信息 发现这个文件是 HTML document。回到snort官网直接下载文件。 sudo tar zxvf snortrules-snapshot-29181.tar.gz -C /etc/snort
sudo cp /etc/snort/so_rules/precompiled/RHEL-8/x86-64/2.9.18.1/* /usr/local/lib/snort_dynamicrules/
4启动测试
sudo snort -T -c /etc/snort/snort.conf CentOS
一、准备工作
使用镜像CentOS-6.8-x86_64-mini在虚拟机中安装操作系统。 默认安装时网络IP是自动获取的需要改成静态IP地址。
#ifconfig -a //查看网卡配置信息
#vi /etc/sysconfig/network-scripts/ifcfg-eth0 //编辑网卡配置文件
修改为静态IP地址的方法是将BOOTPROTOdhcp中的dhcp改为static然后增加以下内容根据内网环境配置IP
IPADDR192.168.91.128
NETMASK255.255.255.0
GATEWAY192.168.91.2
DNS1192.168.91.2
DNS28.8.8.8 //DNS地址可以多个要根据当地网络供应商进行添加 最后保存退出重启网络服务。 一、使用 cat /etc/issue 命令看看自己系统版本是6.几先找个小本本记下来
二、备份出问题的文件以免出错后可以恢复。 1.mkdir /etc/yum.repos.d/bakk //新建文件夹 2.mv /etc/yum.repos.d/* /etc/yum.repos.d/bakk //会出现报错不用管
三、如下打开配置文件CentOS-Base.repo vim /etc/yum.repos.d/CentOS-Base.repo
清空
把下方代码复制进去
注意如果你的系统版本不是6.7版本
需要先把代码中5个“baseurl“里的“6.7”更换成你自己的系统版本
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist does not work for you, as a fall back you can try the
# remarked out baseurl line instead.
#
# [base]
nameCentOS-$releasever - Base
#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepoosinfra$infra
#baseurlhttps://mirrorlist.centos.org/centos/$releasever/os/$basearch/
baseurlhttps://mirrors.aliyun.com/centos-vault/6.7/os/$basearch/
gpgcheck1
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #released updates
[updates]
nameCentOS-$releasever - Updates
#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepoupdatesinfra$infra
#baseurlhttps://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/updates/$basearch/
baseurlhttps://mirrors.aliyun.com/centos-vault/6.7/updates/$basearch/
gpgcheck1
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that may be useful
[extras]
nameCentOS-$releasever - Extras
#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepoextrasinfra$infra
#baseurlhttps://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/extras/$basearch/
baseurlhttps://mirrors.aliyun.com/centos-vault/6.7/extras/$basearch/
gpgcheck1
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages
[centosplus]
nameCentOS-$releasever - Plus
#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepocentosplusinfra$infra
#baseurlhttps://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/centosplus/$basearch/
baseurlhttps://mirrors.aliyun.com/centos-vault/6.7/centosplus/$basearch/
gpgcheck1
enabled0
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #contrib - packages by Centos Users
[contrib]
nameCentOS-$releasever - Contrib
#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepocontribinfra$infra
#baseurlhttps://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/contrib/$basearch/
baseurlhttps://mirrors.aliyun.com/centos-vault/6.7/contrib/$basearch/
gpgcheck1
enabled0
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 四、清除yum缓存。 yum clean all
五、将服务器上的软件包信息缓存到本地提高搜索、安装软件的速度 yum makecache
到这一步yum功能就正常开启了。 #yum -y update //更新系统时间较长 步骤6复制软件到指定目录。
将libdnet-1.12.tgz、daq-2.0.4.tar.gz、snort-2.9.7.0.tar.gz、snortrules-snapshot-2970.tar.gz这4个文件用WinSCP复制到CentOS 6.8系统/usr/local/src/目录下。 经过以上6个步骤之后Snort安装的准备工作完成。
二、编译并安装Snort
准备工作完成之后接着开始正式安装Snort。编译安装Snort需要如下10个步骤。 步骤1安装基本环境和依赖包。
#yum install -y gcc gcc-c flex bison zlib-devel zlib-static libxml2 libpcap pcre-devel pcre-static libpcap-devel.x8664 tcpdump git libtool curl man make 注意如果没有安装pcre在预编译时就会出现以下问题比如我们执行./configure时报错提示如下
ERROR! Libpcre library not found, go get it from http://www.pcre.org 步骤2解压libdnet、DAQ及Snort安装包。
在服务器的安装配置过程中大家很可能会到官网下载最新版本的源码包但是那样就会遇到各种依赖包缺失的问题导致无法安装成功。因为有些软件比如Snort要在DAQData 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。
wget http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz
tar xvfz libpcap-1.0.0.tar.gz
cd libpcap-1.0.0/
./configure
make
make install #cd daq-2.0.4
#./configure 编译环境检查完成之后我们可以看到AFPacket DAQ module,Dump DAQ module,IPFW DAQ module,PCAP DAQ module的状态都是“yes”只有这样才能继续编译软件包。 #make make install //编译、安装 ● 安装Snort 2.9安装Snort前一定要正确安装libdnet和DAQ以及zlib。
#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组新建目录/var/log/snort并且不允许登录系统 步骤4配置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 . 此步骤很关键解压到当前目录
完成此命令之后会在/etc/snort/目录下生成etc 、preproc_rules 、rules、so_rules共4个目录。 #cp /etc/snort/etc/sid-msg.map /etc/snort ● 将下载的Snort压缩包snort-2.9.7.0.tar.gz,解压缩后复制到/etc/snort/目录下。
#cd /etc/snort/
#cp /usr/local/src/snort-2.9.7.0/etc/* . ● 设置目录/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 ● 配置Snort.conf中的变量
在snort.conf配置文件中有很多变量和选择这些变量作用于rules目录下的所有规则。作为初学者需要掌握最重要的两个分别是 $HOME_NET:你想监控的网络用CIDR格式表示。 $EXTERNAL_NET连接外部不受信任的网络。 这两个变量的默认值都是“any”,简单理解就是“默认监控一切”。但是我们需要进行适当修改下面我们来设置网络变量首将第45行的ipvar HOME_NET any改为ipvar HOME_NET 192.168.x.x网段并写成CIDR格式。也可以添加多个网段本实验中监控网段为192.168.11.0/24来看下面的例子。 ipvar HOME_NET [192.168.11.0/24] //如果不加限制网段地址也可以改为any 将48行ipvar EXTERNAL_NET any 改为ipvar EXTERNAL_NET $HOME_NET 如果当前网段还有DNS、SMTP、HTTP、SQLServer、SSH服务我们推荐用如下方法定义变量。 ipvar DNS_SERVERS $HOME_NET
ipvar SMTP_SERVERS $HOME_NET
ipvar HTTP_SERVERS $HOME_NET
ipvar SQL_SERVERS $HOME_NET
ipvar SNMP_SERVERS $HOME_NET
ipvar SSH_SERVERS $HOME_NET
... 注意 对于修改$HOME_NET、$EXTERNAL_NET变量为非必须项对于初学者而言不修改沿用原默认值any也可以。 但下面的相对规则路径就必须改成绝对路径了否则启动snort时会报错。 第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 ● 设置日志保存路径。
第186行 config logdir:/var/log/snort/ ● 配置输出插件。
Snort可通过数据库插件spo_database.c和spo_database.h将预处理器输出的日志写入数据库但下面的配置一方面将报警写入alert文件另一方面将预处理器输出的日志写入到unified2格式的二进制文件中以供Barnyard2读取使用。
将第521行修改成如下内容
output unified2:filename snort.log,limit 128 以上几处修改时记得去掉注释修改完成后保存退出,对snort.conf配置文件的修改告一段落接着进行下一步操作。 步骤5新建目录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 步骤6在/usr/sbin/目录下新建名为Snort的软链接文件。
#cd /usr/sbin
#ln -s /usr/local/bin/snort snort 步骤7添加测试规则。
我们在安装Snort时已经复制了很多规则文件但这些文件内的规则默认都被注销了先不要管这些注销的规则下面我们来写一条规则。
#vi /etc/snort/rules/local.rules 加入如下内容
alert icmp any any - $HOME_NET any (msg:ICMP Packet Detected;sid:1000003;rev:1;)
保存退出我们就完成了第一条检测规则的编写。 步骤8测试Snort。
#snort -T -i eth0 -u snort -g snort -c /etc/snort/snort.conf 注意这里的参数“-T”表示测试完成之后即退出snort程序。 如果配置正确则系统启动后显示如下内容。 如出现“Snort successfully validated the configuration!”的提示则表示安装配置成功。 步骤9用ping命令测试。
用ping命令进行测试的目的是为了让snort产生报警。ping命令使用ICMP协议在IDS中使用libpcap函数所捕获的也是ICMP数据包。下面在Snort主机上操作
#snort -i eth0 -c /etc/snort/snort.conf -A fast 注:以上命令中-A fast的含义如下。
-A fast含义该参数报警信息包括以下内容 timestamp时间戳 报警消息 源/目的IP地址 端口 输入上面的命令之后报警记录在/var/log/snort/alert和/var/log/snort/snort.log.timestamp(这是一个存储数据包的二进制文件用tail命令无法读取)中。用下面的命令直观查看alert报警。
#cd /var/log/snort/
#tail -f /var/log/snort/alert //查看报警 实例 /var/log/snort/alert是文本文件我们可以用任何编辑器来查看。 下面要将这些报警存储到数据库。 注意在上面介绍的第6、7步骤中如果没有设置正确的路径那么在启动Snort时就会出现找不到动态规则的文件发生致命错误导致程序异常退出。
ERRORparser.c5047 加深理解我们说理解/etc/snort/sid-msg.map这个文件的意义非常重要实体signature表示的是报警信息列表规范化即将报警事件信息按规则编号sig_id)、规则描述sig_name)、规则分类编号sig_class_id)规则优先级sig_priority)规则版本号sig_rev),规则在snort中的内部编号sig_sidsig-gid进行规范化存储。 其中的sig_class_id和sig_prority的具体内容包含在classification.config文件中而sid_sid和sid_gid将文件/etc/snort/gen-msg.map中的一个消息和该snort规则建立一个映射关系。 对classification的解释
文件Classification.config来自于snortrules-snapshot-2970.tar.gz压缩包。
此处单词classification本意是问题分类在snort官网下载的安装包内有使用手册其中有详细的classification分类表。 用在这里表示记录入侵签名的分类各入侵签名所属的分类在编写对应的Snort规则时通过制定classification属性值来指定。
clasification.config这个配置文件同时被/etc/snort/snort.conf和/etc/snort/barnyard2.conf这两个关键配置文件所引用。 稍后我们在进行BASE调试实验过程中还会发现classification的身影。 另外做为基础用户我们需要了解 snort将1~1000000做为自己的保留的内部编号而将大于1000000 编号供使用者自己使用。这是一种习惯而非强制所以我们自己编写规则时需要在sid-msg.map添加自己的规则编号和消息。其中sig_reference、sig_class是对他其中sig_id和sig_class_id属性的扩展描述。
三、将Snort报警存入MySQL数据库
将Snort报警存入MySQL数据库需要如下几个步骤。 步骤1安装MySQL数据库及PHP扩展。
#yum install -y mysql-server mysql-devel php-mysql php-pear php-gd libtool php-imap php-ldap php-odbc php-xml php-pecl-apc
#chkconfig --level 235 mysqld on//将MySQL服务设置为在运行级别为2、3、5时都是开启状态
#/etc/init.d/mysqld start 步骤2为数据库管理员root赋予密码(为调试方便暂设定纯数字密码123456)。
#/usr/bin/mysqladmin -u root password 123456
注意root用户登录phpMyAdmin时同样使用这个密码。 步骤3创建Snort数据库并设定读取权限。
#mysql -u root -p//连接MySQL
输入步骤2中设置的密码“123456”。 mysqlCREATE DATABASE snort;//新建数据库
mysqlUSE snort;
mysqlCREATE USER snortlocalhost IDENTIFIED BY 123456; 在以上命令中“123456”是MySQL中用户Snort的密码。
接着创建名为snort、密码为“123456”的数据库用户并赋予名为“snort”的数据库权限
在进行下面的操作之前先将barnyard2-1.9.tar.gz解压到/usr/local/src/
#tar -zxvf /usr/local/src/barnyard2-1.9.tar.gz -C /usr/local/src/ 下面授权用户snort对数据库的操作权限
mysqlGRANT CREATE,SELECT,UPDATE,INSERT,DELETE ON snort.* TO snortlocalhost IDENTIFIED BY 123456;
mysqlSET PASSWORD FOR snortlocalhostPASSWORD(123456);//为用户snort设置访问密码
mysqlSOURCE /usr/local/src/barnyard2-1.9/schemas/create_mysql; //通过引入文件create_mysql来创建数据库结构该命令不可重复输入在后面的安装BASE步骤中还会在snort库中写入多个表。 执行完create_mysql脚本后用户可以通过在mysql提示符下运行下面的SQL语句来验证配置的正确性。
mysql SHOW TABLES; 见到以上表的内容后确认操作成功我们可以继续。 mysqlFLUSH PRIVILEGES; //刷新数据库权限
mysqlexit 注意在导入barnyard2-1.9中的mysql数据库表时所在路径使用绝对路径下面即将进入最容易出错的环节。 步骤4安装和配置Barnyard2。
Barnyard2的作用是读取Snort产生的二进制事件文件(/var/log/snort/snort.log.XXXXXXXXXX)并存储到MySQL中。Snort的配置文件自身含有插件它允许将Snort报警记录到MySQL中但这样一来系统数据会激增。当IDS系统检测到入侵行为时它会用INSERT语句向数据库中写入数据导致更新非常慢。所以如果直接将Snort输出到数据库在数据量增大时这种方案的效率并不高故使用外部代理将报警输出到Barnyard2。 ●源码包安装。
我们再次进入barnyard2-1.9/目录
#cd /usr/local/src/barnyard2-1.9/
#./configure --with-mysql --with-mysql-libraries/usr/lib64/mysql //此处配置参数很重要切勿出错 #make
如果在编译环节报错需要根据提示查找错误原因。 #make install ● 配置Barnyard2。
当Barnyard2正确安装完成之后我们在/var/log/中创建目录Barnyard2和文件barnyard2.waldo。
#mkdir /var/log/barnyard2
#touch /var/log/snort/barnyard2.waldo ● 设置文件barnyard2.waldo的属主和属组。
#chown snort:snort /var/log/snort/barnyard2.waldo ● 复制Barnyard2的配置文件。
与Snort配置类似Barnyard的初始化配置也是通过复制已有的.conf配置文件来完成。因此先将Barnyard2的配置模板文件复制到/etc/snort目录下。
#cp /usr/local/src/barnyard2-1.9/etc/barnyard2.conf /etc/snort ● 修改配置文件barnyard2.conf。
#vi /etc/snort/barnyard2.conf
找到对应行并将其修改成如下内容
第44行 config logdir:/var/log/barnyard2 //注意该目录属主和属组权限为snort.snort如设置错误会导致实验失败。
第56行 config hostname: localhost
第57行 config interface: eth0
第131行 config waldo_file:/var/log/snort/barnyard2.waldo 下面这条语句用来设置数据库访问权限其中定义了用户名为snort密码为123456数据库名称为snort主机名为localhost。
第318行 output database: log,mysql,usersnort password123456 dbnamesnort hostlocalhost 编辑完成后保存退出。至此对barnyard2.conf文件的修改到此结束。 ● 修改目录的属主和属组。
#chown snort:snort /var/log/barnyard2 ● 启动Snort和Barnyard2进行联合测试
#snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 –D
执行完这条命令之后不会看到大量输出只会出现以下三行提示信息
Spawning daemon child...
My daemon child 12903 lives...
Daemon parent exiting (0)
Snort程序安静的在后台运行“-D”参数表示以后台进程运行。 ● 测试Barnyard2。
下面执行的这条命令用于测试Barnyard2程序是否能正常执行。
#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort -T
该命令产生输出信息如下 如果大家的机器也出现上述信息说明程序可以正常运行此时我们才能继续下面的操作。 同样ping主机开始正式启动barnyard2程序继续执行以下命令。
#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log –w /var/log/snort/barnyard2.waldo 命令参数的解释如下所示。
● -c该选项指定Barnyard配置文件的路径。该参数为必选项。 ● -d指定Unified格式文件的路径这里指定为/var/log/snort/所有Unified文件必须放在该目录下。该参数为必选项。 ● -f该选项指定Barnyard以连续方式运行时的Unified文件名。Snort在每次生成的Snort Unified文件后面都加了一个UNIX时间戳去掉时间戳后缀就是文件名。
根据上面命令执行结果会在/var/log/snort/目录下生成报警文件大家可以看到报警文件格式都是snort.log.时间戳。而为什么格式必须是snort.log.XXXXXXX呢我们在配置snort.conf的第5步曾经配置过一行语句
output unified2:filename snort.log,limit 128
这里定义了输出报警文件的格式假如你想把snort.log.XXXXX改成unified2.alert.XXXXX请按照下面语句修改
output unified2:filename unified2.alert,limit 128
与此同时 -f参数后面就要跟 unified2.alert,而不是snort.log啦这里要注意一一对应的关系。 ● -w该选项打开检验功能告诉Barnyard检验文件名也称为waldo文件。该文件用于记录文件中最近处理的报警。如果不使用waldo文件则Barnyard必须完整地载入一个日志文件该参数的作用是将报警信息传送至入侵检测数据库。 在/var/log/snort目录下有一些snort.logtimes_stamp的二进制文件这些文件由Snort输出插件所生成。 步骤5使用下述命令查询报警信息是否存入数据库。
#mysql -u snort -p -D snort -e SELECT COUNT(*) FROM event
实际操作效果如下所示 如果在count(*)下方没有数字则表示报警信息没有存入数据库那么需要从头检查配置过程。
下面的命令非常重要再次强调Barnyard2完整启动命令
[rootlocalhost ~]# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log -w /var/log/snort/barnyard2.waldo -g snort -u snort
四 、访问权限设置
如果在一个简单的模拟环境下实验该步骤可忽略。
假设场景我只希望某一个IP能访问Snort服务器上的22、80端口我们在Snort主机上做如下设置。
禁止所有的IP访问Snort服务器的22、80端口。
iptables -I INPUT -p tcp --dport 80 -j DROP
iptables -I INPUT -p tcp --dport 22 -j DROP
允许IP地址为192.168.11.2访问Snort服务器的80、22端口。 #iptables -I INPUT -s 192.168.11.2 -ptcp --dport 80 -j ACCEPT #iptables -I INPUT -s 192.168.11.2 -ptcp --dport 22 -j ACCEPT
保存iptables规则 #service iptables save
重启防火墙 #service iptables restart
五、搭建BASE的可视化入侵检测系统
如果以上部分中所有环节均正常说明已经安装了Snort系统并将报警信息存入数据库。接下来开始安装BASEBasic Analysis and Security Engine,基于ACID构建的步骤Barnyard将MySQL中的Snort报警信息通过Web展示。 要将存储在数据库中的日志展现在Web端需要安装BASE入侵检测事件展示的前端程序这里用到的版本是base-1.4.5.tar.gz。既然用到了Web服务那么首先需要安装好LAMP环境然后再安装BASE包。具体安装步骤如下。 步骤1安装httpd、mysql-server、mysql-devel、php、php-mysql。
命令如下所示。
#yum install –y httpd mysql-server php php-mysql mysql-devel php-gd 步骤2安装PHP插件mcrypt、libmcrypt、libmcrypt-devel命令如下所示。
#yum install epel-release //扩展包更新包
#yum install –y mcrypt libmcrypt libmcrypt-devel php-pear 更新插件的时间比较长操作如下所示。
#pear upgrade PEAR 步骤3继续执行下列命令。
安装 Image_Graph-alpha、Image_Canvas-alpha、Image_Color、Numbers_Roman 这 4个包。
操作如下所示。
#pear channel-update pear.php.net
#pear install Image_Graph-alpha Image_Canvas-alpha Image_Color Numbers_Roman TipsImage_graph前身是GraPHPit它是用于图表操作的包也是一个开源项目后来被整合到了Pear之中被命名为Image_Graph-alpha是他的版本号所以它是通过pear命令来完成安装。 查看已安装包方法如下
[rootlocalhost barnyard2-1.9]# pear list 步骤4安装ADOdb包。
虽然PHP是建构Web系统强有力的工具但是PHP存取数据库的功能并未标准化MySQL使用了另一种不同且不兼容的应用程序接口。此时需要使用ADOdb作为中介进行转换。ADOdb的最大优点是不管后端数据库如何存取数据库的方式都是一致的。目前ADOdb的最新版本是5.20它支持的数据库种类较多例如MySQL、PostgreSQL、Oracle等。下面开始安装ADOdb首先将adodb519.tar.gz解压到/var/www/html/目录下。
# tar zxvf adodb519.tar.gz -C /var/www/html/ 解压后发现增加了一个目录adodb5将这个目录改名为adodb。
#mv /var/www/html/adodb5 /var/www/html/adodb 步骤5解压BASE包。
[rootlocalhost src]# pwd
/usr/local/src
#tar zxvf base-1.4.5.tar.gz -C /var/www/html/ 解压后发现增加了一个目录base-1.4.5接着需要对它重命名。
#mv /var/www/html/base-1.4.5/ /var/www/html/base 步骤6修改PHP配置文件。
#vi /etc/php.ini 将第513行内容改成如下内容。
error_reporting E_ALL ~E_NOTICE
修改完毕保存并退出。
注意对于error_reporting()函数的解释
error_reporting() 设置 PHP 的报错级别并返回当前级别错误报告是分级的下面我们了解一下这个函数错误报告等级。 E_ALL- 所有的错误和警告 E_ERROR - 致命性运行时错 E_WARNING - 运行时警告非致命性错 E_PARSE - 编译时解析错误 E_NOTICE - 运行时提醒(这些经常是是你的代码的BUG引起的。 步骤7改变/var/www/html/目录的属主和属组权限。
#chown -R apache:apache /var/www/html/ 注意如果该步骤设置不对有可能在后期配置BASE过程中出现“Config Writeable:No”的错误提示从而导致无法完成BASE的配置任务。 步骤8分别重启MySQL和Web服务最后停止Firewall服务。
#service mysqld restart //启动数据库服务
#service httpd restart //重启Web服务
#service iptables stop //为了调试方便暂时关闭防火墙。 步骤9在Web界面设置BASE。
首先测试Web我们打开Apache的页面http://192.168.91.128/看到测试页面之后开始正式打开BASE的页面。
打开浏览器输入网址http://192.168.91.128/base/setup/index.php输入完毕后弹出安装界面如图所示。 单击Continue按钮开始选择语言和ADOdb路径如图所示。
语言项选择中文ADOdb路径中输入/var/www/html/adodb单击Continue按钮。 接下来输入数据库名称、访问用户名和密码如下图所示。 这里不需要设置归档数据库所以后五项内容无需填写。 下一步将管理员名称设置为root密码依然是“123456”Full Name不必设置如下图所示。 下一步开始创建BASE表结构 上图中“BASE AG”中的AG表示报警分组Alert Group。 如果看到表acid有创建完成的提示并且BASE tables状态显示为“DONE”则表示安装完成。单击屏幕最下方的step5…按钮结束安装。
【结果分析】
演示snort工作过程
1Kali利用Snort检测ping攻击
1.1在rules/icmp-info.rules文件中设置规则
cd /etc/snort/rules/
#在rules/icmp-info.rules文件中设置如下规则
alert icmp $EXTERNAL_NET any - $HOME_NET any (msg:ICMP Large ICMP Packet; dsize:800; reference:arachnids,246; classtype:bad-unknown; sid:499; rev:4;) 1.2使用snort规则对流量进行检测将结果输出到snort日志中
snort -i eth0 -c /etc/snort/snort.conf -A fast -l /var/log/snort/ 成功开启snort进行检测
1.3使用局域网内主机对安装snort主机进行包800的ping攻击 1.4在日志中查看检测结果 可以看到成功检测包大于800的ping攻击
2Kali利用Snort检测nmap扫描
2.1在/etc/snort/rules/local.rules下进行tcp规则配置
vim /etc/snort/rules/local.rules
alert tcp $EXTERNAL_NET any - $HOME_NET any (msg:nmap scan;sid:1000000888;) 2.2启动snort进行局域网内的扫描检测
sudo snort -i eth0 -c /etc/snort/snort.conf -A fast -l /var/log/snort/ 2.3使用宿主机进行局域网内的namp扫描使用同一网段的另一台kali机 2.4在/var/log/snort/alert中查看检测结果 可以看到成功检测到nmap的扫描
3CentOS利用Snort检测ICMP数据包并显示在网页 执行#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f snort.log –w /var/log/snort/barnyard2.waldo
在客户机终端命令行中ping主机192.168.91.128随后就能在BASE界面中收到ICMP报警。 通过列表可以看到ICMP报文。
【个人总结心得体会】
这个实验首先我使用的kali操作系统进行的实验从安装系统到配置成功snort的过程中虽然遇到了一些问题但也通过网络查询解决办法一个一个解决了并成功测试了snort的运行总体来说还算顺利。直到安装mysql数据库的时候因为kali不支持安装mysql数据库只支持MariaDB数据库该数据库在建表以及下载配置文件的过程中会出现问题最终放弃使用kali操作系统建立MySQL数据库。
随后我选择使用CentOS6.8进行实验有了在kali上安装snort的经验我顺利地安装配置完成了snort、barnyard2、base等软件过程中遇到的问题与解决办法也都一一记录了下来通过自己一点一点安装和配置对搭建snort入侵检测系统有了更加深入的认识。