天天看点

Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

为最近项目上要用到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
           

如果输出的是下面这样的结果,说明成功了

Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

即最后输出

Snort successfully validated the configuration (with 0 warnings).

修改网卡设置

接下来我们要关闭网卡中的LRO和GRO(Large Receive Offload & Generic Receive Offload) 因为按照官方的说法,这个功能可能会把较长的数据包截断,使得snort无法对其进行匹配操作

我们可以用一个叫做ethtool的小工具来关闭LRO和GRO

首先用

ifconfig

查看自己网卡信息,下图中红框框起来的就是网卡

名称

Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

然后用ethtool来查看当前网卡上的LRO和GRO是否为关闭状态,记得把ens33换成自己网卡的名称

sudo ethtool -k ens33 | grep receive-offload
           
Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

然后用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
           

如果一切正常会看到屏幕上显示这样

Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

这个时候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中输出的内容应该包括

Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

这样的好处是每次可以自己制定使用的规则文件,当然,我们还可以通过在配置文件中设置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',
}
           
Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

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做数据展示与分析