Snort的安裝——Fedora

2023-05-05 21:00:35

Snort Fedora Install

簡介

Snort 是世界上知名的開源入侵防禦系統 (IPS)。Snort IPS 使用一系列規則來幫助定義惡意網路活動,並使用這些規則來查詢與其匹配的封包併為使用者生成警報。

Snort 也可以內聯部署以阻止這些封包。Snort 具有三個主要用途:作為封包嗅探器(如 tcpdump),作為封包記錄器——這對網路流量偵錯很有用,或者它可以用作成熟的網路入侵防禦系統。

Snort的安裝我認為還是比較麻煩的,大部分都是要用到編譯安裝,Snort的前置庫也非常的多,因此我打算系統整理一下Snort的安裝方法。

安裝過程

Dnf源設定

[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依賴軟體

下表總結了構建 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
安裝LibDAQ

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 and UUID

lzma 用於解壓縮SWF和PDF檔案,而 uuid 是一個用於生成/解析通用唯一ID的庫,用於標記/識別網路中的物件。

[root@localhost ~]# dnf install xz-devel libuuid-devel 
Hyperscan

儘管 Hyperscan 是可選項,但還是非常建議安裝它的。

[root@localhost ~]# dnf install hyperscan hyperscan-devel 
Flatbuffers

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

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
Tcmallo

tcmalloc 是 Google (PerfTools) 建立的一個庫,用於改進執行緒程式中的記憶體處理。使用該庫可能會提高效能並減少記憶體使用量。

[root@localhost ~]# dnf install gperftools-devel

Snort3安裝

現在所有依賴項都已安裝,從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。