2024年最全【网络安全实验】snort实现高级IDS(1)

执行如下命令:

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=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=os&infra=$infra

#baseurl=https://mirrorlist.centos.org/centos/ r e l e a s e v e r / o s / releasever/os/ 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=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=updates&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / u p d a t e s / releasever/updates/ 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=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=extras&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / e x t r a s / releasever/extras/ 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=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=centosplus&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / c e n t o s p l u s / releasever/centosplus/ 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=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=contrib&infra=$infra

#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / c o n t r i b / releasever/contrib/ 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

注意: 对于修改 H O M E _ N E T 、 HOME\_NET、 HOME_NETEXTERNAL_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;

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值