在Ubuntu 上安装和配置Snort 3 NIDS
概述
在本教程中,你将学习如何在Ubuntu21.04
上安装和配置Snort3NIDS
。Snort
是一个轻量级的网络入侵检测系统。它具有基于规则的日志记录功能,除了检测各种攻击和扫描(如缓冲区溢出、端口扫描、CGI攻击、SMB探测等)之外,还可以执行内容搜索/匹配。Snort
具有实时警报功能,可以将警报发送到syslog
或者记录为一个单独的“警报”文件,甚至通过Samba
发送到Windows
计算机。
Snort 3
一些功能特性:
- 支持多线程
- 共享配置和属性表
- 使用简单的、脚本化配置
- 关键组件可热插拔
- 无端口配置的自动检测服务
- 在规则中支持粘性缓冲区
- 自动生成参考文档
- 更好的跨平台支持
安装Snort 3
Ubuntu 21.04
系统软件源目前提供的是 snort 2.9
版本
所以我们需要从源码编译安装Snort 3
1、更新系统软件源
1 | shell复制代码osboxes@osboxes:~$ sudo apt update |
2、安装依赖软件包和编译所需的一些工具
1 | shell复制代码sudo apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev |
3、安装Snort DAQ
下载并安装最新版本的 Snort DAQ
(数据采集库)。 默认的 Ubuntu
软件库中不是最新版的,所以需要从源代码编译安装
1 | shell复制代码osboxes@osboxes:~$ mkdir snortSourceFiles //建一个存放源码的目录 |
4、安装Google
开发的线程缓存的malloc
:TCMalloc
(可选)
TCMalloc
提供高效的多线程内存管理实现,用于替代操作系统的内存分配相关的函数(malloc
、free
,new
,new[]
等),具有减少内存碎片、适用于多核、更好的并行性支持等特性。
1 | shell复制代码osboxes@osboxes:~/snortSourceFiles/libdaq$ cd .. |
5、从源代码安装 Snort 3
从Snort 3
的GitHub
库中获取源码
1 | shell复制代码osboxes@osboxes:~/snortSourceFiles/gperftools-2.8$ cd ../ |
编译安装
1 | shell复制代码osboxes@osboxes:~/snortSourceFiles$ cd snort3/ |
更新共享库
1 | shell复制代码osboxes@osboxes:~/snortSourceFiles/snort3/build$ sudo ldconfig |
安装完成,查看snort
版本信息
1 | shell复制代码osboxes@osboxes:~/snortSourceFiles/snort3/build$ snort -V |
以上信息说明Snort3
安装成功并且可以工作正常了。
配置Snort 3
网卡配置
首先,需要把 Snort
监听网络流量的网卡设置为混杂模式
1 | shell复制代码osboxes@osboxes:~$ ip a show |
禁用网卡 Offload
功能,以防止 Snort
截断大于 1518
字节的大数据包。可以用以下命令检查是否启用了此功能:
1 | shell复制代码osboxes@osboxes:~$ ethtool -k ens33 | grep receive-off |
可以看到 GRO
是启用状态,使用下列命令进行禁用:
1 | shell复制代码osboxes@osboxes:~$ sudo ethtool -K ens33 gro off lro off |
不过这个禁用和开启网卡混杂模式都是临时的,你可以把命令写入开机启动项中,让它重启后依然生效。
配置 Snort 3 规则集
规则集是Snort
的核心组成部分,主要有三种类型的规则集:
- Community Rules (社区规则集)
- Registered Rules (注册规则集)
- Subscriber Rules (订阅规则集)
- 社区规则: Snort 免费规则集。
- 注册规则:它们也是免费提供的,但必须注册才能获得它们。
- 订阅规则: 商业付费规则集
本教程以配置社区规则集为例。
创建Snort
规则存放目录。在/usr/local/etc/snort/snort_defaults.lua
配置文件中,默认的规则集存放路径(RULE_PATH)为/usr/local/etc/rules
。
1 | shell复制代码osboxes@osboxes:~$ sudo mkdir /usr/local/etc/rules |
从Snort
官网www.snort.org/downloads/#… 3`社区规则集
1 | shell复制代码osboxes@osboxes:~$ wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz |
解压到规则集目录
1 | shell复制代码osboxes@osboxes:~$ sudo tar xzf snort3-community-rules.tar.gz -C /usr/local/etc/rules/ |
接下来,我们需要配置Snort 3
,Snort
的主配置文件为:/usr/local/etc/snort/snort.lua
。
修改其中的HOME_NET
变量和EXTERNAL_NET
变量,将HOME_NET
修改为需要进行网络攻击防范检测的网络范围。将EXTERNAL_NET
设置为除HOME_NET
以外的所有网络范围。
1 | shell复制代码osboxes@osboxes:~$ sudo vim /usr/local/etc/snort/snort.lua |
在ips
部分,定义规则集的路径:
你也可以修改/usr/local/etc/snort/snort_defaults.lua
配置文件,修改和定义Snort
的一些默认配置
安装 Snort OpenAppID
OpenAppID
是一个应用程序层插件,它使 Snort
能够检测网络中使用的各种应用程序,如 Facebook
、Netflix
、Twitter
等。
从 Snort
官网(www.snort.org/downloads/#…%E4%B8%8B%E8%BD%BD%E5%B9%B6%E5%AE%89%E8%A3%85) Snort OpenAppID
1 | shell复制代码osboxes@osboxes:~$ wget https://www.snort.org/downloads/openappid/19913 -O OpenAppId-19913.tgz |
Tips:请注意,这里的openappid
下载地址会因为更新而变化。
解压并复制到相应的目录:
1 | shell复制代码osboxes@osboxes:~$ tar -xzf OpenAppId-19913.tgz |
编辑 Snort 3
配置文件并指定 OpenAppID
库的位置
1 | shell复制代码osboxes@osboxes:~$ sudo vim /usr/local/etc/snort/snort.lua |
创建Snort
日志存放目录
1 | shell复制代码osboxes@osboxes:~$ sudo mkdir /var/log/snort |
检查snort
配置是否正确:
1 | shell复制代码osboxes@osboxes:~$ snort -c /usr/local/etc/snort/snort.lua |
提示Snort successfully validated the configuration (with 0 warnings).
表示配置文件正确。
创建自定义本地规则集,用来测试Snort
。
1 | shell复制代码osboxes@osboxes:~$ sudo vim /usr/local/etc/rules/local.rules |
创建一个用于检测ping
的规则,内容如下:
1 | c复制代码alert icmp any any -> $HOME_NET any (msg:"ICMP connection test"; sid:1000001; rev:1;) |
测试规则是否编写正确:
1 | shell复制代码snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules |
然后执行测试:
1 | shell复制代码sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i ens33 -A alert_fast -s 65535 -k none |
然后在别的机器上执行ping
命令,ping snort主机,就可以看到输出的警告信息
配置Snort 3
的日志输出
修改snort
配置文件,在configure outputs
部分配置是否输出为文件
这样修改后,snort
将写入日志到文件alert_fast.txt
检查配置:
1 | shell复制代码osboxes@osboxes:~$ snort -c /usr/local/etc/snort/snort.lua |
执行测试,用-l
指定日志目录
1 | shell复制代码sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i ens33 -s 65535 -k none -l /var/log/snort/ |
警告会被写入到日志文件:
你可以把自定义规则路径写进snort.lua
配置文件中
设置Snort 为服务模式运行
虽然可以使用-D
参数将snort
设置为后台运行,但为了更加方便,我们可以为Snort
创建一个systemd
服务单元,让Snort
以服务模式运行。
为了安全起见,单独为snort
创建一个用户,并设置用户shell
为nologin
1 | shell复制代码osboxes@osboxes:~$ sudo useradd -r -s /usr/sbin/nologin -M -c SNORT_IDS snort |
创建snort3
服务:
1 | shell复制代码osboxes@osboxes:~$ sudo vim /etc/systemd/system/snort3.service |
内容如下:
1 | shell复制代码[Unit] |
重新加载systemd
配置,并修改/var/log/snort
目录权限。
1 | shell复制代码osboxes@osboxes:~$ sudo systemctl daemon-reload |
启动snort
服务并配置开机启动
1 | shell复制代码osboxes@osboxes:~$ sudo systemctl enable --now snort3.service |
检查运行状态:
1 | shell复制代码osboxes@osboxes:~$ sudo systemctl status snort3.service |
状态显示Active: active (running)
,说明服务运行正常。
至此,Snort 3
的安装和基本配置就完成了。其他更多配置和用法,可以参考Snort
官网的文档。
参考资料
说明
关于合天网安实验室
合天网安实验室(www.hetianlab.com)-国内领先的实操型网络安全在线教育平台 真实环境,在线实操学网络安全 ; 实验内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。
本文转载自: 掘金