Snort联动式入侵防御系统的折腾之路(1):Snort&Guardian安装与部署

Posted by Qfrost on 2018-09-27
Estimated Reading Time 7 Minutes
Words 1.9k In Total
Viewed Times

Snort作为当下最流行的开源入侵检测系统被大家广为应用在各类服务器中。今天,我也在ubuntu16.04服务器上折腾了一下这套系统。然而发现对于这方面的中文资料很少,适合新手的就更是九牛一毛。今天在这里,我以包管理器安装方式演示一下Snort的安装与配置使用过程。 对于Snort,一般大家会使用源码编译安装与包管理器安装两种方式。使用源码下载会比较复杂,但是文档齐全,debug方便一些;而包管理器安装非常省力,一条

1
2
3
4
5
# Ubuntu
sudo apt install snort
# Centos
sudo yum install libdnet-devel
sudo yum install https://www.snort.org/downloads/snort/snort-2.9.18-1.centos8.x86_64.rpm

解决所有问题,完全不用考虑什么什么依赖。我本人也是先尝试源码编译,然而遇到各种各样的问题,最后只能选择包管理器安装。 接下来开始配置,因为本文适合新手,所以在这里不介绍snort的规则编写,我们直接下载它的配置文件

1
wget https://www.snort.org/downloads/community/community-rules.tar.gz

安装规则

