Snort搭建教程——Snort 2.9.9.x on Ubuntu 14 and 16


1   介紹

雖然您可以選擇在沒有任何支持軟件的情況下安裝Snort,但它只能運行,但是使用一些額外的軟件包會變得更加有用。 這些包是:

Barnyard2:采用Snort輸出並寫入SQL數據庫的軟件,可減少系統負載。

PulledPork:自動下載最新的Snort規則。

BASE:基於Web的圖形界面,用於查看和清除Snort事件。

2   關於本指南

本指南中使用的軟件版本:

• Snort 2.9.9.0

• Barnyard2 2-1.14 (current master)

• PulledPork 0.7.3 (current master)

• BASE 1.4.5

 

管理員帳戶:本指南假定您以普通用戶身份登錄系統,並將使用sudo運行所有管理命令。 這有助於確定哪些命令需要管理憑據,哪些不需要。 我們還將創建一個名為snort的非特權用戶,該用戶被用於運行所有應用程序,當創建服務時.

 

5   Ubuntu 16上的以太網接口名稱

運行Ubuntu 16的人員的重要注意事項:從Ubuntu 15.10開始,網絡接口不再遵循ethX標准(ens33,eth1,...)。 而是將接口名稱指定為可預測的網絡接口名稱。 這意味着您需要使用ifconfig檢查接口的名稱,因為您需要在本指南的許多步驟中引用接口的名稱。 在我的情況下,原來ens33現在是ens160。 如果您運行的是Ubuntu 16,在本指南的任何地方都可以看到ens33,您將需要替換為新的接口名稱。

 

6 VMware虛擬機配置

如果您使用VMware vSphere托管Snort虛擬機,則在創建虛擬機時,請確保在創建客戶端虛擬機時選擇VMXNET 3網絡適配器(而不是默認適配器),因為它更適合Snort。

本指南假定您已創建一個具有單個網絡適配器的虛擬機,該適配器將用於管理控制(通過SSH)以及Snort監聽流量。 您可以在設置系統時輕松添加更多適配器,或者在以后更新,您只需確保指定Snort應在運行時監聽的正確適配器(如果您使用本指南設置系統,則應該能夠 這些配置變化沒有問題)。

注意:

我使用的VMware Workstation,我要選擇:編輯---》虛擬網絡編輯器---》VMnet8(NAT模式)

 

 

 

7   安裝Ubuntu

本指南假設您已使用所有默認設置安裝了受支持的Ubuntu版本之一。

Snort不需要為其正在偵聽的接口分配IP地址,並且在許多配置中,snort將偵聽沒有配置IP地址的接口。對於本指南,如果可以訪問接口,則通過ssh遠程管理系統會更容易。在生產環境中,建議您在Snort服務器上使用一個接口進行管理,並讓Snort偵聽其他接口,但這不是必需的。默認情況下,Ubuntu將使用DHCP自動配置地址,如果是這種情況,您可以通過運行ifconfig ens33來驗證您的IP地址。如果您沒有DHCP服務器分配IP地址,請手動配置Snort系統上的IP地址。您需要互聯網連接才能下載所需的軟件包和軟件tarball。

一旦您首次登錄並驗證了互聯網連接,請確保系統是最新的,並安裝openssh-server(以便我們可以遠程管理系統)。安裝后重新啟動以確保應用所有修補程序。

# Install Updates and reboot:

sudo apt-get update

sudo apt-get dist-upgrade -y

sudo apt-get install -y openssh-server

sudo reboot

如果要在VMware vSphere服務器上安裝Snort,則不再需要手動安裝vmware工具,它們是默認安裝的open-vm-tools包的一部分.

8   網卡配置

要為Snort偵聽的任何接口禁用LRO和GRO,我們將在網絡接口配置文件/ etc / network / interfaces中使用ethtool命令。 我們使用vi編輯網絡接口

文件:

sudo vi /etc/network/interfaces

為每個網絡接口附加以下兩行,確保更改ens33以匹配您正在使用的接口,因為您的接口名稱可能不同,尤其是在Ubuntu 16上:

post-up ethtool -K ens33 gro off

post-up ethtool -K ens33 lro off

/ etc / network / interfaces文件示例:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface

auto ens33

iface ens33 inet dhcp

