做一个代码世界的设计师!🍺|

Jikefan

园龄:4年11个月粉丝:5关注:4

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 库。

  1. 安装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
  1. 安装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
  1. 安装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
  1. 最后,下载(但不要安装)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
  1. 安装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大写

如果安装成则会看到如下内容

image

让我们测试一下默认的配置文件

snort -c /usr/local/etc/snort/snort.lua

正常情况下会看到如下内容
image

配置网卡

可以使用ipconfig,如果是Ubuntu可以使用ip address show
查看网卡名称,我的是ens33
用ethtool查看generic-receive-offload和large-receive-offload的状态

sudo ethtool -k ens33 | grep receive-offload

我的结果如下
image

我们需要将两个状态都改为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 中国大陆许可协议进行许可。

posted @   Jikefan  阅读(624)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.