Snort 安装与配置(CentOS 7)

​ Snort 是免费 NIPS 以及 NIDS 软件,具有对数据流量分析和对网络数据包进行分析处理的能力,通过灵活可定制的规则库(Rules),可对处理的报文内容进行搜索和匹配,能够检测出各种攻击,并进行实时预警。

​ Snort 支持三种工作模式:嗅探器、数据包记录器、网络入侵检测系统,支持多种操作系统,如 Fedora、CentOS、FreeBSD、Windows 等,本次实验使用 CentOS 7 系统安装 Snort 3。

前置工作

  • 根据实际网络连接情况配置网卡信息,使能够连通互联网。

  • 更新 Yum 源和软件包:

    # sudo yum clean all
    # sudo yum makecache
    # sudo yum -y update
  • 安装Wget,准备使用网络下载所需资源:

    # sudo yum install -y wget
  • 安装 EPEL 源:

    # sudo yum install -y epel-release
  • 安装所需组件:

    # sudo yum install -y gcc flex bison zlib zlib-devel libpacp libpacp-devel pcre pcre-devel libdnet libdnet-devel tcpdump

安装 Snort&daq

  • 使用官网预编译的 rpm 安装包安装 Snort&daq:

    # cd ~
    # wget https://snort.org/downloads/archive/snort/daq-2.0.6-1.centos7.x86_64.rpm
    # wget https://snort.org/downloads/archive/snort/snort-2.9.9.0-1.centos7.x86_64.rpm
    # sudo yum install ./daq-2.0.6-1.centos7.x86_64.rpm -y
    # sudo yum install ./snort-2.9.9.0-1.centos7.x86_64.rpm -y

配置 Snort

​ Snort官方提供三种下载规则:Community rules、Registered rules、Subscriber rules,第一种是社区规则,无需注册购买即可下载使用,第二种是注册规则,需要在官方注册账户后可下载使用,第三种必须要付费订阅才可使用。这里使用第一种 Community rules。

  • 下载解压 Community rules 规则:

    # cd ~
    # wget https://www.snort.org/rules/community -O ~/community.tar.gz
    # sudo tar -xvf ~/community.tar.gz -C ~/
    # sudo sudo cp ~/community-rules/* /etc/snort/rules
  • 创建所需要的文件和目录,在前面的操作中,有些目录已经自动创建好了,所以创建目录时看到”目录已存在“的提示无须担心:

    # sudo mkdir /var/log/snort
    # sudo mkdir /usr/local/lib/snort_dynamicrules
    # sudo mkdir /etc/snort/rules
    # sudo touch /etc/snort/rules/white_list.rules
    # sudo touch /etc/snort/rules/black_list.rules
  • 编辑 Snort 配置文件

    # sudo vi /etc/snort/snort.conf

    找到 var RULE_PATH ../rules 及相邻的四条配置信息,修改路径变量为:

    var RULE_PATH /etc/snort/rules
    var SO_RULE_PATH /etc/snort/so_rules
    var PREPROC_RULE_PATH /etc/snort/preproc_rules
    
    var WHITE_LIST_PATH /etc/snort/rules
    var BLACK_LIST_PATH /etc/snort/rules

    设置日志目录:找到关键词 # config logdir: ,取消注释后将该行修改为 config logdir: /var/log/snort

    配置输出插件,找到关键词 # output unified2: ,取消注释后将该行 修改为 output unified2: filename snort.log, limit 128

    配置 Snort 启动时需要加载的自定义规则项:找到关键词 # include local.rules,取消注释 local.rules文件,添加Community rules规则,后面的 include 均注释掉,如图:

    一直注释到 Step 8 附近!

    编辑完成后保存退出。

测试 Snort

编写测试用 local.rules ,因为在 snort.conf 配置文件中读取了该规则文件,这个Snort规则(alert)是用来在检测传入本地网络($HOME_NET)的 ICMP 数据包的,输出一个名为"ICMP test"的警报消息,生成事件ID(sid)为10000001,当触发这个规则时,它将记录与之关联的警报或日志信息。

更多Snort规则编写方法详见官方文档

# cd /etc/snort/rules
# echo 'alert icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001;)' > local.rules

使用以下命令测试 Snort 是否配置正确

# snort -T -i ens32 -c /etc/snort/snort.conf

出现 "Snort successfully validated configuration!"即为配置成功!

测试规则

# sudo snort -A console -i ens32 -u snort -g snort -c /etc/snort/snort.conf

如果您不确定要使用哪个接口,您还可以在服务器上使用以下命令:

# ip addr

输出将列出当前配置的所有网络接口。查找具有预期 IP 地址的那个,通常是 eth0ens32(虚拟机)。

在 Snort 启动并运行之后,其他设备对该 CentOS 发送ICMP请求时(通常是 ping )。您应该在运行Snort的终端中看到每个ICMP请求的告警。

04/21-11:11:37.078880  [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 192.168.31.21 -> 192.168.31.141

告警显示后,您可以使用 ctrl + C 停止Snort。

Snort 将警报记录到 /var/log/snort/snort.log.时间戳 ,其中时间戳是以 Unix 时间标记的 Snort 启动的时间点。可以使用下面的命令读取日志。由于只运行过一次 Snort,因此只有一个日志,可使用 Tab 自动补全文件名。

# snort -r /var/log/snort/snort.log.

日志显示每个 ICMP 请求的告警,其中包含源和目标 IP、时间和日期,以及以下示例中显示的一些其他信息。

在后台运行 Snort

最后,如果你想在后台运行Snort作为服务,你应该从Snort文档下载启动脚本。

如果您使用 yum 安装了 Snort,您应该已经配置了启动脚本。按如下所述启动服务。

使用以下命令获取并安装系统的启动脚本。

# wget https://www.snort.org/documents/snort-startup-script-for-centos -O ~/snortd
# sudo chmod 755 ~/snortd && sudo mv ~/snortd /etc/init.d/

重新加载系统守护程序:

# sudo systemctl daemon-reload

启动 Snort 服务

# sudo systemctl start snortd

启动脚本还包括其他常用的 systemctl 命令:stoprestartstatus。例如,可以使用以下命令检查服务的状态:

# sudo systemctl status snortd

恭喜,您现在应该已经成功地配置并测试了一个基于网络的入侵检测系统。然而,这篇指南仅涵盖了关于Snort和NIDS的基础知识介绍。如果想了解更多使用方法,请查看Snort文档页面上的部署指南,或者直接使用官方的Snort规则编写文档编写自己的检测规则。

最后修改:2023 年 04 月 21 日
如果觉得我的文章对你有用,请随意赞赏~