如何在 Ubuntu 20.04 上安裝 Snort

Snort 是一個開源的輕量級網絡入侵防禦系統,用於運行網絡入侵檢測系統 (NIDS)。 Snort 用於監控通過特定網絡接口發送/接收的包數據。 網絡入侵檢測系統可以使用基於簽名的檢測和協議分析技術來捕捉針對您的系統弱點和漏洞的威脅。

當 NIDS 軟件安裝和配置正確時,可以識別不同類型的攻擊和懷疑,如 CGI 攻擊、網絡策略違規、SMB 探測、惡意軟件感染、受感染的系統、隱形端口掃描等。

在本教程中,我們將學習如何 安裝 Snort 3Ubuntu 20.04.

Snort 3 的一些新功能:

  • 支持多包處理線程
  • 允許多個數據包處理
  • 自動生成參考文檔
  • 使用簡單的腳本化配置
  • 使關鍵組件可插拔
  • 允許用戶編寫自己的插件
  • 共享配置和屬性表
  • 允許規則運行得更快

第一步:更新系統

一、更新升級你的Ubuntu系統

sudo apt update
sudo apt upgrade

第 2 步:安裝所需的依賴項

Ubuntu 默認存儲庫有 snort 包。 那裡可用的 snort 包是舊版本。 要安裝 Snort 3,我們必須從源代碼構建。 在安裝 Snort 3 之前,我們需要安裝先決條件和必需的庫。

使用以下命令安裝 Snort 3 依賴包:

sudo apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev

安裝依賴項後,創建一個目錄,您可以在其中使用以下命令編譯和保存 Snort 的源文件:

mkdir snort-source-files
cd snort-source-files

然後,下載並安裝最新版本的 Snort 數據採集庫 (LibDAQ)。 用於安裝 LibDAQ 我們需要使用以下命令從源代碼構建和安裝它。

git clone https://github.com/snort3/libdaq.git
cd libdaq
./bootstrap
./configure
make
make install

下一個依賴項是 Tcmalloc,它將優化內存分配並提供更好的內存使用。

安裝 內存分配器 使用以下命令。

cd ../
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9/gperftools-2.9.tar.gz

tar xzf gperftools-2.9.tar.gz
cd gperftools-2.9/

./configure
make
make install

第 3 步:在 Ubuntu 20.04 上安裝 Snort 3

設置依賴項後,我們將在 Ubuntu 20.04 上下載並安裝 Snort 3。

01. 克隆 Snort 3 官方 GitHub 存儲庫。

cd ../
git clone git://github.com/snortadmin/snort3.git

02.將目錄更改為Snort3

cd snort3/

03. 從那裡使用以下命令配置和啟用 tcmalloc。

./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc

04. 導航到 build 目錄並使用 make 和 make install 使用以下命令編譯和安裝 Snort 3。

cd build
make
make install

05.安裝完成後,更新共享庫。

sudo ldconfig

Snort 默認安裝在 /usr/local/bin/snort 目錄下,為 /usr/sbin/snort 創建符號鏈接是一個好習慣

sudo ln -s /usr/local/bin/snort /usr/sbin/snort

06. 驗證 Snort 3 安裝

snort -V

輸出:

