当前位置: 首页 > news >正文

【网络安全实验】snort实现高级IDS

注:本实验分别使用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、操作系统:kali,CentOS6.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地址的方法是将BOOTPROTO=dhcp中的dhcp改为static,然后增加以下内容(根据内网环境配置IP):

IPADDR=192.168.91.128

NETMASK=255.255.255.0

GATEWAY=192.168.91.2

DNS1=192.168.91.2

DNS2=8.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]

name=CentOS-$releasever - Base

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

#baseurl=https://mirrorlist.centos.org/centos/$releasever/os/$basearch/

baseurl=https://mirrors.aliyun.com/centos-vault/6.7/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates

[updates]

name=CentOS-$releasever - Updates

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/updates/$basearch/

baseurl=https://mirrors.aliyun.com/centos-vault/6.7/updates/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful

[extras]

name=CentOS-$releasever - Extras

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/extras/$basearch/

baseurl=https://mirrors.aliyun.com/centos-vault/6.7/extras/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages

[centosplus]

name=CentOS-$releasever - Plus

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/centosplus/$basearch/

baseurl=https://mirrors.aliyun.com/centos-vault/6.7/centosplus/$basearch/

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users

[contrib]

name=CentOS-$releasever - Contrib

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/$releasever/contrib/$basearch/

baseurl=https://mirrors.aliyun.com/centos-vault/6.7/contrib/$basearch/

gpgcheck=1

enabled=0

gpgkey=file:///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)要在DAQ(Data 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时,就会出现找不到动态规则的文件,发生致命错误导致程序异常退出。

ERROR:parser.c(5047)