post-up ethtool -K ens33 gro off

post-up ethtool -K ens33 lro off

重新啟動網絡(用以下接口替換ens33)並驗證LRO和GRO是否已禁用

user@snortserver:~$ sudo ifconfig ens33 down && sudo ifconfig ens33 up

user@snortserver:~$ ethtool -k ens33 | grep receive-offload

generic-receive-offload: off

large-receive-offload: off

user@snortserver:~$

提示沒有ethtool,因此輸入命令:

sudo apt install ethtool

發現安裝失敗,此時 ping baidu.com不通.

重啟sudo reboot

9   安裝Snort先決條件

Snort有四個主要先決條件:

pcap (libpcap-dev) available from the Ubuntu repository

PCRE (libpcre3-dev) available from the Ubuntu repository

Libdnet (libdumbnet-dev) available from the Ubuntu repository

DAQ (http://www.snort.org/downloads/) compiled from source

首先,我們要安裝構建軟件所需的所有工具。 build-essentials做到了。

sudo apt-get install -y build-essential

 

一旦我們的構建工具安裝完畢,我們就會安裝Ubuntu提供的所有Snort先決條件庫。

sudo apt-get install -y libpcap-dev libpcre3-dev libdumbnet-dev

Snort DAQ(Data AcQuisition庫)有一些需要安裝的先決條件:

sudo apt-get install -y bison flex

在本指南中,我們將為各種軟件包下載許多tarbals。 我們將創建一個

名為snort src的文件夾將它們保存在一個地方:

mkdir ~/snort_src

cd ~/snort_src

從Snort網站下載並安裝最新版本的DAQ。 以下步驟使用wget

下載DAQ版本2.0.6,這是編寫本指南時的最新版本。

cd ~/snort_src

wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz

tar -xvzf daq-2.0.6.tar.gz

cd daq-2.0.6

./configure

make

sudo make install

運行./configure時,您應該看到以下輸出,顯示正在配置哪些模塊

編譯DAQ時可以使用哪些:

Build AFPacket DAQ module.. : yes

Build Dump DAQ module...... : yes

Build IPFW DAQ module...... : yes

Build IPQ DAQ module....... : no

Build NFQ DAQ module....... : no

Build PCAP DAQ module...... : yes

Build netmap DAQ module.... : no

 

10 安裝Snort

要在Ubuntu上安裝Snort,還需要安裝一個額外的必需先決條件

文檔中沒有提到:zlibg是一個壓縮庫。

有四個可選的庫可以提高功能性:liblzma-dev  和openssl和libssl-dev

sudo apt-get install -y zlib1g-dev liblzma-dev openssl libssl-dev

 

最后我們需要Nghttp2的開發庫:一個實現HPAC的HTTP / 2 C庫

標頭壓縮算法。 在Ubuntu 16中,安裝很簡單:

# Ubuntu 16 (不適用Ubuntu 14)

sudo apt-get install -y libnghttp2-dev

 

一旦安裝了所有先決條件,我們就可以下載Snort源代碼tarball,編譯,然后

安裝。 --enable-sourcefire選項提供了數據包性能監控(PPM),這讓我們可以做到

規則和預處理器的性能監控,並以與Snort團隊相同的方式構建Snort:

cd ~/snort_src

wget https://snort.org/downloads/snort/snort-2.9.9.0.tar.gz

tar -xvzf snort-2.9.9.0.tar.gz

cd snort-2.9.9.0

./configure --enable-sourcefire

make

sudo make install

由於snort-2.9.9.0地址已經變了,因此上述命令wget https://snort.org/downloads/snort/snort-2.9.9.0.tar.gz應該改為:

wget https://www.snort.org/downloads/archive/snort/snort-2.9.9.0.tar.gz

注意:只要你沒有看到configure:error:“致命!” 在運行./configure時,你可以繼續。 如果出現錯誤,則應在繼續之前解決錯誤。鍵入命令 ./configure into grep "... no"以獲取未安裝的所有軟件的列表。 你可以多次運行./configure,首先要確保沒有整體問題,然后再看看是什么組件未安裝:./ configure | grep“... no”(您也可以使用tee命令將輸出保存到屏幕和文件)。

 

運行以下命令以更新共享庫(如果跳過此步驟,則在嘗試運行Snort時會出現錯誤):

sudo ldconfig

將符號鏈接放在/ usr / sbin中的Snort二進制文件中:

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

 

通過以常規用戶身份運行二進制文件來測試Snort,並傳遞-V標志(告訴Snort驗證自身以及傳遞給它的任何配置文件)。 您應該看到類似於下面顯示的輸出(盡管確切的版本號可能略有不同):

user@snortserver:~$ snort -V

,,_ -*> Snort! <*-

o" )~ Version 2.9.9.0 GRE (Build 56)

'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team

Copyright (C) 2014-2016 Cisco and/or its affiliates. All rights reserved.

Copyright (C) 1998-2013 Sourcefire, Inc., et al.

Using libpcap version 1.7.4

Using PCRE version: 8.38 2015-11-23

Using ZLIB version: 1.2.8

user@snortserver:~$

 

11 配置Snort以NIDS模式運行

由於我們不希望Snort以root身份運行,因此我們需要為守護進程創建一個非特權帳戶和組(snort:snort)。 我們還將創建Snort所需的許多文件和目錄,並設置這些文件的權限。 Snort將具有以下目錄:/ etc / snort中保存配置和規則文件.

警報將寫入/ var / log / snort.

編譯好的規則(.so規則)將存儲在/ usr / local / lib / snort dynamicrules中.

# Create the snort user and group:#創建snort用戶和組

sudo groupadd snort

sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort

# Create the Snort directories:#創建snort目錄

sudo mkdir /etc/snort

sudo mkdir /etc/snort/rules

sudo mkdir /etc/snort/rules/iplists

sudo mkdir /etc/snort/preproc_rules

sudo mkdir /usr/local/lib/snort_dynamicrules

sudo mkdir /etc/snort/so_rules

# Create some files that stores rules and ip lists#創建一些文件保存規則和ip列表

sudo touch /etc/snort/rules/iplists/black_list.rules

sudo touch /etc/snort/rules/iplists/white_list.rules

sudo touch /etc/snort/rules/local.rules

sudo touch /etc/snort/sid-msg.map

# Create our logging directories:#創建日志目錄

sudo mkdir /var/log/snort

sudo mkdir /var/log/snort/archived_logs

# Adjust permissions:#提取

sudo chmod -R 5775 /etc/snort

sudo chmod -R 5775 /var/log/snort

sudo chmod -R 5775 /var/log/snort/archived_logs

sudo chmod -R 5775 /etc/snort/so_rules

sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules

 

我們想要更改上面創建的文件的所有權,以確保Snort可以訪問它使用的文件:

# Change Ownership on folders: #更改文件夾的所有權:

sudo chown -R snort:snort /etc/snort

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

sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules

Snort需要一些配置文件,動態預處理器(dynamic preprocessors)從Snort源tarball復制到/ etc / snort文件夾。配置文件是:

• classification.config

• file magic.conf

• reference.config

• snort.conf

• threshold.conf

• attribute table.dtd

• gen-msg.map

• unicode.map

要復制配置文件和動態預處理器(dynamic preprocessors),請運行以下命令:

cd ~/snort_src/snort-2.9.9.0/etc/

sudo cp *.conf* /etc/snort

sudo cp *.map /etc/snort

sudo cp *.dtd /etc/snort

cd ~/snort_src/snort-2.9.9.0/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/

sudo cp * /usr/local/lib/snort_dynamicpreprocessor/

 

我們現在有以下目錄布局和文件位置:

 

Snort二進制文件: /usr/local/bin/snort

Snort 配置文件: /etc/snort/snort.conf

Snort 日志數據目錄: /var/log/snort

Snort 規則目錄: /etc/snort/rules

/etc/snort/so rules

/etc/snort/preproc rules

/usr/local/lib/snort dynamicrules

Snort ip地址目錄: /etc/snort/rules/iplists

Snort dynamic preprocessors: /usr/local/lib/snort dynamicpreprocessor/

我們的Snort目錄列表如下所示:

user@snortserver:~$ tree /etc/snort

/etc/snort

|-- attribute_table.dtd

|-- classification.config

|-- file_magic.conf

|-- gen-msg.map

|-- preproc_rules

|-- reference.config

|-- rules

| |-- iplists

| | |-- black_list.rules

| | |-- white_list.rules

| |-- local.rules

|-- sid-msg.map

|-- snort.conf

|-- so_rules

|-- threshold.conf

|-- unicode.map

 

我們現在需要編輯Snort的主配置文件/etc/snort/snort.conf。 當我們以此文件作為參數運行Snort時,它告訴Snort以NIDS模式運行。

我們需要注釋掉Snort配置文件中引用的所有單個規則文件

因為我們不是單獨下載每個文件,而是使用PulledPork來管理我們的規則集,它將所有規則組合到一個文件中。 以下行將注釋掉snort.conf文件中的所有規則集(從第540行開始,大約有100行要注釋掉):

sudo sed -i "s/include \$RULE\_PATH/#include \$RULE\_PATH/" /etc/snort/snort.conf

 

我們現在將使用您喜歡的編輯器手動更改snort.conf文件中的一些設置:

sudo vi /etc/snort/snort.conf

更改以下行以滿足您的環境:

第45行,HOME NET應與您的ip地址匹配。 在下面的示例中,我們的HOME NET是帶有24位子網掩碼的10.0.0.0(255.255.255.0)

注:向下翻頁:CTRL+F

顯示行號:se nu

設置ip地址

ipvar HOME_NET 10.0.0.0/24

使用命令ifconfig | grep "inet add"可以查看ip地址.

在snort.conf中設置以下文件路徑,從第104行開始:

var RULE_PATH /etc/snort/rules

var SO_RULE_PATH /etc/snort/so_rules

var PREPROC_RULE_PATH /etc/snort/preproc_rules

var WHITE_LIST_PATH /etc/snort/rules/iplists

var BLACK_LIST_PATH /etc/snort/rules/iplists

 

為了使Snort測試變得簡單,我們想要啟用local.rules文件,我們可以在其中添加Snort可以提醒的規則。 從第546行取消注釋(刪除哈希符號),使其如下所示:

include $RULE_PATH/local.rules

測試配置文件:

sudo snort -T -i ens33 -c /etc/snort/snort.conf

 

配置文件准備好后,我們將讓Snort驗證它是否是有效文件,並且它引用的所有必要文件都是正確的。 我們使用-T標志來測試配置文件,使用-c標志告訴Snort使用哪個配置文件,使用-i指定Snort將監聽的接口(這是從2.9.8開始的新要求)。  運行sudo snort -T -c /etc/snort/snort.conf -i ens33。 運行此命令,如下所示,並查找以下輸出(為清楚起見,僅顯示輸出的最后幾行):

user@snortserver:~$ sudo snort -T -i ens33 -c /etc/snort/snort.conf

(...)

Snort successfully validated the configuration!

Snort exiting

user@snortserver:~$

最好向上滾動此命令的輸出,以了解Snort正在加載的內容。

很多它在這個時候沒有意義,但隨着你對Snort的更多工作,它會變得更加清晰。 查找列出的任何錯誤和警告

快捷鍵shift+pageup

12 編寫一個簡單的規則來測試Snort檢測

在此階段,Snort沒有加載任何規則(我們在snort.conf中引用的規則文件為空)。 如果向上滾動上一個命令的輸出並查找以下內容,則可以驗證Snort是否未加載任何規則:0讀取Snort規則。 為了測試Snort的檢測能力,讓我們創建一個簡單的規則,當Snort看到ICMP“Echo request”或“Echo reply”消息時,Snort會生成一個警報,這很容易通過無處不在的ping實用程序生成(這很容易 測試規則)。將以下單行粘貼到空的本地規則文件/etc/snort/rules/local.rules中(注意,這應該放在一行):

alert icmp any any -> $HOME_NET any (msg:"ICMP test detected"; GID:1; sid:10000001; rev:001; classtype:icmp-event;)

如果沒有這些信息,Barnyard2不會從local.rules文件中讀取有關警報的元信息。Barnyard2將不會知道觸發警報的規則的任何細節,並且在使用PulledPork添加新規則時會產生非致命錯誤(在后面的步驟中完成)。 為了確保barnyard2知道我們使用唯一標識符10000001創建的規則具有消息“ICMP Test Detected”,以及其他一些信息(請參閱此博客文章以獲取更多信息)。 我們將以下行添加到/etc/snort/sid-msg.map文件:

1 || 10000001 || 001 || icmp-event || 0 || ICMP Test detected || url,tools.ietf.org/html/rfc792

 

當您取消注釋上面的第546行(include $RULE PATH/local.rules)時,您告訴Snort應該由Snort加載local.rules文件。 當Snort在啟動時加載該文件時,它將看到您創建的規則,並在接口看到的所有流量上使用該規則。 在這種情況下,當我們創建規則時,我們告訴Snort它應該在看到ICMP ping時生成警報。

由於我們對Snort配置進行了更改,因此我們應該再次測試配置文件:

sudo snort -T -c /etc/snort/snort.conf -i ens33

 

這次如果向上滾動輸出,你會發現一個規則(我們在local.rules中創建的那個,並由snort.conf中的include偽指令加載)已經加載:

(...)

+++++++++++++++++++++++++++++++++++++++++++++++++++

Initializing rule chains...

1 Snort rules read

1 detection rules

0 decoder rules

0 preprocessor rules

1 Option Chains linked into 1 Chain Headers

0 Dynamic rules

+++++++++++++++++++++++++++++++++++++++++++++++++++

+-------------------[Rule Port Counts]---------------------------------------

| tcp udp icmp ip

| src 0 0 0 0

| dst 0 0 0 0

| any 0 0 1 0

| nc 0 0 1 0

| s+d 0 0 0 0

+----------------------------------------------------------------------------

現在我們知道Snort正確加載了我們的規則和配置,我們可以在NIDS模式下啟動snort,並告訴它將任何警報輸出到控制台。 我們將使用以下標志從命令行運行Snort:

-A console

'console'選項將快速模式警報打印到stdout

-q

靜音模式。 不要顯示橫幅和狀態報告。

-u snort

啟動后以下列用戶身份運行Snort

-g snort

啟動后,將Snort作為以下組運行

-c

配置文件目錄

-i ens33

監聽的網卡

 

$ sudo /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33

啟動運行snort

$ sudo /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33

 

執行此命令時,您最初不會看到任何輸出。 Snort正在運行,並且正在處理所有到達ens33的數據包. Snort將每個數據包與其加載的規則(在本例中為單個ICMP Ping規則)進行比較,然后在數據包符合我們的規則時向控制台打印警報。

在另一台計算機上,ping 該IP地址,您應該看到類似於下面顯示的控制台輸出。 此輸出是Snort在將數據包與您創建的ICMP規則匹配時寫入控制台的各個警報。 在下面的示例中,Snort服務器正在偵聽ens33和IP地址10.0.0.105.

12/06−12:14:28.908206 [∗∗] [1:10000001:1] ICMP test detected [∗∗] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 10.0.0.59 −> 10.0.0.105

12/06−12:14:28.908241 [∗∗] [1:10000001:1] ICMP test detected [∗∗] [Classification: Generic ICMP event] [Priority: 3] {ICMP} 10.0.0.105 −> 10.0.0.59

12/06−12:14:29.905893 [∗∗] [1

使用ctrl-c阻止Snort運行。 請注意,Snort已將此信息的副本保存在/ var / log / snort中,名稱為snort.log.nnnnnnnnn(數字可能不同)。 此時,Snort在NIDS模式下正常運行並生成警報。

13 安裝 Barnyard2

正如我們上面所做的那樣,Snort以人類可讀的模式將事件寫入控制台或文本文件是一種資源密集型。 理想情況下,我們希望將Snort事件存儲在MySQL數據庫中,以便我們可以查看,搜索和分析事件。 為了有效地將Snort事件發送到MySQL數據庫,我們使用Barnyard2。 我們將Snort配置為以二進制形式將事件輸出到文件夾,然后讓Barnyard2異步讀取這些事件並將它們插入到我們的MySQL數據庫中。

 

 

14 ssh傳送文件

ssh連接的命令格式:   sftp 用戶名@ip地址

輸入如下命令傳送文件generic.rules到rules目錄下

                sftp linlin@192.168.153.130

          put generic.rules  /etc/snort/rules

 

參考鏈接:

http://www.cnblogs.com/timelyxyz/p/3708104.html

 

15  測試rules文件的命令:

sudo snort -T -i ens33 -c /etc/snort/snort.conf

 

16  運行snort的命令:

$ sudo /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM