Linux-等保开源入侵检测软件Snort
Linux-等保开源入侵检测软件Snort
1、原理
入侵检测系统(IntrusionDetectionSystem,IDS)是一种主动保护自己免受攻击的一种网络安全技术。作为防火墙的合理补充,入侵检测技术能够帮助系统监测攻击行为,扩展了系统管理员的安全管理能力(包括安全审计、监视、攻击识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息。入侵检测被认为是防火墙之后的第二道安全闸门,能够在不影响网络性能的情况下能对网络进行监测,防止或减轻上述的网络威胁。
入侵检测系统有很多种,从部署的位置可以分为以下几种:
◆基于网络的系统,它放置于网络之上,靠近被检测的系统,它们监测网络流量并判断是否正常。
◆基于主机的系统,其经常运行在被监测的系统之上,用以监测系统上正在运行的进程是否合法。
◆最近出现的一种系统,位于操作系统的内核之中,并监测系统的最底层行为。
从检测的技术手段上可以分为以下两种:
◆误用检测是将收集到的数据与预先确定的特征知识库里的各种攻击模式进行比较,如果发现有攻击特征,则判断有攻击。特征知识库是将己知的攻击方法和技术的特征提取出来建立的一个知识库。
◆异常检测则是对收集到的数据进行统计分析。它首先假定所有的攻击行为与正常行为不同,这样发现与正常行为有不同时,则判断存在攻击。它需要建立正常行为的标准,如登录时错误次数为多少时视为正常。
相比而言,误用检测的原理简单,很容易配置,特征知识库也容易扩充。但它存在一个致命的弱点――只能检测到已知的攻击方法和技术。异常检测可以检测出已知的和未知的攻击方法和技术,但是其问题在于正常行为标准只能采用人工智能、机器学习算法等来生成,并且需要大量的数据和时间,同时,由于现在人工智能和机器学习算法仍处于研究阶段。所以现在的入侵检测系统大多采用误用检测的分析方法。
下面将要演示的 Snort 就是一个基于网络的、采用误用分析技术的入侵检测系统。作为一个轻量级的入侵检测系统,snort功能算是单一,配置复杂,有利于入侵检测系统源码研究与规则编写。snort规则动作有五种,常用为报警、忽略、记录等
1. 安装snort 运行所需各种依赖
所用到的各种依赖作用
// 可一次性下载
[root@localhost ~]# yum install flex bison zlib zlib-devel libpcap libpcap-devel pcre pcre-devel libdnet libdnet-devel tcpdump
// 该部分依赖 必须下载
yum install gcc-c++ : 编译器
yum install flex : DAQ所需的解析器
yum install bison : DAQ所需的解析器
yum install zlib-dev : Snort所需的压缩库
yum install libpcap-dev : Snort所需的网络流量捕获头文件库
yum install libdnet-dev : 不是必要的,只是snort为几个网络历程提供了简化的可移植接口
yum install pcre-dev : Snort所需的pcre3的头文件
yum install tcpdump : 截取网络分组,并输出分组内容的工具
// 以下暂可不用
yum install luajit : lua的头文件库headers
yum install liblua5.1-0-dev
yum install liblua5.1-0-dev liblua50-dev liblualib50-dev
yum install build-essential : 提供编译软件的构建工具
yum install libdumbnet-dev : 同libdnet
yum install openssl libssl-dev : ssl的加密组件,提供SHA和MD5文件签名
一 ) 安装源码 libpcap
#下载 libpcap 源码
[root@localhost ~]# wget http://www.tcpdump.org/release/libpcap-1.7.4.tar.gz
#解压并安装 libpcap 依次执行以下命令
[root@localhost ~]# tar -zxvf libpcap-1.7.4.tar.gz // 解压压缩包
#cd 至刚解压好的文件夹内
[root@localhost ~]# ./configure // 对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系
[root@localhost ~]# make // 编译
[root@localhost ~]# make install // 安装
[root@localhost ~]# cp /usr/local/lib/libpcap.* /usr/lib/ // 拷贝文件
二 ) 安装 DAQ
snort从2.9.0版本开始引入了daq(packet acquisition), 该模块实际上是一个抽象层专门为报文处理服务(独立了报文获取部分和主体代码部分) , 作为snort的子包,daq 支持snort与防火墙进行数据交互
# 安装依赖 daq 如果 使用wget 下载资源速度过慢 可以采用 本地下载好再上传至 linux
[root@localhost ~]# wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
# 解压 DAQ
[root@localhost ~]# tar -zxvf daq-2.0.6.tar.gz
# cd 至刚解压好的文件夹内
[root@localhost ~]# ./configure
[root@localhost ~]# make // 编译
[root@localhost ~]# make install // 安装
#到此为止安装DAQ成功。
2.下载并安装snort
// 下载snort
// 注意 该版本后期版本 不知道为何 编译时会出现make 无法使用的问题
// 最起码我目前还不知道具体原因 由于时间问题 也暂时没去研究 干脆不用最新版本(最新版本为3.0)
[root@localhost ~]# wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
[root@localhost ~]# tar xf snort-2.9.20.tar.gz
// 预检 配置
[root@localhost ~]# ./configure --disable-open-appid
// 编译
[root@localhost ~]# make
// 安装
[root@localhost ~]# make install
// snort会被安装到,如下目录:
snort: /usr/local/bin/snort /usr/local/lib/snort
3.更新共享库
[root@localhost ~]# ldconfig
[root@localhost ~]# ln -s /usr/local/bin/snort /usr/sbin/snort
[root@localhost ~]# snort -V
[root@localhost ~]# snort -V
,,_ -*> Snort! <*-
o" )~ Version 2.9.20 GRE (Build 82)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014-2022 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.7.4
Using PCRE version: 8.32 2012-11-30
Using ZLIB version: 1.2.7
mkdir /etc/snort
mkdir /etc/snort/rules
mkdir/etc/snort/rules/iplists
mkdir /etc/snort/preproc_rules
mkdir /usr/local/lib/snort_dynamicrules
mkdir /etc/snort/so_rules
touch /etc/snort/rules/iplists/default.blacklist
touch /etc/snort/rules/iplists/default.whitelist
touch /etc/snort/rules/local.rules
mkdir /var/log/snort
mkdir /var/log/snort/archived_logs
chmod -R 5775 /etc/snort
chmod -R 5775 /var/log/snort
chmod -R 5775 /var/log/snort/archived_logs
chmod -R 5775 /etc/snort/so_rules
chmod -R 5775 /usr/local/lib/snort_dynamicrules
chown -R snort:snort /etc/snort
chown -R snort:snort /var/log/snort
chown -R snort:snort /usr/local/lib/snort_dynamicrules