加深理解:我们说理解/etc/snort/sid-msg.map这个文件的意义非常重要,实体signature表示的是报警信息列表规范化,即将报警事件信息按规则编号(sig_id)、规则描述(sig_name)、规则分类编号(sig_class_id)规则优先级(sig_priority)规则版本号(sig_rev),规则在snort中的内部编号(sig_sid;sig-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”。

mysql>CREATE DATABASE snort;//新建数据库

mysql>USE snort;

mysql>CREATE USER 'snort'@'localhost' 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对数据库的操作权限

mysql>GRANT CREATE,SELECT,UPDATE,INSERT,DELETE ON snort.* TO snort@localhost IDENTIFIED BY '123456';

mysql>SET PASSWORD FOR 'snort'@'localhost'=PASSWORD('123456');//为用户snort设置访问密码

mysql>SOURCE /usr/local/src/barnyard2-1.9/schemas/create_mysql; //通过引入文件create_mysql来创建数据库结构,该命令不可重复输入,在后面的安装BASE步骤中还会在snort库中写入多个表。

执行完create_mysql脚本后,用户可以通过在mysql提示符下,运行下面的SQL语句来验证配置的正确性。

mysql> SHOW TABLES;

见到以上表的内容后,确认操作成功,我们可以继续。

mysql>FLUSH PRIVILEGES; //刷新数据库权限

mysql>exit

注意:在导入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,user=snort password=123456 dbname=snort host=localhost

编辑完成后保存退出。至此对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.log+times_stamp的二进制文件,这些文件由Snort输出插件所生成。

步骤5.使用下述命令查询报警信息是否存入数据库。

#mysql -u snort -p -D snort -e "SELECT COUNT(*) FROM event"

实际操作效果如下所示:

如果在count(*)下方没有数字,则表示报警信息没有存入数据库,那么需要从头检查配置过程。

下面的命令非常重要,再次强调Barnyard2完整启动命令:

[root@localhost ~]# 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系统并将报警信息存入数据库。接下来开始安装BASE(Basic 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

Tips:Image_graph前身是GraPHPit,它是用于图表操作的包,也是一个开源项目,后来被整合到了Pear之中,被命名为Image_Graph(-alpha是他的版本号),所以它是通过pear命令来完成安装。

查看已安装包方法如下:

[root@localhost 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包。

[root@localhost 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入侵检测系统有了更加深入的认识

相关文章:

【网络安全实验】snort实现高级IDS

注:本实验分别使用kali和CentOS6.8进行测试,可惜的是使用kali进行实验过程中遇到了困难,未能完成完整实验,而使用CentOS6.8成功完成了完整实验。 实验中用到的软件: https://download.csdn.net/download/weixin_5255…...

19.HarmonyOS App(JAVA)依赖布局DependentLayout使用方法

layout/ability_main.xml 显示位置不对&#xff1a;检查布局文件ohos:lef_of "id:tuzi",比如显示在兔子的左侧&#xff0c;这里就会显示不对。 需要id前没有$符号。改为&#xff1a; ohos:lef_of "$id:tuzi" <?xml version"1.0" encodi…...

玩家笔记:幻兽帕鲁搭建服务器开服教程

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…...

Liunx基本指令

目录 1、ls 列出当前路径下的文件 2、pwd 打印当前工作目录 (print working directory) 3、cd 进入路径 4、mkdir 创建文件夹(make dirctory) 5、touch 创建文件 6、cp 复制(copy) 7、mv 移动/剪切、重命名 8、rm 删除 (remover) 9、vim 文本编辑器 10、cat 打开文件…...

面试题:Redis 分布式锁存在什么问题 ?如何解决 ?

文章目录 如何实现分布式锁2. Redis 分布式锁存在什么问题2.1 解决死锁问题2.2 解决锁误删问题 如何实现分布式锁 Redis 天生就可以作为一个分布式系统来使用&#xff0c;所以它实现的锁都是分布式锁。 Redis 可以通过 setnx&#xff08;set if not exists&#xff09;命令实…...

Container 命令ctr、crictl 命令

1、 Containerd和Docker的架构区别 Docker vs. Containerd&#xff1a; 2、ctr & crictl的区别 ctr是containerd的一个客户端工具 crictl 是 CRI 兼容的容器运行时命令行接口&#xff0c;可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序 crictl 则直接对…...

设计模式——七大原则

​更多内容&#xff0c;前往 IT-BLOG ​设计模式的目的是为了让程序&#xff0c;具有更好的代码重用性、可读性&#xff08;编程规范性&#xff0c;便于后期维护和理解&#xff09;、可扩展性&#xff08;当需要增加新需求时&#xff0c;非常方便&#xff09;、可靠性&#xf…...

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上

问题复现&#xff1a; 早上&#xff0c;在更新完笔记本电脑的系统之后&#xff0c;连网之后&#xff0c;网络突然直接断开&#xff0c;一查看&#xff0c;WiFi模块居然不见了&#xff0c;开机重启也是如此&#xff0c;这种情况常常出现在更新系统之后&#xff0c;WiFi模块驱动就…...

Pytest 与allure测试报告集成

通过Feature, story, step 记录测试的功能&#xff0c;场景及测试步骤 # login.pylogin_func函数 传入参数是name 和 password 当输入的name和password与数据库db_data中数据一致时&#xff0c;返回“XXX成功登录系统&#xff01;” 当输入的name存在于数据库db_data但密码不正…...

MySQL 表的增删改查(基础)

1.CRUD 注释:在SQL中可以使用"--空格描述"来表示注释说明 CRUD 即增加(Create).查询(Retrieve).更新(Update).删除(Delete) 2.新增(Create) insert into 表名 values (列,列...); insert into 表名(列名,列名...) values (列,列...); insert into 表名 values(),(),…...

【PDF.js】发票PDF不显示文本的问题

控制台提示警告&#xff1a; Warning: loadFont - translateFont failed: "UnknownErrorException: The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.".…...

C#中检查空值的最佳实践

C#中检查空值的最佳实践 在C#编程中&#xff0c;处理空值是一项基础且重要的任务。正确地检查变量是否为null可以帮助我们避免NullReferenceException&#xff0c;这是C#最常见的运行时错误之一。本文将探讨为什么使用is关键字进行空值检查是一种优于使用的做法。 操作符&…...

三层交换组网实验(华为)

思科设备参考&#xff1a;三层交换组网实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 三层交换技术的出现&#xff0c;解决子网必须依赖路由器进行管理的问题&#xff0c;解决传统路由器低速、复杂所造成的网络瓶颈问题。一个具有三层交换功能的设备可简单理解为…...

Android配置GitLab CI/CD持续集成,Shell版本的gitlab-runner,FastLane执行,上传蒲公英

mac环境下&#xff0c; 首选需要安装gitlab-runner和fastlane brew install gitlab-runner brew install fastlane 安装完成&#xff0c;来到我们在gitlab下新建的Android项目&#xff0c;我们开始创建gitlab-runner 1、创建runner 点开runner&#xff0c;点击新建runner …...

算法提升——LeetCode383场周赛总结

周赛题目 边界上的蚂蚁 边界上有一只蚂蚁&#xff0c;它有时向左走&#xff0c;有时向右走。 给你一个非零整数数组nums。蚂蚁会按顺序读取nums中的元素&#xff0c;从第一个元素开始直到结束。每一步&#xff0c;蚂蚁会根据当前元素的值移动&#xff1a; 如果nums[i]<0…...

(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2.1节( 带结果的Exit例程)

4.2.1 带结果的Exit例程 ​ 我们已经看到&#xff0c;从函数中返回结果所使用的语法与 C 语言家族的语法截然不同。不仅语法不同&#xff0c;行为也不同。为结果&#xff08;或函数名&#xff09;赋值并不像return语句那样终止函数。Object Pascal 开发人员经常利用这一特性&a…...

vuecli3 执行 npm run build 打包命令报错:TypeError: file.split is not a function

问题 今天有个项目在打包的时候遇到了一个问题&#xff0c;就是执行 npm run build 命令的时候报错了&#xff0c;如下&#xff1a; 解决 我排查了一下&#xff0c;模拟代码如下&#xff1a;在打包的时候用了 MinChunkSizePlugin const webpack require("webpack"…...

【Java 数据结构】对象的比较

Java中对象的比较 1. PriorityQueue中插入对象2. 元素的比较2.1 基本类型的比较2.2 对象比较的问题 3. 对象的比较3.1 覆写基类的equals3.2 基于Comparble接口类的比较3.3 基于比较器比较3.4 三种方式对比 4. 集合框架中PriorityQueue的比较方式5. 使用PriorityQueue创建大小堆…...

2024 Google Chrome 浏览器回退安装旧版本

2024 Google Chrome 浏览器回退安装旧版本 查看当前谷歌版本备份浏览器数据卸载浏览器双击重新安装旧版本浏览器 查看当前谷歌版本 详细参考&#xff1a;参考 笔记&#xff1a;最近谷歌浏览器更新后&#xff0c;用着总感觉别扭&#xff1a;不习惯 备份浏览器数据 &#xff…...

将数组中的各字符串都调整为指定长度调整原则:多删(删右侧多出的)少补(左侧补数字0)numpy.char.zfill()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将数组中的各字符串 都调整为指定长度 调整原则&#xff1a; 多删&#xff08;删右侧多出的&#xff09; 少补&#xff08;左侧补数字0&#xff09; numpy.char.zfill() [太阳]选择题 请问以…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...