使用Docker运行Snort3和OpenAppID
Snort一款开源的网络入侵防御系统(IPS),可以实时分析和记录网络数据包。由Cisco在2013年将其收购,收购后对其源代码进行了重写,发布了Snort3或称Snort++版,带来很多新的特性。Cisco于2014年发布了OpenAppID,作为一个Snort中用于应用识别的组件。根据官方教程,对Snort3源码进行编译较为繁琐,本文介绍使用Docker快速运行Snort3和OpenAppID的方法。
获取镜像
可通过如下命令下载Snort3 with OpenAppID的容器镜像:
$ docker pull traceflight/snort3-with-openappid-docker其中的镜像为根据我的Github项目中编写的Dockerfile文件构造而来,其中的组件和版本见下表。
| 组件 | 版本 |
|---|---|
| snort | 3.0.0 |
| daq | 2.2.2 |
| snort extra | 1.0.0 |
| openappid | 8373 |
| rules | community |
监听主机网卡
首先获取待监听网卡名称:
$ ip a使用docker的host模式监听指定网卡(假设为eth0),挂载本地路径(/var/log/snort)存放日志信息:
$ docker run -it --name snort --net=host \
--cap-add=NET_ADMIN \
-v /var/log/snort/:/var/log/snort/ \
traceflight/snort3-with-openappid-docker \
snort -c /usr/local/etc/snort/snort.lua \
-A fast \
-l /var/log/snort \
-i eth0分析Pcap数据
假设待分析的数据位于本机的/home/snort/data/文件夹中,运行snort挂载待分析文件,并对其进行分析。
$ docker run -it --rm -v /home/snort/data:/data \
-v /var/log/snort/:/var/log/snort/ \
traceflight/snort3-with-openappid-docker \
snort -c /usr/local/etc/snort/snort.lua \
-A fast \
-l /var/log/snort \
-r /data/pcapfile.pcap修改配置和规则
对规则和配置进行修改,需要挂载相应文件到镜像中,规则和配置文件的结构可参考我的Github项目。首先clone项目代码,获取文件夹结构,并在此基础上进行后续修改。
$ git clone https://github.com/traceflight/snort3-with-openappid-docker.git自定义应用检测器
将自定义检测脚本放置在custom/lua文件夹中,然后重新build容器或挂载custom文件夹到/usr/local/etc/snort/appid/文件夹中。
使用自定义规则
配置文件和规则文件分别放置在项目中etc和rules文件夹内,添加自定义规则步骤如下:
- 创建规则
在rules/rules文件夹内创建规则文件local.rules。
- 修改配置
在etc/snort.lua配置文件中第6个部分(6. configure detection)中的rules变量内添加一行规则包含语句。
include $RULE_PATH/local.rules- 挂载文件
运行时挂载
$ docker run -it -v `pwd`/etc/snort.lua:/usr/local/etc/snort/snort.lua \
-v `pwd`/rules/:/usr/local/etc/snort/rules/ \
traceflight/snort3-with-openappid-docker /bin/bash或创建Dockerfile生成新的镜像
FROM traceflight/snort3-with-openappid-docker:latest
MAINTAINER yourname
ADD etc/snort.lua /usr/local/etc/snort/
ADD rules /usr/local/etc/snort/rules
RUN snort -V使用snort注册版规则
在snort官方注册后,可下载注册版规则。将规则文件解压缩后,放在本项目对应文件夹中,然后修改etc/snort.lua文件中的appid变量值,指定appid路径。最后将文件夹挂载到路径下即可。
appid =
{
-- appid requires this to use appids in rules
app_detector_dir = '/usr/local/snort/appid',
}使用中可能出现错误提示
ERROR: Cannot decode data link type 113
原因:libpcap在对Linux进行抓包时,若对any接口进行抓包,使用的格式为Linux cooked-mode capture (SLL),snort不支持该格式。
解决方法:不对any接口进行抓包,对指定接口如eth0抓包即可。
SIOETHTOOL(ETHTOOL_GUFO) ioctl failed: Operation not permitted
原因:容器对监听本地网卡的权限不足。
解决方法:在docker运行时,添加参数`--cap-add=NET_ADMIN`。