Snort 是世界上知名的開源入侵防禦系統 (IPS)。Snort IPS 使用一系列規則來幫助定義惡意網路活動,並使用這些規則來查詢與其匹配的封包併為使用者生成警報。
Snort 也可以內聯部署以阻止這些封包。Snort 具有三個主要用途:作為封包嗅探器(如 tcpdump),作為封包記錄器——這對網路流量偵錯很有用,或者它可以用作成熟的網路入侵防禦系統。
Snort的安裝我認為還是比較麻煩的,大部分都是要用到編譯安裝,Snort的前置庫也非常的多,因此我打算系統整理一下Snort的安裝方法。
[root@localhost ~]# wget -O /etc/yum.repos.d/fedora.repo http://mirrors.aliyun.com/repo/fedora.repo
[root@localhost ~]# wget -O /etc/yum.repos.d/fedora-updates.repo http://mirrors.aliyun.com/repo/fedora-updates.repo
# 下載阿里源
[root@localhost ~]# dnf makecache && dnf update && reboot
# 生成快取並更新軟體包並重啟裝置
這裡使用的系統版本為是Fedora 37,DNF源為阿里源。
基於 Red Hat 的作業系統在連結器快取路徑中不包含 /usr/local/lib
和 /usr/local/lib64
,這將導致構建錯誤,這是因為連結器無法找到參照的庫。
那麼我們通過在 /etc/ld.so.conf.d 下建立包含所需路徑的組態檔並更新快取來糾正此問題。
[root@localhost ~]# vi /etc/ld.so.conf.d/local.conf
# 修改檔案新增如下內容
[root@localhost ~]# cat /etc/ld.so.conf.d/local.conf
/usr/local/lib
/usr/local/lib64
填寫完組態檔後,我們執行ldconfig
來重新整理快取。
接下來我們安裝LibDAQ所需的軟體來為構建LibDAQ做準備。
[root@localhost ~]# dnf install git vim flex bison gcc gcc-c++ make cmake automake autoconf libtool
下表總結了構建 Snort 和 LibDAQ 所需的和可選的包。
[root@localhost ~]# dnf install libpcap-devel pcre-devel libdnet-devel hwloc-devel openssl-devel zlib-devel luajit-devel pkgconf libmnl-devel libunwind-devel
如果需要構建支援NAQ的LibDAQ則需要安裝額外的包。
[root@localhost ~]# dnf install libnfnetlink-devel libnetfilter_queue-devel
Snort3需要的LibDAQ(>=3.0.0),通過Git進行Clone並使用其中指令碼進行安裝。
[root@localhost ~]# git clone https://github.com/snort3/libdaq.git
[root@localhost ~]# cd libdaq/
[root@localhost libdaq]# ./bootstrap
如果需要通過選項自定義LibDAQ的構建模組,我們可以通過 --disable-
-module 進行設定。 例如 ./configure --disable-netmap-module --disable-divert-module
[root@localhost libdaq]# ./configure
它會輸出如下的內容
...
Build AFPacket DAQ module.. : yes
Build BPF DAQ module....... : yes
Build Divert DAQ module.... : no
Build Dump DAQ module...... : yes
Build FST DAQ module....... : yes
Build NFQ DAQ module....... : yes
Build PCAP DAQ module...... : yes
Build netmap DAQ module.... : no
Build Trace DAQ module..... : yes
然後安裝LibDAQ。
[root@localhost libdaq]# make
[root@localhost libdaq]# make install
[root@localhost libdaq]# ldconfig
[root@localhost libdaq]# cd ../
lzma 用於解壓縮SWF和PDF檔案,而 uuid 是一個用於生成/解析通用唯一ID的庫,用於標記/識別網路中的物件。
[root@localhost ~]# dnf install xz-devel libuuid-devel
儘管 Hyperscan 是可選項,但還是非常建議安裝它的。
[root@localhost ~]# dnf install hyperscan hyperscan-devel
Flatbuffers 是一個用於記憶體受限應用程式的跨平臺序列化庫。它允許直接存取序列化資料而無需先解包/解析它。
[root@localhost ~]# curl -Lo flatbuffers-v23.3.3.tar.gz https://github.com/google/flatbuffers/archive/refs/tags/v23.3.3.tar.gz
[root@localhost ~]# tar xf flatbuffers-v23.3.3.tar.gz
[root@localhost ~]# mkdir fb-build && cd fb-build
[root@localhost fb-build]# cmake ../flatbuffers-23.3.3
[root@localhost fb-build]# make -j$(nproc)
[root@localhost fb-build]# make -j$(nproc) install
[root@localhost fb-build]# ldconfig
[root@localhost fb-build]# cd ../
Safec用於對某些遺留C庫呼叫進行執行時邊界檢查。 Safec包在EPEL儲存庫中可用。
[root@localhost ~]# dnf install libsafec libsafec-devel
[root@localhost ~]# ln -s /usr/lib64/pkgconfig/safec-3.3.pc /usr/lib64/pkgconfig/libsafec.pc
tcmalloc 是 Google (PerfTools) 建立的一個庫,用於改進執行緒程式中的記憶體處理。使用該庫可能會提高效能並減少記憶體使用量。
[root@localhost ~]# dnf install gperftools-devel
現在所有依賴項都已安裝,從GitHub克隆Snort3儲存庫。
[root@localhost ~]# git clone https://github.com/snort3/snort3.git
[root@localhost ~]# cd snort3
在設定Snort之前,宣告 PKG_CONFIG_PATH 變數來包含 LibDAQ pkgconfig 路徑,以及其他包的 pkgconfig 路徑,否則構建過程可能會失敗。
[root@localhost snort3]# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@localhost snort3]# export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
如果 LibDAQ 或其他包安裝到自定義的非系統路徑,則需要將該路徑匯出到 PKG_CONFIG_PATH,例如:
export PKG_CONFIG_PATH=/opt/libdaq/lib/pkgconfig:$PKG_CONFIG_PATH
在啟用Tcmalloc支援的同時繼續構建Snort3。在構建Snort之前匯出的編譯器標誌用於幫助改進編譯時間、生成程式碼的效能和最終Snort的二進位制影象大小。
[root@localhost snort3]# export CFLAGS="-O3"
[root@localhost snort3]# export CXXFLAGS="-O3 -fno-rtti"
[root@localhost snort3]# ./configure_cmake.sh --prefix=/usr/local/snort --enable-tcmalloc
上面的命令應該產生類似於下面的輸出(部分省略)。
-------------------------------------------------------
snort version 3.1.0.0
...
Feature options:
DAQ Modules: Static (afpacket;bpf;dump;fst;nfq;pcap;trace)
Flatbuffers: ON
Hyperscan: ON
ICONV: ON
Libunwind: ON
LZMA: ON
RPC DB: Built-in
SafeC: ON
TCMalloc: ON
UUID: ON
接下來安裝Snort。
[root@localhost snort3]# cd build/
[root@localhost build]# make -j$(nproc)
[root@localhost build]# make -j$(nproc) install
[root@localhost build]# cd ../../
安裝完成後,驗證Snort 3是否報告了預期的版本和庫名稱
[root@localhost ~]# /usr/local/snort/bin/snort –V
,,_ -*> Snort++ <*-
o" )~ Version 3.1.60.0
'''' By Martin Roesch & The Snort Team
http://snort.org/contact#team
Copyright (C) 2014-2023 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using DAQ version 3.0.11
Using LuaJIT version 2.1.0-beta3
Using OpenSSL 3.0.8 7 Feb 2023
Using libpcap version 1.10.4 (with TPACKET_V3)
Using PCRE version 8.45 2021-06-15
Using ZLIB version 1.2.12
Using Hyperscan version 5.4.1 2023-04-14
Using LZMA version 5.4.1
那麼Snort的安裝過程就到此為止了,後續Snort的使用與設定,會在後續的文章中提到。
如果想要交流網安知識可以傳送郵件到[email protected]。
或者加入我的Discord頻道https://discord.gg/v2Q9WKKQ。