,,_ -> Snort++ <-
o" )~ Version 3.1.10.0
'''' By Martin Roesch & The Snort Team
https://snort.org/contact#team
Copyright (C) 2014-2021 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using DAQ version 3.0.4
Using LuaJIT version 2.1.0-beta3
Using OpenSSL 1.1.1f 31 Mar 2020
Using libpcap version 1.9.1 (with TPACKET_V3)
Using PCRE version 8.39 2016-06-14
Using ZLIB version 1.2.11
Using LZMA version 5.2.4

如果您看到類似的輸出,則 Snort 3 安裝成功。

配置網絡接口卡

找到 Snort 偵聽網絡流量的接口並啟用 淫亂 模式,以便能夠查看發送給它的所有網絡流量。

ip link set dev eh0 promisc on

使用以下命令進行驗證。

ip add sh eth0

輸出:

2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f2:3c:92:ed:7e:d8 brd ff:ff:ff:ff:ff:ff
inet 74.207.230.186/24 brd 74.207.230.255 scope global dynamic eth0
valid_lft 72073sec preferred_lft 72073sec
inet6 2600:3c02::f03c:92ff:feed:7ed8/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 60sec preferred_lft 20sec
inet6 fe80::f03c:92ff:feed:7ed8/64 scope link
valid_lft forever preferred_lft forever

接下來,禁用接口卸載以防止 Snort 3 截斷大數據包,最大為 1518 字節。 使用以下命令檢查是否啟用了此功能。

ethtool -k eth0 | grep receive-offload

如果看到此輸出,則 GRO 已啟用,而 LRO 已固定或 LRO 已啟用。

輸出。

generic-receive-offload: on
large-receive-offload: on

使用以下命令禁用它。

ethtool -K eth0 gro off lro off

兩個確保更改在系統重啟後仍然存在,我們需要創建並啟用一個 systemd 服務單元來實現更改。

sudo nano /etc/systemd/system/snort3-nic.service

粘貼以下指向您的網絡接口的配置。

[Unit]
Description=Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev eth0 promisc on
ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target

重新加載 systemd 配置設置:

sudo systemctl daemon-reload

使用以下命令在啟動時啟動並啟用服務:

sudo systemctl enable --now snort3-nic.service

輸出。

Created symlink /etc/systemd/system/default.target.wants/snort3-nic.service → /etc/systemd/system/snort3-nic.service.

使用以下命令驗證 snort3-nic.service:

sudo systemctl status snort3-nic.service

輸出。

● snort3-nic.service - Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
Loaded: loaded (/etc/systemd/system/snort3-nic.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2021-09-18 12:35:17 UTC; 4min 59s ago
Process: 182782 ExecStart=/usr/sbin/ip link set dev eth0 promisc on (code=exited, status=0>
Process: 182783 ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off (code=exited, status=0>
Main PID: 182783 (code=exited, status=0/SUCCESS)
Sep 18 12:35:17 li72-186 systemd[1]: Starting Set Snort 3 NIC in promiscuous mode and Disable >
Sep 18 12:35:17 li72-186 systemd[1]: Finished Set Snort 3 NIC in promiscuous mode and Disable >

安裝 Snort 3 社區規則集

在 Snort 中,規則集是入侵檢測引擎的主要優勢。 Snort 規則分為三種類型:社區規則、註冊規則、訂閱者規則。 社區規則由開源社區或 snort 集成商提交。

我們將展示如何安裝社區規則。

首先,在 /usr/local/etc/snort 中為規則創建一個目錄

mkdir /usr/local/etc/rules

下載 Snort 3 社區規則。 你可以在官方找到 Snort3 下載頁面.

wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz

解壓下載的規則,放到我們之前創建的目錄/usr/local/etc/rules/

tar xzf snort3-community-rules.tar.gz -C /usr/local/etc/rules/

Snort 3 包括兩個主要的配置文件, snort_defaults.luasnort.lua.

snort.lua 文件包含 Snort 的主要配置,允許實現和配置 Snort 預處理器、規則文件包含、日誌記錄、事件過濾器、輸出等。

snort_defaults.lua 文件包含默認值,例如規則路徑、AppID、情報列表和網絡變量。

當規則文件被提取並放置時,我們將配置這些名為的配置文件之一 snort.lua。 用你最喜歡的編輯器打開文件,會看到類似的配置。

... -- HOME_NET and EXTERNAL_NET must be set now -- setup the network addresses you are protecting
HOME_NET = 'server_public_IP/32'

-- set up the external network addresses.
-- (leave as "any" in most situations)
EXTERNAL_NET = 'any' EXTERNAL_NET = '!$HOME_NET' ...

將要防禦攻擊的網絡設置為 首頁_網絡 變量和點 外部網絡 變量到 首頁_網絡 多變的。

Save 並退出。

您還可以在 /usr/local/etc/snort/snort_defaults.lua 和 IPS 部分下編輯 Snort 默認值,您可以定義規則的位置。

ips =
{
-- use this to enable decoder and inspector alerts
--enable_builtin_rules = true,

-- use include for rules files; be sure to set your path
-- note that rules files can include other rules files
include="/usr/local/etc/rules/snort3-community-rules/snort3-community.rules"

}
...

Save 並退出。

作為服務運行 Snort

如果您打算在後台將 Snort 作為服務守護進程運行,也可以為 Snort 創建一個 systemd 服務單元。 以非特權系統用戶身份運行它是謹慎的

創建一個非登錄系統用戶帳戶。

sudo useradd -r -s /usr/sbin/nologin -M -c SNORT_IDS snort

然後,為 Snort 創建一個 systemd 服務單元以作為 snort 用戶運行。 調整併匹配您的網絡接口。

sudo nano /etc/systemd/system/snort3.service

粘貼以下配置。

[Unit]
Description=Snort 3 NIDS Daemon
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i eht0 -m 0x1b -u snort -g snort

[Install]
WantedBy=multi-user.target

重新加載 systemd 配置。

sudo systemctl daemon-reload

設置日誌文件的所有權和權限。

sudo chmod -R 5775 /var/log/snort
sudo chown -R snort:snort /var/log/snort

啟動並啟用 Snort 以在系統啟動時運行:

sudo systemctl enable --now snort3

檢查服務狀態以確認它是否正在運行。

sudo systemctl status snort3

輸出。

● snort3.service - Snort 3 NIDS Daemon
Loaded: loaded (/etc/systemd/system/snort3.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-09-18 12:44:32 UTC; 6s ago
Main PID: 182886 (snort)
Tasks: 2 (limit: 1071)
Memory: 62.6M
CGroup: /system.slice/snort3.service
└─182886 /usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none >
Sep 18 12:44:32 li72-186 systemd[1]: Started Snort 3 NIDS Daemon.

結論

在本教程中,如何在 Ubuntu 20.04 上安裝 Snort 3 網絡入侵檢測系統。

Linux 並非 100% 不受病毒和可疑事物的影響,安裝一些工具並確保沒有人在您的設備和網絡上嘗試可疑事物總是更好。 您可以研究的其他 Snort 替代方案:Ossec、Palo Alto Networks 下一代防火牆、下一代入侵防禦系統 (NGIPS)。

感謝閱讀,歡迎在評論區提出您的意見和建議。