Snort 3 on Ubuntu 14 and 16(譯)

Snort 3在Ubuntu 14或16版本中安裝部署

作者:Noah Dietrich
日期:2017年12月19日
遵循的許可協議:署名-非商業性使用-相同方式共享 4.0 國際版 (CC BY-NC-SA 4.0)

目錄

1. 介紹………………………………………………………………………………………………..
2. 開始………………………………………………………………………………………………..
3. 運行Snort………………………………………………………………………………………..
4. 安裝位置…………………………………………………………………………………………
5. Snort規則………………………………………………………………………………………..
6. Snort內建規則…………………………………………………………………………………
7. 安裝OpenAppID……………………………………………………………………………..
8. 安裝示例插件…………………………………………………………………………………..
9. Snort++開發人員指南………………………………………………………………………
10. 加載示例PCAP文件後生成的報警信息輸入到CSV文件中……………………..
11. 下一步…………………………………………………………………………………………..

1 介紹

本指南將會指導您完成Snort3 Alpha在Ubuntu14或16版本中的安裝部署 。文章中的指令並不適用於Ubuntu12版本(雖然舊指南可以在我的網站中找到)。
請注意,Snort3是一款alpha軟件。它會包含bugs,並且新版本可以比這個指南發佈時有不同的先決條件。本指南已經在2017年12月15日發佈並且對Snort 3.0.0-a4 build 241進行了測試。你可以按照這個指南去安裝Snort稍晚些的版本,但需求可能會發生變化。
因爲Snort++是alpha軟件,所以你不應該在生產環境中使用它。這個軟件已經被Snort團隊發佈並且在徵求反饋和用戶測試。
本指南將不討論如何配置Snort作爲NIPS或NIDS,如何安裝額外的支持軟件(barnyard2, PulledPork, GUIs),如何設置網絡接口獲取數據,Snort傳感器設計考慮,特定預處理器的詳細描述或者OpenAppID的使用。你可以去我的網站(SublimeRobots.com)閱讀我寫的關於這些的其他文章,以及如何配置Snort作爲完整的NIDS或者NIPS系統。
鼓勵去提交對本指南的反饋:[email protected]
你也可以求助Snort分佈列表:
Snort使用者
Snort開發者
SnortOpenAppID

2 開始

首先,確保你擁有最新的系統和軟件包列表:

sudo apt-get update && sudo apt-get dist-upgrade -y

安裝Snort3的先決條件。這些包的細節可以在Snort3手冊的需求部分找到:

sudo apt-get install -y build-essential autotools-dev libdumbnet-dev libluajit-5.1-dev libpcap-dev \
libpcre3-dev zlib1g-dev pkg-config libhwloc-dev cmake

下面的可以不安裝(但強烈推薦安裝):

sudo apt-get install -y liblzma-dev openssl libssl-dev cpputest libsqlite3-dev uuid-dev

如果你想建立最新的文檔源樹包括Snort++開發者指南,安裝以下(純粹是可選的)包。這些包近800MB大小:

sudo apt-get install -y asciidoc dblatex source-highlight w3m

因爲我們將從github庫中安裝Snort,所以我們需要一些工具:

sudo apt-get install -y libtool git autoconf

Snort DAQ(數據採集庫)有幾個先決條件,需要安裝:

sudo apt-get install -y bison flex

如果你想在內聯模式下使用NFQ來運行Snort的話,安裝所需的包(不需要在內聯摸或IDS模式下使用afpacket)。如果不確定,那麼你應該安裝這個包。

sudo apt-get install -y libnetfilter-queue-dev

我們需要下載tarballs源和其他源文件,但我們希望將這些數據存儲在一個文件夾中:

mkdir ~/snort_src
cd ~/snort_src

下載並安裝safec爲運行範圍來檢查某些遺留C庫調用(這是可選的,但是建議你這樣做):

cd ~/snort_src
wget https://downloads.sourceforge.net/project/safeclib/libsafec-10052013.tar.gz
tar -xzvf libsafec-10052013.tar.gz
cd libsafec-10052013
./configure
make
sudo make install

Snort3將使用Hyperscan快速模式匹配。Hyperscan需要Ragel和Boost頭文件:
下載並安裝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

