Ubuntu22.04安装Snort3并进行网络流量异常检测
Snort 是世界上最重要的开源入侵防御系统 (IPS)。Snort IPS 使用一系列规则来帮助定义恶意网络活动,并使用这些规则查找与它们匹配的数据包,并为用户生成警报。Snort 也可以内联部署以阻止这些数据包。Snort 有三个主要用途:作为数据包嗅探器(如 tcpdump)、数据包记录器(可用于网络流量调试),或者它可以用作成熟的网络入侵防御系统。Snort 可以下载和配置,用于个人和企业用途。(摘自SNORT官网)
1. 安装Ubuntu22.04虚拟机
本教程采用ubuntu-22.04.3-live-server-amd64.iso镜像(server版)
虚拟机的安装步骤此处省略。
2. 安装Snort3
参考官方文档
文档链接
确保系统包是最新的
sudo apt-get update && sudo apt-get upgrade -y
选择正确的时区
sudo dpkg-reconfigure tzdata # 图形化界面来进行选择,我选择的是Asia/Shanghai。
创建一个文件夹来存放一些文件
mkdir ~/snort_src && cd ~/snort_src
安装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 liblzma-dev openssl libssl-dev cpputest libsqlite3-dev \ libtool uuid-dev git autoconf bison flex libcmocka-dev libnetfilter-queue-dev libunwind-dev \ libmnl-dev ethtool libjemalloc-dev
下载并安装 safec 以对某些旧版 C 库调用进行运行时边界检查
cd ~/snort_src wget https://github.com/rurban/safeclib/releases/download/v02092020/libsafec-02092020.tar.gz tar -xzvf libsafec-02092020.tar.gz cd libsafec-02092020.0-g6d921f ./configure make sudo make install
Snort3使用 Hyperscan 进行快速模式匹配。可以从Ubuntu存储库安装旧版本的Hyperscan,但是由于Hyperscan对Snort的操作和性能至关重要,最好编译Hyperscan的最新稳定版本。需要包括PCRE、gperftools、ragel和Boost 库。
- 安装pcre
cd ~/snort_src/ wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz tar -xzvf pcre-8.45.tar.gz cd pcre-8.45 ./configure make sudo make install
- 安装gperftools
cd ~/snort_src wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gz tar -xzvf gperftools-2.9.1.tar.gz cd gperftools-2.9.1 ./configure make sudo make install
- 安装ragel
cd ~/snort_src wget http://www.colm.net/files/ragel/ragel-6.10.tar.gz tar -xzvf ragel-6.10.tar.gz cd ragel-6.10 ./configure make sudo make install
- 最后,下载(但不要安装)Boost C++ 库
cd ~/snort_src wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.gz tar -xvzf boost_1_77_0.tar.gz
从源代码安装 Hyperscan 5.4,并参考 Boost 源目录的位置
cd ~/snort_src wget https://github.com/intel/hyperscan/archive/refs/tags/v5.4.0.tar.gz tar -xvzf v5.4.0.tar.gz mkdir ~/snort_src/hyperscan-5.4.0-build cd hyperscan-5.4.0-build/ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBOOST_ROOT=~/snort_src/boost_1_77_0/ ../hyperscan-5.4.0 make sudo make install
- 安装flatbuffers
cd ~/snort_src wget https://github.com/google/flatbuffers/archive/refs/tags/v2.0.0.tar.gz -O flatbuffers-v2.0.0.tar.gz tar -xzvf flatbuffers-v2.0.0.tar.gz mkdir flatbuffers-build cd flatbuffers-build cmake ../flatbuffers-2.0.0 make sudo make install
接下来,从 Snort 网站下载并安装数据采集库 (DAQ)。请注意,Snort 3 比 Snort 2.9 使用更远的 DAQ。
cd ~/snort_src wget https://github.com/snort3/libdaq/archive/refs/tags/v3.0.5.tar.gz -O libdaq-3.0.5.tar.gz tar -xzvf libdaq-3.0.5.tar.gz cd libdaq-3.0.5 ./bootstrap ./configure make sudo make install
更新分享库
sudo ldconfig
下载安装Snort3
cd ~/snort_src wget https://github.com/snort3/snort3/archive/refs/tags/3.1.18.0.tar.gz -O snort3-3.1.18.0.tar.gz tar -xzvf snort3-3.1.18.0.tar.gz cd snort3-3.1.18.0 ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc --enable-jemalloc cd build make sudo make install
在make编译时,请保持耐心,如果出现报错,请删除build文件夹,并重新解压重新编译
以上步骤完成后,可以验证Snort是否安装成功
/usr/local/bin/snort -V # 版本V大写
如果安装成则会看到如下内容
让我们测试一下默认的配置文件
snort -c /usr/local/etc/snort/snort.lua
正常情况下会看到如下内容
配置网卡
可以使用ipconfig,如果是Ubuntu可以使用ip address show
查看网卡名称,我的是ens33
用ethtool查看generic-receive-offload和large-receive-offload的状态
sudo ethtool -k ens33 | grep receive-offload
我的结果如下
我们需要将两个状态都改为off。
编写一个systemD服务,这样可以保证每次开机都是off的状态
sudo vi /lib/systemd/system/ethtool.service
编辑内容如下
[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 systemctl start ethtool
创建一些配置Snort策略的文件夹
sudo mkdir /usr/local/etc/rules sudo mkdir /usr/local/etc/so_rules/ sudo mkdir /usr/local/etc/lists/ sudo touch /usr/local/etc/rules/local.rules sudo touch /usr/local/etc/lists/default.blocklist sudo mkdir /var/log/snort
在上面创建的文件中创建一条规则
sudo vi /usr/local/etc/rules/local.rules
此规则将检测 ICMP 流量,并且非常适合测试 Snort 是否正常工作并生成警报。将以下行粘贴到 local.rules 文档中(确保完全复制此行,此文档中的每个分号后必须有一个空格,以便 PulledPorkto 正确解析警报):
alert icmp any any -> any any (msg:"ICMP Traffic Detected"; sid:10000001;metadata:policy security-ips alert;)
现在运行 Snort 并让它加载 local.rules 文档(带有 -R 标志),以确保它正确加载这些规则(验证规则格式是否正确):
snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules
输出应以“Snort 已成功验证配置”结尾。您不应有任何警告或错误。如果向上滚动输出,应会看到此规则已成功加载(在“规则计数”部分下)。现在让我们在接口上以检测模式运行 Snort(更改下面的 ens33 以匹配你的接口名称),并将所有警报打印到控制台:
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i ens33 -A alert_fast -s 65535 -k none
这意味着 snort 当前正在侦听该接口上的所有流量,并将其与它加载的规则进行比较。当流量匹配规则时,Snort 会向控制台写入警报。现在,从该计算机上的另一个窗口(打开新的终端 vwindow 或第二个 sshsession),使用 ping 命令生成遍历您正在侦听的接口的数据包(如果您从另一台计算机连接,则 ping 到该接口的 IP 地址,或者如果您在同一台计算机上,则仅 ping 外部 IP 地址。您应该会在屏幕上看到警报打印:
05/31-09:45:34.872993 [**] [1:10000001:0] "ICMP Traffic Detected" [**] [Priority: 0] {ICMP} 192.168.1.1 -> 192.168.1.4 05/31-09:45:34.873488 [**] [1:10000001:0] "ICMP Traffic Detected" [**] [Priority: 0] {ICMP} 192.168.1.4 -> 192.168.1.1 05/31-09:45:35.882594 [**] [1:10000001:0] "ICMP Traffic Detected" [**] [Priority: 0] {ICMP} 192.168.1.1 -> 192.168.1.4 05/31-09:45:35.882656 [**] [1:10000001:0] "ICMP Traffic Detected" [**] [Priority: 0] {ICMP} 192.168.1.4 -> 192.168.1.1 05/31-09:45:47.935549 [**] [1:10000001:0] "ICMP Traffic Detected" [**] [Priority: 0] {ICMP} 192.168.1.1 -> 192.168.1.4
接下来,让我们编辑 snort.lua 文档。此文档是我们在启动时传递给 Snort 的配置 fle:使用 ctrl-c 停止 Snort。这是测试 Snort 的好规则,但在实际生产使用过程中可能会有点嘈杂,因此如果您愿意,请用哈希符号注释掉它。
本文作者:jikefan
本文链接:https://www.cnblogs.com/jikefan/articles/18220328
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。