为最近项目上要用到snort3,但是找了很多博客都是snort2.9.x的安装与配置,所以只能靠着官网文档和自己的反复摸索来学习snort3相关的内容。后面将会把snort3相关的发一个系列的博客,这是第二篇,介绍了snort3安装后的相关配置过程。后续内容敬请期待,等我理清了思路就来~
往期回顾
Ubuntu 18.04上使用snort3搭建NIDS(一)
上一节中说到了成功安装上snort3,但是距离一个完善的NIDS(Network Intrusion Detection System)还是有点远。
今天的主要工作就是把snort3配置工作做好,让他能够具备基本的监听与入侵检测功能
配置Snort
设置环境变量
首先,不同于snort2.x的是,snort3采用的配置文件是用lua脚本语言描述的(2.x用的是snort用户手册中定义了语法的.conf文件)
Snort 3需要设置几个环境变量,直接写入到用户的.bashrc文件中就可以
sh -c "echo 'export LUA_PATH=/usr/local/include/snort/lua/\?.lua\;\;' >> ~/.bashrc"
sh -c "echo 'export SNORT_LUA_PATH=/usr/local/etc/snort' >> ~/.bashrc"
但是会有一个问题就是sudo的时候就没了 所以单独为sudo配置一下
sudo visudo -f /etc/sudoers.d/snort-lua
在里面写入
按Ctrl+O保存,会跳出来让你输入文件名,直接回车默认就可以,然后Ctrl+X退出
现在可以测试一下snort的默认配置文件
snort -c /usr/local/etc/snort/snort.lua
如果输出的是下面这样的结果,说明成功了
即最后输出
Snort successfully validated the configuration (with 0 warnings).
修改网卡设置
接下来我们要关闭网卡中的LRO和GRO(Large Receive Offload & Generic Receive Offload) 因为按照官方的说法,这个功能可能会把较长的数据包截断,使得snort无法对其进行匹配操作
我们可以用一个叫做ethtool的小工具来关闭LRO和GRO
首先用
ifconfig
查看自己网卡信息,下图中红框框起来的就是网卡
名称
然后用ethtool来查看当前网卡上的LRO和GRO是否为关闭状态,记得把ens33换成自己网卡的名称
sudo ethtool -k ens33 | grep receive-offload
然后用ethtool将GRO关闭
sudo ethtool -K ens33 gro off
特别注意:这个设置只适用于当前会话,电脑重启后需要重新设置
简单应用实例
配置完上述过程之后,snort基本上就已经可以作为建议的NIDS工作了,但还需要设置匹配规则
sudo mkdir /usr/loca/etc/snort/rules
sudo vim /usr/loca/etc/snort/ruls/hello_world.rules
在新建的rules文件中写两个简单的规则
alert tcp any any -> any any ("msg:TCP Traffic Detected!"; sid:1000001;)
alert icmp any any -> any any ("msg:ICMP Traffic Detected!";sid:1000002;)
然后就可以运行了
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/snort/rules/hello_world.rule -i ens33 -A alert_fast
如果一切正常会看到屏幕上显示这样
这个时候snort就已经在指定的网卡上面监听了,可以试试
wget baidu.com :产生TCP流量
ping baidu.com :产生ICMP流量
按Ctrl+C可以退出
Snort规则
在snort的官网上提供了免费的community版规则文件,但是挂在亚马逊的服务器上,需要到外面才能下载,点我直达官网链接。为了方便大家使用所以我在本站上传了一个副本,点我直达本站链接
下载好之后解压,然后复制到规则文件夹即可
sudo cp snort3-community.rules /usr/local/etc/snort/rules
sudo cp sid-msg.map /usr/local/etc/snort/rules
#然后测试一下
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/snort/rules/snort3-community.rules
如果没什么问题,Terminal中输出的内容应该包括
这样的好处是每次可以自己制定使用的规则文件,当然,我们还可以通过在配置文件中设置snort采用的规则,这样每次就不需要写
-R /rule/path
这个选项了
在lua文件的第170行左右 可以看到类似于这样的一段 默认是有双横线注释掉的,去掉双横线,然后把下面的include改成自己想用的规则文件路径即可
ips =
{
--use this to enable decode and inpector alerts
enable_builtin_rules = true,
--use inclde for rules files; be sure to set your path
--note that rules files can include other rules files
include = './rules/hello-world.rules',
}
ps:我截图的时候用的是一个new.rules文件
使用这个built-in规则的一个好处就在于——我可以一次加载多个规则文件
上面include语句可以出现不止一次,但是一定要记住,多个语句之间要换行,除了最后一条之外,都需要加上一个
,
,如
include './rules/new1.rules',
include './rules/new2.rules'
}
另外,只需要在原本的命令行中把之前的-R加回去,就可以同时加载built-in中指定的规则文件和命令行中用-R指定的规则文件。比如在刚刚的基础上输入
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/snort/rules.snort3-community.rules
就可以同时加载lua文件中和命令行中指定的规则文件
一个小小的并不专业的个人建议:可以将通用、每次都要用到的文件做成built-in,而将针对某一个协议开发的规则文件用命令行来指定
我们还可以建立一个
ips.include
文件,在
snort.lua
的include语句中指定这个文件,之后在include文件中编写多条include语句,好处在于可以清晰直观的看到自己包含了哪些规则,而且,不需要加逗号
简单总结
今天就先做到这里吧,一个简单的入侵检测系统已经基本建立成了,通过添加各项规则即可让snort根据其来防御你的电脑免受已知方式的攻击
下一步的任务是设置snort输出csv格式的告警文件,并通过ELK做数据展示与分析