Hyperscan需要Boost C++ Libraries。需要注意的是因爲Ubuntu庫版本太老並且Hyperscan需要boost庫版本爲1.58或者更高,所以我們不使用Ubuntu庫中的boost頭文件。下載Boost 1.65.1版本的庫,但不要安裝:

cd ~/snort_src
wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz
tar -xvzf boost_1_65_1.tar.gz

從源代碼安裝Hyperscan 4.6.0,Boost頭文件引用的源目錄位置:

cd ~/snort_src
wget https://github.com/intel/hyperscan/archive/v4.6.0.tar.gz
tar -xvzf v4.6.0.tar.gz
mkdir ~/snort_src/hyperscan-4.6.0-build
cd hyperscan-4.6.0-build/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBOOST_ROOT=~/snort_src/boost_1_65_1/ ../hyperscan-4.6.0
make
sudo make install

如果你想測試Hyperscan如何工作,那麼在構建目錄中運行:

cd ~/snort_src/hyperscan-4.6.0-build/
./bin/unit-hyperscan

Snort對flatbuffers有一個可選的要求,一個可記憶有效率的序列化庫:

cd ~/snort_src
wget https://github.com/google/flatbuffers/archive/master.tar.gz -O flatbuffers-master.tar.gz
tar -xvzf flatbuffers-master.tar.gz
mkdir flatbuffers-build
cd flatbuffers-build
cmake ../flatbuffers-master
make
sudo make install

接下來,從Snort官網下載並安裝DAQ(數據採集庫)。請注意,Snort 3和Snort 2.9.x.x系列使用的是不同的DAQ。

cd ~/snort_src
wget https://www.snort.org/downloads/snortplus/daq-2.2.2.tar.gz
tar -xvzf daq-2.2.2.tar.gz
cd daq-2.2.2
./configure
make
sudo make install

更新共享庫:

sudo ldconfig

從github下載最新的Snort3並安裝:

cd ~/snort_src
git clone git://github.com/snortadmin/snort3.git
cd snort3
./configure_cmake.sh --prefix=/opt/snort
cd build
make
sudo make install

注意:需要把git://github.com/snortadmin/snort3.git改爲https://github.com/snortadmin/snort3.git,否則會報拒絕連接
這裏寫圖片描述
可選擇的:如果你有興趣看Snort構建時可以配置的附加選項,那麼需要運行./configure cmake.sh –help命令來獲得一個完整的列表。你可能會對一些選項感興趣,比如Snort3命令行工具shell–enable-shell)或支持pcap文件大小超過2GB(–enable-large-pcap)。
注意:上面的git clone命令是從github下載的Snort++最新版(這可能是你想要的)。如果你想專門下載Snort++ build 241的話(在Snort官網上能獲得的一個包版本),您需要用如下所示的git clone命令來下載特定版本。

# 如果你想要build 241版本的話可以執行以下命令
#cd ~/snort_src
#wget https://github.com/snortadmin/snort3/archive/BUILD_241.tar.gz
#tar -xvzf BUILD_241.tar.gz
#cd snort3-BUILD_241/
# configure and install Snort as above

我懷疑你想這麼做,但如果你有問題,這可以幫助你確認是否是一個新的Snort版本安裝方式不同的問題。Snort++仍然在開發中,並且每個版本的依賴關係在不斷改變。
接下來,我們想測試下Snort運行狀況:

noah@snort3:~$ /opt/snort/bin/snort -V
 ,,_     -*> Snort++ <*-
