安装环境为Ubuntu,使用源码编译方式安装并导入社区Snort规则;联合防火墙作防护,依据Snort官网文档操做。html
Ubuntu 18和20上的Snort 3.0.1
用Splunk当SIEMnode
诺亚·迪特里希c++
内容
介绍git
安装Snortgithub
配置网卡web
安装OpenApplD正则表达式
安装Snort规则集sql
启用内置规则chrome
将PCAP文件传递到Snort并将警报输出到.csvshell
JSON警告输出插件
snort启动脚本
Splunk
使用Splunk
清理您的安装
结论
附录A:安装示例插件
附录B:更改安装位置
附录C:构建开发人员指南
附录D:安装BATS: Bash自动化测试系统
本做品根据知识共享属性-非商业性- sharealike 4.0国际许可(CC BY-NC-SA 4.0)进行受权。
介绍
本指南向您展现了如何在Ubuntu上使用Splunk将Snort 3设置为网络入侵检测系统(NIDS)和安全信息和事件管理(SIEM)系统。本指南的目的是向您介绍组成基于Snort和Splunk的NIDS和SIEM的组件和选项,以便您能够修改Snort和Splunk以知足您的特定需求。您能够经过复制和粘贴本指南中的各个步骤来安装Snort和Splunk,而不须要花时间了解本身在作什么,这样能够很好地工做。可是,若是您花时间理解为何要执行每一个步骤,那么您应该对Snort和Splunk的工做方式有更深刻的理解。
关于Snort 3: Snort 3是基于规则的网络入侵检测和预防软件(NIDS/NIPS)。它具备高度的灵活性和可配置性,可适应多种不一样的状况,而且具备新的插件体系结构,容许开发人员建立本身的插件,以便在Snort的处理管道中使用。本指南将重点介绍Snort最多见的用法:做为一个独立服务器,将网络流量与一组规则(称为规则集)进行比较,以检测可疑和可能的恶意流量,并对可疑流量生成警报。
关于Splunk: Splunk是一个收集安全信息和事件管理(SIEM)的系统。存储并容许您轻松地分析和可视化计算机生成的数据,包括由Snort建立的警报。本指南将使用Splunk以图形方式显示Snort警报,提供过滤和搜索功能,并帮助您基本了解Splunk是如何成为理解机器生成数据的强大工具的。
OpenApplD:OpenAppID容许Snort识别、控制和度量网络上使用的应用程序。OpenApplD由一组匹配特定类型网络数据的包(签名)组成,包括第7层应用程序,如Facebook, DNS, netflix, discus,谷歌,以及使用这些服务的应用程序(chrome, http, https等)。您能够基于这些OpenApplD签名建立规则,从而容许您阻止与某些应用程序相匹配的流量(例如,阻止全部Facebook流量)。
Snort 2 vs Snort 3: Snort 3是对Snort产品的彻底从新设计,以解决Snort 2.9.x的一些限制。一些主要的要点是多线程、可扩展的插件架构、基于lua的配置文件、命令行shell和许多其余特性。更多信息能够在这里找到。
软件要求:本指南已经在64位版本的Ubuntu server 18和20上进行了测试。这个指南尚未在32位版本的Ubuntu服务器上测试过,由于Splunk服务器不能安装在32位平台上。要启动Splunk,在安装它的驱动器上至少须要5gb的可用空间(一般是/opt/ Splunk)。
我尚未在其余基于debian的系统(包括Raspberry Pi)上测试过本指南,尽管我收到报告说,在安装和编译先决条件时,只需作不多的修改就可使其工做。
若是你必须安装Snort在32位系统上,你有几个选择:安装32位轻量级Splunk通用货代(超滤),服务器经过日志回到你Splunk服务器,Snort json日志复制到另外一个服务器进行索引,或者使用NFS共享日志目录(安全地)Splunk服务器能够看到和索引方法。
对于还没有可用的全栈Snort 3.0 NIDS/NIPS,惟一须要的软件是PulledPork,它执行规则集管理(自动下载最新的规则集以及其余管理工做)。一旦PulledPork被更新为适用于Snort 3.0,我将更新这个指南。
对于旧版本的Ubuntu,Snort 3不能方便地安装在早期版本的Ubuntu上,由于默认存储库中没有所需的支持软件版本,因此当遇到错误时,您须要手动编译所需的库(好比GCC)。
警告:Snort 3是测试版软件。不该该在生产系统中使用它。因为Snort 3目前正在开发中:自编写本指南以来,您下载的Snort 3版本可能经历了修改,从而致使编译或配置方面的问题。
支持:请在Snort分发列表中寻求帮助:
大多数请求都应该发送到Snort用户列表,除非与OpenApplD相关或与代码基有关的问题。请阅读如何问一个好问题和了解邮寄名单礼仪。
安装Snort
首先,确保您的系统是最新的,并有最新的包列表:
sudo apt-get update && sudo apt-get dist-upgrade -y确保你的系统有正确的时间和时区。这在稍后咱们开始使用Splunk处理警报时很是重要。下面的命令将容许您选择您的时区。在选择您的地区和时区后,它将显示当前时间。请确保这些都是正确的:
sudo dpkg-reconfigure tzdata
咱们将下载大量的源文件压缩包和其余源文件,咱们但愿将它们存储在一个文件夹中:
mkdir ~/snort_src
cd ~/snort_src安装Snort 3先决条件。这些包的详细信息能够在Snort3手册的需求部分找到:
sudo apt-get install -y build-essential autotools-dev libdumbnet-dev \ libluajit-5.1-dev libpcap-dev zlib1g-dev pkg-config libhwloc-dev \ cmake接下来安装可选(但强烈推荐的软件):
sudo apt-get install -y liblzma-dev openssl libssl-dev cpputest \ libsqlite3-dev uuid-dev若是但愿从包含Snort++开发人员指南的源树构建最新的文档,请安装如下软件包(纯属可选)。这些包的大小接近800mb,能够跳过,除非你特别想要开发指南:
sudo apt-get install -y asciidoc dblatex source-highlight w3m由于咱们将从github库中安装Snort,因此咱们须要一些工具(这一步在Ubuntu 20中是没必要要的,由于这些库已经安装好了):
sudo apt-get install -y libtool git autoconf须要安装Snort DAQ(数据获取库)的几个先决条件:
sudo apt-get install -y bison flex libcmocka-dev若是您但愿使用NFQ (IPS模式)之内联模式运行Snort,请安装所需的包;(以下所列的包是不须要的IDS模式或内联模式使用afpacket)。若是你不肯定,你应该安装这些包:
sudo apt-get install -y libnetfilter-queue-dev libmnl-dev下载和安装safec用于对某些遗留C-library调用的运行时边界检查(这是可选的,但推荐):
cd ~/snort_src #直接从github下载较慢,已转存至gitee wget https://gitee.com/deng_wenyi/snort3-ubuntu-install-source-code/repository/archive/master.zip apt install unzip unzip master.zip mv snort3-ubuntu-install-source-code/libsafec-08112019.0-gad76c7.tar.gz ./ tar -xzvf libsafec-08112019.0-gad76c7.tar.gz cd libsafec-08112019.0-gad76c7/ ./configure make sudo make install安装PCRE: Perl兼容正则表达式。咱们不使用Ubuntu库,由于Ubuntu库的版本更老。咱们没有使用pcre2,由于hyperscan没法与那个版本兼容。
cd ~/snort_src/ mv snort3-ubuntu-install-source-code/pcre-8.43.tar.gz ./ tar -xzvf pcre-8.43.tar.gz cd pcre-8.43 ./configure make sudo make install下载并安装gperftools 2.7,谷歌的线程缓存malloc(用于chrome)。Tcmalloc是一个内存分配器,它针对高并发状况进行了优化,将提供更好的速度来平衡较高的内存使用。咱们不但愿从Ubuntu存储库中得到tcmalloc版本(2.5版本),由于它与Snort不兼容。Tcmalloc是可选的,但建议:
sudo apt-get install -y libunwind-dev cd ~/snort_src mv snort3-ubuntu-install-source-code/gperftools-2.7.90.tar.gz ./ tar xzvf gperftools-2.7.90.tar.gz cd gperftools-2.7.90 ./configure make sudo make installSnort 3使用Hyperscan实现快速模式匹配。Hyperscan须要Ragel和Boost头:
cd ~/snort_src mv snort3-ubuntu-install-source-code/ragel-6.10.tar.gz ./ tar -xzvf ragel-6.10.tar.gz cd ragel-6.10 ./configure make sudo make installHyperscan须要Boost c++库。请注意,咱们没有使用boost头文件的Ubuntu存储库版本(libboost-all-dev),由于Hyperscan须要1.58或更高版本的boost库,并且Ubuntu存储库版本太老了。下载Boost 1.72.0库,但不安装:
cd ~/snort_src #boost库比较大(约120M),见百度网盘下载;或使用原连接下载 #连接: https://pan.baidu.com/s/1GOM1KXJDjBMsElGw7q3fRg 密码: e4av #--来自百度网盘超级会员V4的分享 wget https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz tar -xvzf boost_1_72_0.tar.gz从源文件安装hyperscan5.2.1,引用Boost头文件源目录的位置:
cd ~/snort_src mv snort3-ubuntu-install-source-code/hyperscan-5.2.1.tar.gz ./ tar -xvzf hyperscan-5.2.1.tar.gz mkdir ~/snort_src/hyperscan-5.2.1-build cd hyperscan-5.2.1-build/ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBOOST_ROOT=~/snort_src/boost_1_72_0/ ../hyperscan-5.2.1 make sudo make install若是你想测试Hyperscan工做,从构建目录,运行:
cd ~/snort_src/hyperscan-5.2.1-build/ ./bin/unit-hyperscanSnort对flatbuffers有一个可选的要求,这是一个内存高效的序列化库(您能够在cmake过程当中忽略“不是git库”的错误):
cd ~/snort_src mv snort3-ubuntu-install-source-code/flatbuffers-v1.12.0.tar.gz ./ tar -xzvf flatbuffers-v1.12.0.tar.gz mkdir flatbuffers-build cd flatbuffers-build cmake ../flatbuffers-1.12.0 make sudo make install接下来,从Snort网站下载并安装数据采集库(DAQ)。注意,Snort 3使用的DAQ与Snort 2.9.x.x系列不一样:
cd ~/snort_src git clone https://gitee.com/deng_wenyi/snort3-libdaq.git cd snort3-libdaq ./bootstrap ./configure make sudo make install更新共享库:
sudo ldconfig
如今,咱们准备从github存储库下载、编译和安装Snort 3。若是您对启用额外的编译时功能感兴趣,好比可以处理大的(超过2 GB) PCAP文件,或者新的命令行shell,那么您应该运行./configure cmake.sh --help列出全部可能的选项。若是您想安装到其余位置,请参阅附录B。下载和安装,默认设置:
cd ~/snort_src git clone https://gitee.com/deng_wenyi/snortadmin-snort3.git cd snortadmin-snort3/ ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc cd build make sudo make install安装的最后一步是验证Snort是否安装并能够运行。为此,咱们向snort可执行文件传递-V这个标志:
/usr/local/bin/snort -V您应该会看到相似以下的输出:
root@UbuntuServer:~/snort_src/snortadmin-snort3/build# /usr/local/bin/snort -V ,,_ -*> Snort++ <*- o" )~ Version 3.0.3 (Build 5) '''' By Martin Roesch & The Snort Team http://snort.org/contact#team Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved. Copyright (C) 1998-2013 Sourcefire, Inc., et al. Using DAQ version 3.0.0 Using LuaJIT version 2.0.4 Using OpenSSL 1.0.2g 1 Mar 2016 Using libpcap version 1.7.4 Using PCRE version 8.43 2019-02-23 Using ZLIB version 1.2.8 Using FlatBuffers 1.12.0 Using Hyperscan version 5.2.1 2020-12-13 Using LZMA version 5.1.0alpha若是您的输出与上面的相似,那么恭喜您!Snort已安装并正常工做。如今让咱们使用默认配置文件测试Snort:
snort -c /usr/local/etc/snort/snort.lua您应该会看到以如下内容结束的输出:
Snort successfully validated the configuration (with 0 warnings). o")~ Snort exiting配置网卡
现代网卡使用卸载(例如LRO)来处理硬件中的网络包从新组装,而不是在软件中从新组装。对于大多数状况,这是首选的,由于它减小了系统上的负载。对于NIDS,咱们但愿禁用LRO和GRO,由于这会截断较长的数据包(更多信息请参见Snort 2手册)。
咱们须要建立一个systemD服务来更改这些设置。首先肯定使用ifconfig查看让snort侦听的接口的名称。
注意:若是你使用的是Ubuntu 20: ifconfig已经被ip命令所取代(运行ip address show查看接口和ip地址)。
一旦知道了网络接口的名称,请检查这些接口的大接收(LRO)和通用接收(GRO)的卸载状态。在下面的示例中,个人接口名称是ens3(根据系统类型,您一般也会看到etho或ens160做为接口名称)。
咱们使用ethtool来检查LRO/GRO的状态
sudo ethtool -k ens3 | grep receive-offload输出:
generic-receive-offload: on large-receive-offload: off [fixed]
从这个输出中,您能够看到启用了GRO,LRO被禁用(“固定”意味着它不能被改变)。咱们须要确保二者都被设置为"off"(或off [fixed])。咱们可使用ethtool命令禁用LRO和GRO,但该设置不会在从新启动时持久存在。解决方案是建立一个systemD脚本,在每次引导时自动设置这个值。
建立systemD脚本:
sudo vi /lib/systemd/system/ethtool.service输入如下信息,将ens3替换为您的接口名称:
[Unit] Description=Ethtool Configration for Network Interface [Service] Requires=network.target Type=oneshot ExecStart=/sbin/ethtool -K ens3 gro off ExecStart=/sbin/ethtool -K ens3 lro off [Install] WantedBy=multi-user.target文件建立完成后,启用服务:
sudo systemctl enable ethtool sudo service ethtool start这些设置如今将在从新引导时持久存在。您可使用ethtool验证设置,将显示(off或off[fixed]是您想要看到的设置):
sudo ethtool -k ens3 | grep receive-offload输出:
generic-receive-offload: off large-receive-offload: off [fixed]
安装OpenApplD
OpenApplD容许识别应用层(第7层)的流量。您能够建立操做应用程序层流量的规则(好比阻止facebook),并记录检测到的每种类型的流量统计数据
在社区的帮助下,Snort团队建立了一个检测器包,称为应用程序检测器包,能够下载和安装。首先下载OpenAppID检测器包并解压缩文件
cd ~/snort_src/ mv snort3-ubuntu-install-source-code/snort-openappid.tar.gz ./ tar -xzvf snort-openappid.tar.gz sudo cp -R odp /usr/local/lib/若是您获得的错误是该文件不存在,那么多是Snort团队更新了规则集。浏览到https://snort.org/downloads#openappid,并下载snort-openappid.tar.gz。
按照上面的方法下载和提取规则后,咱们须要编辑Snort配置文件以指向这个odp目录:
sudo vi /usr/local/etc/snort/snort.lua在第89行(您的行号可能略有不一样),您将看到"appid ="条目。您将须要在这里添加app_detector_dir选项,它指向咱们上面解压缩的odp文件夹的父文件夹。它应该是这样的:
appid = { −− appid requires this to use appids in rules app_detector_dir = '/usr/local/lib', }注意,缩进行必须有四个空格(而不是制表符)。如今咱们想测试配置文件正确加载:
snort -c /usr/local/etc/snort/snort.lua --warn-all此命令将验证Snort是否能够正确读取snort.lua文件,它不包含任何错误。运行此命令后,您应该看到以如下内容结束的输出:
注:(Snort的异常等级,警告、错误、致命错误)(我产生了5个警告,但这无伤大雅)
... Finished /usr/local/etc/snort/snort.lua: WARNING: appid: no lua detectors found in directory '/usr/local/lib/custom/lua/*' -------------------------------------------------- pcap DAQ configured to passive. Snort successfully validated the configuration (with 1 warnings). o")~ Snort exiting您可能会看到一个警告(非致命):WARNING: appid:在目录"/usr/local/lib/custom/lua/"中找不到lua检测器。
只要输出以“Snort成功验证了配置”结束,就能够忽略此警告。这个警告只是意味着您没有任何本地开发的openAppld获取脚本。
接下来,咱们将建立一个简单的规则来测试OpenAppID是否正常工做
sudo mkdir /usr/local/etc/rules sudo touch /usr/local/etc/rules/local.rules sudo vi /usr/local/etc/rules/local.rules咱们将在local.rules文件中生成两个规则。第一个规则使用OpenApplID来检查Facebook流量,第二个规则将检测ICMP流量,这对于测试警报是否正确生成很是有用。这两条规则很适合测试您的设置。将如下两行粘贴到上面建立的local.rules文件中:
alert tcp any any -> any any ( msg:"Facebook Detected"; appids:"Facebook";sid:10000001; ) alert icmp any any -> any any (msg:"ICMP Traffic Detected";sid:10000002;)如今运行Snort并加载local.rules文件,以确保正确加载这些规则(验证规则的格式正确):
snort -c /usr/local/etc/snort/snort.lua \ -R /usr/local/etc/rules/local.rules
输出应该以“Snort成功验证了匹配”结束。你不该该有任何警告或错误.
若是您向上滚动输出,您应该会看到这两个文本规则已成功加载(在rule counts部分)。如今,让咱们在一个接口(更改下面的etho以匹配您的接口名称)上以检测模式运行snort,并将全部警报打印到控制台:
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules \ -i eth0 -A alert_fast -s 65535 -k none"-k none"标志告诉Snort忽略错误的校验和,而"-s 65535"标志则防止Snort处理过大的包。Stream和Frag解码器会丢弃校验和错误的数据包,而OpenApplD检测器也不会处理这些数据包。经过包含这些标志,咱们能够确保具备错误校验和的数据包仍然被处理为警报。snort将加载配置,而后显示:
Commencing packet processing ++ [0] eth0这意味着snort目前正在监听该接口上的全部流量,并将其与它加载的两个规则进行比较。当流量与规则匹配时,snort将向控制台写入警告。如今,从该计算机上的另外一个窗口(打开一个新的终端窗口或第二个ssh会话),使用wget链接到facebook。这将触发第一个规则:
wget facebook.com
在第一个控制台窗口中,您将看到相似于如下的警报输出:
05/30−21:26:48.482231 [**] [1:10000001:0] "Facebook Detected" [**] [Priority: 0] [AppID: Facebook] {TCP} 10.10.10.170:59632 −> 185.60.216.35:80 05/30−21:26:48.506197 [**] [1:10000001:0] "Facebook Detected" [**] [Priority: 0] [AppID: Facebook] {TCP} 185.60.216.35:80 −> 10.10.10.170:59632 ...使用ctrl-c中止Snort。您还能够在snort侦听时(触发local.rules文件中的第二条规则)与这台机器进行ping或从该机器发出ping以生成警报。这是测试Snort的好规则,但在实际生产使用过程当中可能会产生一些干扰。
若是没有看到生成的警报,请确保在此测试中,您正在运行snort的计算机上运行wget facebook.com,而且请求将从snort侦听的接口发出。您能够从另外一台计算机ping到snort(到让snort侦听的接口的ip地址)。
注:(若是没法使用ctrl-c中止Snort,能够尝试ctrl-z)
若是但愿收集OpenAppID统计信息(每一个检测器检测到多少流量),则须要在snort.lua文件中启用它,并使用"-l"标志,在标志后接"日志目录"运行Snort。
首先建立一个日志目录
sudo mkdir /var/log/snort如今修改/usr/local/etc/snort/snort.lua使appid检测器可以记录统计信息(第89行):
appid = { app_detector_dir = '/usr/local/lib', log_stats = true, }如今运行snort,监听接口,将数据记录到/var/log/snort文件夹
(与以前的命令相同,咱们只是添加了日志文件夹路径"-l"标志)
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules \ -i eth0 -A alert_fast -s 65535 -k none -l /var/log/snort在收集一些数据并中止Snort(像之前同样使用ping和wget facebook.com生成数据,而后使用Ctrl-C中止)以后,您将在/var/log/snort看到appid_stats.log该文件为root用户全部,所以让全部人均可读(咱们将在后面一节中更改Snort自动编写的文件的权限):
sudo chmod a+r /var/log/snort/appid_stats.log如今能够查看snort收集的协议统计信息:
noah@snort3:~/snort_src$ cat /var/log/snort/appid_stats.log 1549218716,DNS,1576,1778 1549218716,Facebook,8727,630912 1549218716,OpenSSH,19523,2344 1549218716,SSH,19523,23445 1549218716,HTTPS,8727,630912 1549218716,SSL client,8727,630912 1549218716,ICMP,392,392 1549218716,__unknown,11028,139100这是一个逗号分隔的文件,按照这个顺序显示时间(unixtime)、检测器、发送字节(tx)和接收字节(rx)。若是不但愿收集此数据,能够在snort.lua配置文件appid模块中禁用log开启选项。请注意,此数据与local.rules文件中由规则生成的警报不一样。有关检测器的更多信息,请参见OpenApplD检测器指南。
安装Snort规则集
与Snort 2规则相比,Snort 3规则有更多的选项,尽管手动下载的v2规则或使用PulledPork(一个自动下载更新规则集的脚本)能够在Snort 3中使用,但应该使用专门为Snort 3建立的规则。
目前PulledPork还不能与Snort 3一块儿工做,所以没法自动更新规则集。我指望在不久的未来改变,一旦有了,我将发布一个更新的指南。
有三组不一样的Snort规则可供选择(称为规则集)。社区规则集是免费的,不须要登陆;注册的规则集包含社区规则集和其余规则,须要在snort.org上拥有一个免费账户。订阅者规则集是付费服务。订阅方规则集的规则将在30天后添加到注册的规则集。更多的信息在这里
本指南将假设您正在使用注册的规则集。您须要在Snort.org上建立一个账户,还能够选择在其中注册各类snort邮件列表(电子邮件数量适中,一般有一些有趣的问题)。注册并签到以后,导航到规则下载页面,下载最新的3.0规则(称为snortrales-snapshot3xxx.tar.gz或相似的内容,取决因而否发布了新的版本)。将规则集保存到snort-src文件夹中。
咱们须要建立一些文件夹来存储规则集中的规则。这里咱们在usr/local/etc/snort中建立了四个文件夹(若是您在上面为local.rules文件建立了第一个文件夹,那么它可能已经存在);
文件夹名称 目的 rules 注册规则集中的全部基本规则文件 builtin_rules 包含内置规则的引用和信息的规则文件 so_rules 这些是编译后的规则。Snort 3尚未这些功能,但很快就会实现 lists 白名单和黑名单。咱们在本指南中没有设置这些 建立这些文件夹:
sudo mkdir /usr/local/etc/rules sudo mkdir /usr/local/etc/builtin_rules sudo mkdir /usr/local/etc/so_rules sudo mkdir /usr/local/etc/listsSnort的规则集包含三个文件夹:一个规则文件夹包含全部单独的规则文件,一个内建文件夹包含关于构建到snort的规则的信息,以及一个etc文件夹,其中包含规则集生成的更新后的snort配置文件。从Snort的规则集中提取文件,将全部规则文件复制到snort规则文件夹中,将内置规则复制到内置文件夹中,并将snort配置文件复制到snort的程序文件夹中:
注:(此时应该去snort官网下载注册规则集,并储存在~/snort_src/目录;由于下一步即将用到)
cd ~/snort_src/ #在此提供了注册规则集的下载地址,但仍但愿您去官方下载,由于它有可能会失效 wget https://www.snort.org/rules/snortrules-snapshot-3000.tar.gz?oinkcode=0e0795beeba6b8bd7c1d5b2727e48ad7a9202eb6 -O snortrules-snapshot-3000.tar.gz mkdir snortrules-3000 tar -xvzf snortrules-snapshot-3000.tar.gz -C ./snortrules-3000 cd snortrules-3000 #复制单个规则文件 sudo cp ./rules/*.rules /usr/local/etc/rules/ #复制内建规则文件 sudo cp ./builtins/builtins.rules /usr/local/etc/builtin_rules/ #复制新的配置文件(咱们将覆盖当前的配置)。 sudo cp ./etc/* /usr/local/etc/snort/咱们从etc文件夹复制了三个文件。file_magic.lua它告诉snort如何识别文件类型;snort_defaults.lua表示(配置snort的全局设置(系统范围);snort.lua它是snort特定实例的配置文件。
每次运行Snort时,您将向Snort传递一个snort.lua文件,该文件描述您但愿snort如何运行。这个文件会加载默认文件,它描述的系统配置,适用于每一个dierent不一样方式运行snort。你
能够有多个dierent版本的snort.lua,但一般只有一个默认的配置。
咱们如今将编辑这些文件。咱们不须要对/usr/local/etc/snort/snort_defaults.lua进行任何更改。可是若是您查看从第23行开始的部分,您会注意到咱们在上面建立的文件夹。这就是snort如何在这些文件夹中查找规则文件的方法。
注:(这两段话及其绕口,劳资也没听懂,可是不要紧)
接下来,编辑snort.lua文件。这个文件是咱们在启动时传递给snort的配置文件,它还加载snort_defaults.lua文件。
sudo vi /usr/local/etc/snort/snort.lua首先,让咱们配置咱们的HOME_NET变量。这指的是咱们正在保护的本地子网(规则使用此信息来肯定警报是否匹配)。在这里设置您的本地子网信息以匹配您的子网。个人子网配置是10.0.0.0网络与24位子网掩码:
HOME_NET = '10.0.0.0/24'设置EXTERNAL_NET为“any”(一些指南但愿你设置这个为除了全部子网的主网。但这会让你错过许多重要的警告)。
在第91行,您将看到appid插件没有任何选项(意味着检测器已加载,但未配置)。若是愿意,能够像上一节那样配置它。
注:(官方修改了配置文件,之前多是在91行,但如今它在116行;像以前同样配置appid的路径并启用日志文件便可)
在第169行,您将看到ips检测器。若是你查看IPS设置,你会看到咱们复制的全部规则文件,从第180行开始:
注:(ips检测器在195行,“咱们复制的全部规则文件”是从206行开始)
rules = [[ include $RULE_PATH/snort3-app-detect.rules include $RULE_PATH/snort3-browser-chrome.rules include $RULE_PATH/snort3-browser-firefox.rules include $RULE_PATH/snort3-browser-ie.rules ...$RULE_PATH路径在snort_defaults.lua中定义,引用/usr/local/etc/rules.您能够在第172行看到内置ips选项;稍后咱们将启用这些规则。如今,让咱们测试一下snort是否能够成功加载这些规则。让咱们经过运行snort来测试配置文件,并将路径传递给这个修改后的snort.lua文件,就像咱们以前作的:
snort -c /usr/local/etc/snort/snort.lua若是你出现了相似如下报错:
Finished /usr/local/etc/snort/snort.lua: Loading ips.rules: FATAL: ips.rules:3 undefined variable name: RULE_PATH. Fatal Error, Quitting..请移步个人另外一篇文章:http://www.javashuo.com/article/p-xibqgyxv-ny.html
未完待续……