1
2
3
4
5
6
tar -xzf community-rules.tar.gz 
cp community-rules/* /etc/snort/rules/

mkdir /usr/local/lib/snort_dynamicpreprocessor/
mkdir /usr/local/lib/snort_dynamicengine/
ln -s /usr/lib64/snort-2.9.18_dynamicengine/libsf_engine.so /usr/local/lib/snort_dynamicengine/libsf_engine.so

创建所需的目录、存储规则与日志文件

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建Snort目录:
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

最后运行命令检查

1
snort -T -c /etc/snort/rules/snort.conf

这样就算是完成了,我们运行一下

1
sudo snort

输出这样的页面并将数据包都输出到终端上,说明snort正常运行了。但是细心的朋友一定发现了它输出了一条警告:

1
WARNING: No preprocessors configured for policy 0.

这是因为我们并没有指定规则文件,snort在运行时必须要指定它的规则文件。我们运行这条命令:

1
sudo snort -c /etc/snort/rules/snort.conf -v


可以看到这条警告已经不存在了。 相信一定用朋友在折腾snort时会遇到类似于这样的问题:

1
ERROR: snort.conf(246) Could not stat dynamic module path "/usr/local/lib/snort_dynamicengine/libsf_engine.so": No such file or directory. ERROR: snort.conf(249) Could not stat dynamic module path "/usr/local/lib/snort_dynamicrules": No such file or directory. ERROR: ./classification.config(0) Unable to open rules file "./classification.config": No such file or directory.

我在源码编译安装和包管理器安装时都遇到了这个问题。可以按照文件夹查找一下路径,我的这些文件都在 /usr/lib/snort 里面,建立一下软连接一下就可以了。 接下来,我来介绍一下Snort的三种工作模式

  1. 嗅探模式
1
snort -v #打印TCP/IP的包头信息

这也是snort的默认模式,同样我们可以加上-c参数指定规则。

  1. 记录模式
1
2
3
sudo snort -dev -l ./log #将抓取到的包头信息、应用层信息存到到log目录下 
sudo snort -dev -l ./log -h 192.168.1.0/24 #指定IP地址
sudo snort -dv -r packet.log #将日志内容打印至屏幕

这个模式也很好理解,将日志记录到硬盘而不是输出到终端方便以后查看。

  1. 入侵检测模式

Snort作为一款优秀的IDS,它的入侵检测模式是非常强大的,甚至还可以与防火墙进行联动,实现主动式入侵防御(IPS)。在后文将介绍Snort如何配合MYSQL和iptable实现入侵防御功能。在这里只对其入侵检测模式进行一个简单的介绍和功能展示。

1
snort -i eth0 -c /etc/snort/snort.conf -A fast -l /root/.log

这条命令将启动入侵警报FAST模式,并将日志记录至/root/.log文件夹内。这里有必要介绍一下-A参数

snort有6种报警机制:full、fast、socket、syslog、smb(winpopup)和none。其中有4个可以在命令行状态下使用-A选项设置。这4个是: -A fast:报警信息包括:一个时间戳(timestamp)、报警消息、源/目的IP地址和端口。 -A full:是默认的报警模式。 -A unsock:把报警发送到一个UNIX套接字,需要有一个程序进行监听,这样可以实现实时报警。 -A none:关闭报警机制。

下面演示一下入侵检测,我们对目标主机进行Ping

然后我们用

1
tail -f /root/.log/alert

命令进行实时查看 可以看到已经输出了报警内容

IPS部署

上文已经说到Snort可以实现主动式入侵防御的功能,这里我将分享我用guardian实现IPS的折腾之路。因为这方面的中文资料非常少且旧,还有很多错,所以在这里做一个整理归纳。 首先我们需要去官网下载guardian http://www.chaotic.org/guardian/ 下载好之后进行如下操作

1
2
3
4
5
6
7
8
9
10
tar zxvf guardian-1.7.tar.gz 
cd guardian-1.7
cp guardian.pl /usr/local/bin # Guardian的执行文件
cp guardian.conf /etc/snort # Guardian的配置文件
cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh # Guardian封锁IP所要调用的外部程序
cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh #Guardian解除对某一IP封锁时,所需要调用的外部程序
touch /etc/snort/guardian.ignore #创建白名单
touch /etc/snort/guardian.target #创建黑名单
mkdir /var/log/snort
touch /var/log/snort/guardian.log #创建guardian的日志

接下来配置 guardian.conf

1
2
3
4
5
6
7
Interface eth0
HostGatewayByte 1
LogFile /var/log/snort/guardian.log
AlertFile /root/.log/alert #你生成的snort alert警报文件所在位置
IgnoreFile /etc/snort/guardian.ignore
TargetFile /etc/snort/guardian.target
TimeLimit 86400

TimeLimit:在多少秒后解除对IP的封锁,86400秒也就是24小时之后解除对IP的封锁。AlertFile是关键,前提是snort以alert_fast输出报警信息。 配置完成后,启动guardian:

1
/usr/bin/perl /usr/local/bin/guardian.pl -c/etc/snort/guardian.conf

接下来就是本章的重点了,我们看到输出了一条报错信息。

我们打开guardian.pl文件转到它的第十行,看到它引用了一个库

靠,完了,Perl完全不懂,这可咋整… 但是根据推断,出现这种情况往往是没有安装这个外部库。百度发现是因为这套东西实在有些旧,导致新版perl并没有这个库的支持

接下来,经过艰难的踩坑,终于找到了解决方案。 首先先在源/etc/apt/sources.list加入一行

1
deb http://ftp.de.debian.org/debian wheezy main

然后运行命令

1
sudo apt-get update sudo apt-get install libperl4-corelibs-perl

这样就成功安装了Perl4 CoreLibs模块,然后

1
/usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf

可以看到,Guardian成功运行了! 我们在目标服务器运行Snort&Guardian并做一个模拟攻击来测试一下效果。 首先,我们在本机(攻击机)对目标服务器进行一个nmap扫描。

可以看到扫描失败了,然后我尝试在攻击机上对目标服务器进行ssh连接

可以看到,ssh也无法连接,意味着,攻击机IP已被目标服务器拉黑。基于Snort&Guardian的IPS系统部署完成!

https://www.cnblogs.com/thresh/p/12019466.html

http://www.blog.chinaunix.net/uid-26347676-id-3138447.html

https://blog.csdn.net/resdust/article/details/88932794

https://wikisecure.net/how-to-fix-snort-dynamic-preprocessor-error/