o"  )~   Version 3.0.0 (Build 241) from 2.9.11
 ''''    By Martin Roesch & The Snort Team
         http://snort.org/contact#team
         Copyright (C) 2014-2017 Cisco and/or its affiliates. All rights reserved.
         Copyright (C) 1998-2013 Sourcefire, Inc., et al.
         Using DAQ version 2.2.2
         Using LuaJIT version 2.0.4
         Using OpenSSL 1.0.2g 1 Mar 2016
         Using libpcap version 1.7.4
         Using PCRE version 8.38 2015-11-23
         Using ZLIB version 1.2.8
         Using FlatBuffers 1.7.0
         Using Hyperscan version 4.6.0 2017-12-03
         Using LZMA version 5.1.0alpha

最後是創建一個snort的鏈接到/usr/sbin是一個很好的習慣:

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

3 運行Snort

Snort 3需要配置幾個環境變量才能正確運行。我們將這些變量暫時存儲在當前會話並且永久保存到本地.bashrc文件中(需要注意的是LUA路徑不能保存到/etc/profile文件中,因爲這樣的話它不會正確加載。你將需要爲每個需要運行Snort的用戶在這個系統上運行這些線路):

# 在.bashrc文件中添加
export LUA_PATH=/opt/snort/include/snort/lua/\?.lua\;\;
export SNORT_LUA_PATH=/opt/snort/etc/snort
# 或者直接運行下面的命令
sh -c "echo 'export LUA_PATH=/opt/snort/include/snort/lua/\?.lua\;\;' >> ~/.bashrc"
sh -c "echo 'export SNORT_LUA_PATH=/opt/snort/etc/snort' >> ~/.bashrc"

注意:還需要重要的一步就是使.bashrc文件生效,需執行source .bashrc命令。原文章中沒有提到

將這些變量添加到/etc/sudoers文件中當你使用sudo時:

sudo visudo

在結尾添加以下這行:

Defaults env_keep += "LUA_PATH SNORT_LUA_PATH"

使用ctrl-x退出,保存時提示按y,然後按enter鍵來保存/etc/sudoers.tmp(會自動複製到/etc/sudoers文件中去)。
現在可以用默認配置文件來測試Snort了:

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua

你應該會看到輸出內容然後以下面的結束:

Snort successfully validated the configuration.
o")~ Snort exiting

4 安裝位置

注意安裝的位置:
當我們在前面執行./configure –prefix=/opt/snort命令時我們就告訴了snort將所有的文件安裝在了/opt/snort文件夾下了。如果你忽略了這個配置選項,snort將安裝到相同的文件夾中,不過這一次是在根文件夾中。例如本該安裝到/opt/snort/bin目錄中的文件會被安裝到/bin目錄下,本該安裝到/opt/snort/etc下的文件會被安裝到/etc目錄中等。這些是更常見的正常安裝位置,而不是測試安裝。

noah@snort3:~$ tree /opt/snort -L 3
/opt/snort
 bin
    fbstreamer
    snort
    snort2lua
    u2boat
    u2spewfoo
 etc
    snort
       file_magic.lua
       snort_defaults.lua
       snort.lua
 include
    snort
       actions
       codecs
       daqs
       decompress
       detection
       events
       file_api
       flow
       framework
       hash
       helpers
       log
       lua
       main
       managers
       mime
       network_inspectors
       packet_io
       profiler
       protocols
       pub_sub
       search_engines
       sfip
       stream
       time
       utils
 lib
    pkgconfig
       snort.pc
    snort
       daqs
       snort.cmake
       snort-noconfig.cmake
 share
    doc
       snort
39 directories, 11 files

該文件夾包含以下文件:
fbstreamer: 一個實用程序來訪問flatbuffer格式生成的統計數據。
snort: Snort二進制。
snort2lua: 將Snort 2.9.x.x配置文件轉化成3.x的工具。
u2boat: U2boat是一個將unified2文件轉換成不同格式的工具。
u2spewfoo: U2SpewFoo是一個將unified2文件的內容標準化輸出的輕量級工具。

此外,以下文件夾被創建並使用:
/opt/snort/bin: Snort二進制文件和一些支持文件。
/opt/snort/etc/snort: Snort的配置文件。
/opt/snort/include/snort: 所有的文件包括Snort。
/opt/snort/lib/pkgconfig: Snort的pkgconfig文件(爲Snort編譯細節)。
/opt/snort/share/doc/snort: 安裝的Snort版本一些文檔。

5 Snort規則

Snort3比Snort2有更多的選項,而用PulledPork或者手動下載的正常規則將會測試你可能想專門爲Snort3創建規則而手動下載的社區專門規則。你可以從snort網站手動下載snort3特定社區規則:

cd ~/snort_src/
wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz
tar -xvzf snort3-community-rules.tar.gz
cd snort3-community-rules
sudo mkdir /opt/snort/etc/snort/rules
sudo cp snort3-community.rules /opt/snort/etc/snort/rules/
sudo cp sid-msg.map /opt/snort/etc/snort/rules

現在測試規則能否正確加載:

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua -R /opt/snort/etc/snort/rules/snort3-community.rules

輸出內容中應該顯示加載規則數,如下片段:

Loading rules:
Loading /opt/snort/etc/snort/rules/snort3-community.rules:
Finished /opt/snort/etc/snort/rules/snort3-community.rules.
Finished rules.
--------------------------------------------------
rule counts
rule counts
       total rules loaded: 829
               text rules: 829
            option chains: 829
            chain headers: 46
--------------------------------------------------
...

注意:在snort3-community的許多規則被註釋掉了。主要的一些原因是一些規則可能會產生誤報,所以Snort團隊已經註釋掉了這些規則,因爲它們可能會淹沒你的日誌或導致通信中斷如果你運行Snort在NIPS模式下的話。取消這些規則,請使用以下命令:

sudo sed -i '17,$s/^# //' /opt/snort/etc/snort/rules/snort3-community.rules

你可能想運行Snort使用以下標誌檢測問題,warn-allpedantic標誌。來自Snort3手冊:
警告將不會輸出除非–warn-被指定。–warn-all能夠指定所有的警告,–pedantic指定致命的警告*
當你運行Snort時不會想用–pedantic標誌,因爲簡單的flowbit警告(flowbit在一個規則中被設置但是卻不被使用是一個常見的問題)將產生警告而引起Snort報錯並退出。這是一個很好的標誌當用於測試你的配置。

6 Snort內建規則

爲了使解碼器和檢測員告警(這些檢測惡意流量卻不能輕易的發現普通規則),我們需要在位於/opt/snort/etc/snort/目錄下的snort配置文件snort.lua中啓動這一項:
需要sudo權限來編輯你的snort.lua配置文件:

sudo vi /opt/snort/etc/snort/snort.lua

在第190行修改enable_builtin_rules爲true。開始有兩個連字符是註釋(或命令被註釋掉了)而不是解析snort時加載。刪除前兩個連字符使enable_builtin_rules啓用這個選項。snort.lua文件的縮進行必須是四個空格(不是一個製表符)否則配置不會被加載。你的ips模塊應該是這個樣子(縮短是爲了清晰):

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

現在開始測試:

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua

你應該能看到builtin rules被加載(我們沒有加載社區規則,被以text rules顯示):

--------------------------------------------------
rule counts
       total rules loaded: 466
            builtin rules: 466
            option chains: 466
            chain headers: 1
--------------------------------------------------

現在讓我們加載兩種規則(內嵌的和社區的規則):

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua -R /opt/snort/etc/snort/rules/snort3-community.rules

你將會看到builtin rules和text rules都將被加載:

--------------------------------------------------
rule counts
       total rules loaded: 1295
               text rules: 829
            builtin rules: 466
            option chains: 1295
            chain headers: 46
--------------------------------------------------

7 安裝OpenAppID

OpenAppID允許應用程序層流量的識別。你可以創建規則在application-layer流量上起作用(例如屏蔽facebook),併爲每種類型的流量監測進行日誌流量統計。Snort團隊已經上傳了一個在社區協助下把探測器打成一個叫做 Application Detector Package的包,你可以去下載並安裝。首先下載OpenAppID探測器包:

cd ~/snort_src/
wget https://www.snort.org/downloads/openappid/6329 -O OpenAppId-6329
tar -xzvf OpenAppId-6329
sudo cp -R odp /opt/snort/lib/

現在我們需要編輯Snort配置文件來指向這個odp目錄:

sudo vi /opt/snort/etc/snort/snort.lua

在第113行(你的行號可能略有不同)你會看到appid = entry。你會想在這裏添加app_detector_dir選項,指向odf文件夾的父文件夾。它應該是這樣的:

appid =
{
    app_detector_dir = '/opt/snort/lib',
}

需要注意的是你必須有四個空格縮進符(而不是一個製表符)。現在我們要測試這個配置文件能否被正確加載:

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua --warn-all

你應該看到的輸出:

...
Snort successfully validated the configuration (with 0 warnings).
o")~ Snort exiting

現在加載Snort OpenAppID探測器以及所有規則(我們省略pedantic標誌,因爲這些規則將拋出非致命並且可以忽略的警告):

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua -R /opt/snort/etc/snort/rules/snort3-community.rules \
--warn-all

創建一個簡單的規則來測試OpenAppID是否正常工作:

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

用下面的內容:

alert tcp any any -> any any ( msg:"Facebook trafic Seen"; appids:"Facebook";sid:10000001; )

現在測試,以確保規則正確加載(正確格式化的):

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua -R /opt/snort/etc/snort/rules/local.rules --warn-all

如果你向上滾動輸出,你應該看到這一個規則加載成功。現在,讓我們在一個接口上運行snort在檢測模式(改變接口eth0低於匹配名稱),在控制檯上打印警報:

sudo /opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua -R /opt/snort/etc/snort/rules/local.rules \
-i eth0 -A alert_fast -s 65535 -k none

-k none標誌告訴Snort忽略壞的校驗,-s 65535阻止Snort刪除超大的包。流和碎片彈解碼器將刪除壞的校驗和數據包,數據包將不會被OpenAppID探測器處理。通過包含這些標誌,我們確保帶有壞校驗的數據包會被處理。
現在打開另一個窗口(打開一個新的終端或者ssh會話),使用wget連接facebook:

wget facebook.com

從第一個控制檯窗口你會看到警報輸出類似如下:

08/0519:13:45.451834 [∗∗] [1:10000001:0] ”Facebook trafic Seen” [∗∗] [Priority: 0] [AppID: Facebook] {TCP} 157.240.1.35:443 −> 10.0.0.104:33882
08/0519:13:45.451842 [∗∗] [1:10000001:0] ”Facebook trafic Seen” [∗∗] [Priority: 0] [AppID: Facebook] {TCP} 10.0.0.104:33882 −> 157.240.1.35:443

注意:可是我輸出的卻和原文章有出入(已翻牆)
這裏寫圖片描述
使用ctrl-c來停止Snort。
如果你想收集OpenAppID統計信息(每個探測器探測到了多少流量),您將需要在snort.lua文件中使其生效,並運行Snort帶有-l標誌(日誌目錄)。
首先創建一個日誌目錄:

sudo mkdir /var/log/snort

現在修改snort.lua文件來允許appid探測器進行日誌統計(第113行):

appid =
{
    app_detector_dir = '/opt/snort/lib',
    log_stats = true,
}

現在運行Snort,並且監聽一個接口,並將日誌信息加載到/var/log/snort文件夾下:

sudo /opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua -R /opt/snort/etc/snort/rules/local.rules \
-i eth0 -A alert_fast -k none -l /var/log/snort

在收集數據並停止Snort後,你將會看到appid_stats.log在/var/log/snort文件夾下。改文件是由root所擁有,所以你需要添加可讀權限:

sudo chmod a+r /var/log/snort/appid_stats.log

現在你可以看看snort的協議數據收集:

noah@snort3:~/snort_src$ cat /var/log/snort/appid_stats.log
1513397914,DNS,296,442
1513397914,Facebook,2065,5356
1513397914,HTTP,543,586
1513397914,Wget,543,586
1513397914,HTTPS,1522,4770
1513397914,SSL client,1522,4770
1513397914,ICMP for IPv6,156,0

注意:我這裏用的是wget http://www.baidu.com,產生的appid_stats.log內容爲
這裏寫圖片描述
這是一個以逗號分隔的文件,在這個順序中分別顯示時間(unixtime),探測器,發送字節(tx)和接收字節(rx)。如果你不想要這個收集的數據,你可以在snort.lua配置文件中禁用日誌統計選項。
關於探測器的更多信息,你可以查看OpenAppID detector Guide

8 安裝示例插件

如果你想開發Snort插件,您需要編譯和安裝snort-extras包。如果你遵循本文檔安裝指令的話,snort-extras目錄將會在snort3目錄下(否則你可以從snort官網上下載)。
進入extras目錄,然後編譯並安裝:

cd ~/snort_src/snort3/extra
export PKG_CONFIG_PATH=/opt/snort/lib/pkgconfig/
./configure_cmake.sh --prefix=/opt/snort
cd build
make
sudo make install

如果你想使用Snort新添加的插件,你需要添加參數–plugin path* –script path*參數選項(插件被寫在c++或lua中)。
例如,加載一個alert_ex插件:

/opt/snort/bin/snort --plugin-path /opt/snort/lib/snort_extra -A alert_ex --warn-all

(warn-all標誌在這裏是獲取所有的錯誤)。
如果你想測試一個lua腳本插件:

/opt/snort/bin/snort --script-path /opt/snort/lib/snort_extra -A lualert --warn-all

看到所有可用(不含snort-extras包中的插件)的插件,使用以下命令:

/opt/snort/bin/snort --list-plugins

現在可以看到snort所有新插件包括那些在extras目錄中的插件:

/opt/snort/bin/snort --script-path /opt/snort/lib/snort_extra --plugin-path /opt/snort/lib/snort_extra \
--list-plugins

請參見snort3 extras readme,包括源文件的更多信息。
爲了看到extras文件夾下可用的新插件,我們先展現所有的默認日誌模塊,然後再加上extras中的:

noah@snort3:~$ /opt/snort/bin/snort --list-plugins | grep logger
logger::alert_csv v0 static
logger::alert_fast v0 static
logger::alert_full v0 static
logger::alert_sfsocket v0 static
logger::alert_syslog v0 static
logger::log_codecs v0 static
logger::log_hext v0 static
logger::log_pcap v0 static
logger::unified2 v0 static

noah@snort3:~$ /opt/snort/bin/snort --script-path /opt/snort/lib/snort\_extra \
--plugin-path /opt/snort/lib/snort\_extra --list-plugins | grep logger
logger::alert_csv v0 static
logger::alert_ex v0 /opt/snort/lib/snort_extra/loggers/alert_ex.so
logger::alert_fast v0 static
logger::alert_full v0 static
logger::alert_json v0 /opt/snort/lib/snort_extra/loggers/alert_json.so
logger::alert_sfsocket v0 static
logger::alert_syslog v0 static
logger::alert_unixsock v0 /opt/snort/lib/snort_extra/loggers/alert_unixsock.so
logger::log_codecs v0 static
logger::log_hext v0 static
logger::log_null v0 /opt/snort/lib/snort_extra/loggers/log_null.so
logger::log_pcap v0 static
logger::unified2 v0 static

9 Snort++開發人員指南

如果你有興趣開發snort插件或模塊,你需要構建snort++開發人員指南。這需要幾個軟件包(在本指南之前可選的文檔包)。需要注意的是這些包將近800MB大小:

sudo apt-get install -y asciidoc dblatex source-highlight w3m

現在構建指南:

cd ~/snort_src/snort3
./doc/dev_guide.sh

現在在你的當前目錄下有dev_guide.html了(snort_src/snort3)。

10 加載示例PCAP文件後生成的報警信息輸入到CSV文件中

如果你出於測試目的而正在尋找可用於從你的內嵌和社區規則生成警報的PCAP文件,我發現elcabezzonn的github庫是一個不錯的選擇。首先從克隆開始:

cd ~
git clone https://github.com/elcabezzonn/Pcaps.git

正如上面所討論的部分規則,許多規則在snort3-community規則中被註釋掉了。爲了從pcap文件生成儘可能多的不同類型的警報,你應該通過移除每一行的斜槓開始來取消這些規則。想要做到這一點,可使用以下命令:

sudo sed -i '17,$s/^# //' /opt/snort/etc/snort/rules/snort3-community.rules

本質上這個sed命令是開始看第17行(在版本信息之後)並刪除哈希標記和下面的每一行的空間。
現在我們運行snort,告訴它從該目錄加載所有pcap文件和所有社區規則並在控制檯上打印警告信息(我用了所有的標誌如果你向下滾動):

/opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua --pcap-filter \*.pcap --pcap-dir ~/Pcaps \
-R /opt/snort/etc/snort/rules/snort3-community.rules -A alert_fast -s 65535 -k none -q

你可以通過wc -l命令來統計輸出了多少的行數來知道可選的確定檢測到了多少警報。當我運行這個命令後知道了snort產生了277條警報。
你可以修改最後一個命令(沒有wc命令)輸出任何插件,通過命令行配置或在snort.lua(第250行)文件中進行修改。例如,使用警報csv插件將警報數據保存到一個csv文件中,你將在snort.lua(第253行)文件中這樣修改:

alert_csv =
{
    file = true,
}

然後運行snort如下:

sudo /opt/snort/bin/snort -c /opt/snort/etc/snort/snort.lua --pcap-filter \*.pcap --pcap-dir ~/Pcaps \
-R /opt/snort/etc/snort/rules/snort3-community.rules -l /var/log/snort -s 65535 -k none -q

我們這裏列舉了很多,讓我們講解一下這個命令:
sudo /opt/snort/bin/snort
這裏我們使用sudo命令來運行snort二進制,因爲我們想寫往/var/log/snort文件夾下寫入文件
-c /opt/snort/etc/snort/snort.lua
這是我們的snort.lua配置文件
–pcap-filter *.pcap
這個是告訴snort該如何識別位於pcap目錄下的pcap文件
–pcap-dir /Pcaps
這個是告訴snort去哪裏尋找pcap文件
-R /opt/snort/etc/snort/rules/snort3-community.rules
這是加載規則文件(除了builtin rules)
-l /var/log/snort
snort應該保存日誌文件的位置
-s 65535
設置snaplen爲了不讓snort刪除超大的包
-k none
忽略壞校驗,否則snort將刪除帶有壞校驗的包,而且他們不會被評估。
-q
安靜模式,不打印頭
你會注意到我們沒有在命令行指定輸出插件,這是因爲我們在snort.lua中配置了alert_csv插件,在命令行上指定一個優先輸出於任何在snort.lua配置的插件。
運行命令後,你應該會在/var/log/snort目錄下看到 alert_csv.txt。你要讓這個文件可讀:

sudo chmod a+r /var/log/snort/alert_csv.txt

使用wc命令,我們可以看到有多少警報從這些pcap文件中生成(當我們輸出到控制檯這應該是一樣的):

noah@snort3:~$ wc -l /var/log/snort/alert_csv.txt
277 /var/log/snort/alert_csv.txt

注意:我的卻和原文章有出入
這裏寫圖片描述
這個插件還有更多的選擇,更多信息可以去snort3手冊中查找。

11 下一步

有關運行Snort 3和編譯選項的更多信息請參見Snort 3手冊。強烈推薦去閱讀手冊,因爲Snot 3和Snort 2.9.9.x系列有很大的不同。配置文件和規則都是不同的,並且兩個版本之間不兼容。老的Snort 2版本的配置文件和規則可以轉換爲Snort3的格式通過使用snort2lua等命令。
在我的個人網站可以找到相關的教程,包括在Ubuntu系統上的全功能snort配置,包括Barnyard2、PulledPork、BASE、snort作爲一個NIPS(刪除或阻斷惡意流量)的配置和OpenAppID layer 7應用程序檢測的配置。這些教程在SublimeRobots.com上。
如果你想將告警信息加載到SIEM(Splunk、ELK或者其他組件中),Snort團隊正在開發一個將警報信息輸出爲JSON格式的日誌目錄的JSON插件,這是非常適合攝取這些類型的工具。警報json插件的實例包和一個很好的指南設置可以在這篇文章中找到:Snort 3.0 with ElasticSearch, LogStash, and Kibana (ELK)
反饋:請給我反饋遇到的問題和建議來修改本指南:[email protected]。反饋可以幫助我更新這些指南,幫助我識別常見問題和人們運行這些指令時遇到的問題。

注:原文章地址(在snort官網可下載該文件):https://www.snort.org/documents/snort-3-0-for-ubuntu-14-and-16

pdf文件我已上傳到CSDN:http://download.csdn.net/download/m0_37739193/10247710
我自己的測試環境:Ubuntu 14.04 64位(按原文章的命令和步驟成功安裝了Snort 3)

由於本人英語水平有限,可能翻譯的有瑕疵,還望廣大讀者能夠給出建議和修改意見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章