Snort-IPS-入侵防護系統安裝及部署小記

安裝環境爲Ubuntu,使用源碼編譯方式安裝並導入社區Snort規則;聯合防火牆作防護,依據Snort官網文檔操做。html

Ubuntu 18和20上的Snort 3.0.1

用Splunk當SIEMnode

諾亞·迪特里希c++

內容

介紹git

安裝Snortgithub

配置網卡web

安裝OpenApplD正則表達式

安裝Snort規則集sql

啓用內置規則chrome

將PCAP文件傳遞到Snort並將警報輸出到.csvshell

JSON警告輸出插件

snort啓動腳本

Splunk

使用Splunk

清理您的安裝

結論

附錄A:安裝示例插件

附錄B:更改安裝位置

附錄C:構建開發人員指南

附錄D:安裝BATS: Bash自動化測試系統

本做品根據知識共享屬性-非商業性- sharealike 4.0國際許可(CC BY-NC-SA 4.0)進行受權。

介紹

本指南向您展現瞭如何在Ubuntu上使用Splunk將Snort 3設置爲網絡入侵檢測系統(NIDS)和安全信息和事件管理(SIEM)系統。本指南的目的是向您介紹組成基於Snort和Splunk的NIDS和SIEM的組件和選項,以便您能夠修改Snort和Splunk以知足您的特定需求。您能夠經過複製和粘貼本指南中的各個步驟來安裝Snort和Splunk,而不須要花時間瞭解本身在作什麼,這樣能夠很好地工做。可是,若是您花時間理解爲何要執行每一個步驟,那麼您應該對Snort和Splunk的工做方式有更深刻的理解。

關於Snort 3: Snort 3是基於規則的網絡入侵檢測和預防軟件(NIDS/NIPS)。它具備高度的靈活性和可配置性,可適應多種不一樣的狀況,而且具備新的插件體系結構,容許開發人員建立本身的插件,以便在Snort的處理管道中使用。本指南將重點介紹Snort最多見的用法:做爲一個獨立服務器,將網絡流量與一組規則(稱爲規則集)進行比較,以檢測可疑和可能的惡意流量,並對可疑流量生成警報。

關於Splunk: Splunk是一個收集安全信息和事件管理(SIEM)的系統。存儲並容許您輕鬆地分析和可視化計算機生成的數據,包括由Snort建立的警報。本指南將使用Splunk以圖形方式顯示Snort警報,提供過濾和搜索功能,並幫助您基本瞭解Splunk是如何成爲理解機器生成數據的強大工具的。

OpenApplD:OpenAppID容許Snort識別、控制和度量網絡上使用的應用程序。OpenApplD由一組匹配特定類型網絡數據的包(簽名)組成,包括第7層應用程序,如Facebook, DNS, netflix, discus,谷歌,以及使用這些服務的應用程序(chrome, http, https等)。您能夠基於這些OpenApplD簽名建立規則,從而容許您阻止與某些應用程序相匹配的流量(例如,阻止全部Facebook流量)。

Snort 2 vs Snort 3: Snort 3是對Snort產品的徹底從新設計,以解決Snort 2.9.x的一些限制。一些主要的要點是多線程、可擴展的插件架構、基於lua的配置文件、命令行shell和許多其餘特性。更多信息能夠在這裏找到。

軟件要求:本指南已經在64位版本的Ubuntu server 18和20上進行了測試。這個指南尚未在32位版本的Ubuntu服務器上測試過,由於Splunk服務器不能安裝在32位平臺上。要啓動Splunk,在安裝它的驅動器上至少須要5gb的可用空間(一般是/opt/ Splunk)。

我尚未在其餘基於debian的系統(包括Raspberry Pi)上測試過本指南,儘管我收到報告說,在安裝和編譯先決條件時,只需作不多的修改就可使其工做。

若是你必須安裝Snort在32位系統上,你有幾個選擇:安裝32位輕量級Splunk通用貨代(超濾),服務器經過日誌回到你Splunk服務器,Snort json日誌複製到另外一個服務器進行索引,或者使用NFS共享日誌目錄(安全地)Splunk服務器能夠看到和索引方法。

對於還沒有可用的全棧Snort 3.0 NIDS/NIPS,惟一須要的軟件是PulledPork,它執行規則集管理(自動下載最新的規則集以及其餘管理工做)。一旦PulledPork被更新爲適用於Snort 3.0,我將更新這個指南。

對於舊版本的Ubuntu,Snort 3不能方便地安裝在早期版本的Ubuntu上,由於默認存儲庫中沒有所需的支持軟件版本,因此當遇到錯誤時,您須要手動編譯所需的庫(好比GCC)。

警告:Snort 3是測試版軟件。不該該在生產系統中使用它。因爲Snort 3目前正在開發中:自編寫本指南以來,您下載的Snort 3版本可能經歷了修改,從而致使編譯或配置方面的問題。

支持:請在Snort分發列表中尋求幫助:

大多數請求都應該發送到Snort用戶列表,除非與OpenApplD相關或與代碼基有關的問題。請閱讀如何問一個好問題瞭解郵寄名單禮儀

安裝Snort

首先,確保您的系統是最新的,並有最新的包列表:

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

確保你的系統有正確的時間和時區。這在稍後咱們開始使用Splunk處理警報時很是重要。下面的命令將容許您選擇您的時區。在選擇您的地區和時區後,它將顯示當前時間。請確保這些都是正確的:

sudo dpkg-reconfigure tzdata

咱們將下載大量的源文件壓縮包和其餘源文件,咱們但願將它們存儲在一個文件夾中:

mkdir ~/snort_src
cd ~/snort_src

安裝Snort 3先決條件。這些包的詳細信息能夠在Snort3手冊的需求部分找到:

sudo apt-get install -y build-essential autotools-dev libdumbnet-dev \
libluajit-5.1-dev libpcap-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,因此咱們須要一些工具(這一步在Ubuntu 20中是沒必要要的,由於這些庫已經安裝好了):

sudo apt-get install -y libtool git autoconf

須要安裝Snort DAQ(數據獲取庫)的幾個先決條件:

sudo apt-get install -y bison flex libcmocka-dev

若是您但願使用NFQ (IPS模式)之內聯模式運行Snort,請安裝所需的包;(以下所列的包是不須要的IDS模式或內聯模式使用afpacket)。若是你不肯定,你應該安裝這些包:

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

下載和安裝safec用於對某些遺留C-library調用的運行時邊界檢查(這是可選的,但推薦):

cd ~/snort_src
#直接從github下載較慢,已轉存至gitee
wget https://gitee.com/deng_wenyi/snort3-ubuntu-install-source-code/repository/archive/master.zip
apt install unzip
unzip master.zip
mv snort3-ubuntu-install-source-code/libsafec-08112019.0-gad76c7.tar.gz ./
tar -xzvf libsafec-08112019.0-gad76c7.tar.gz
cd libsafec-08112019.0-gad76c7/
./configure
make
sudo make install

 安裝PCRE: Perl兼容正則表達式。咱們不使用Ubuntu庫,由於Ubuntu庫的版本更老。咱們沒有使用pcre2,由於hyperscan沒法與那個版本兼容。

cd ~/snort_src/
mv snort3-ubuntu-install-source-code/pcre-8.43.tar.gz ./
tar -xzvf pcre-8.43.tar.gz
cd pcre-8.43
./configure
make
sudo make install

下載並安裝gperftools 2.7,谷歌的線程緩存malloc(用於chrome)。Tcmalloc是一個內存分配器,它針對高併發狀況進行了優化,將提供更好的速度來平衡較高的內存使用。咱們不但願從Ubuntu存儲庫中得到tcmalloc版本(2.5版本),由於它與Snort不兼容。Tcmalloc是可選的,但建議:

sudo apt-get install -y libunwind-dev
cd ~/snort_src
mv snort3-ubuntu-install-source-code/gperftools-2.7.90.tar.gz ./
tar xzvf gperftools-2.7.90.tar.gz
cd gperftools-2.7.90
./configure
make
sudo make install

Snort 3使用Hyperscan實現快速模式匹配。Hyperscan須要Ragel和Boost頭:

cd ~/snort_src
mv snort3-ubuntu-install-source-code/ragel-6.10.tar.gz ./
tar -xzvf ragel-6.10.tar.gz
cd ragel-6.10
./configure
make
sudo make install

Hyperscan須要Boost c++庫。請注意,咱們沒有使用boost頭文件的Ubuntu存儲庫版本(libboost-all-dev),由於Hyperscan須要1.58或更高版本的boost庫,並且Ubuntu存儲庫版本太老了。下載Boost 1.72.0庫,但不安裝:

cd ~/snort_src
#boost庫比較大(約120M),見百度網盤下載;或使用原連接下載
#連接: https://pan.baidu.com/s/1GOM1KXJDjBMsElGw7q3fRg  密碼: e4av
#--來自百度網盤超級會員V4的分享
wget https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz
tar -xvzf boost_1_72_0.tar.gz

從源文件安裝hyperscan5.2.1,引用Boost頭文件源目錄的位置:

cd ~/snort_src
mv snort3-ubuntu-install-source-code/hyperscan-5.2.1.tar.gz ./
tar -xvzf hyperscan-5.2.1.tar.gz
mkdir ~/snort_src/hyperscan-5.2.1-build
cd hyperscan-5.2.1-build/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBOOST_ROOT=~/snort_src/boost_1_72_0/ ../hyperscan-5.2.1
make
sudo make install

若是你想測試Hyperscan工做,從構建目錄,運行:

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

Snort對flatbuffers有一個可選的要求,這是一個內存高效的序列化庫(您能夠在cmake過程當中忽略「不是git庫」的錯誤):

cd ~/snort_src
mv snort3-ubuntu-install-source-code/flatbuffers-v1.12.0.tar.gz ./
tar -xzvf flatbuffers-v1.12.0.tar.gz
mkdir flatbuffers-build
cd flatbuffers-build
cmake ../flatbuffers-1.12.0
make
sudo make install

接下來,從Snort網站下載並安裝數據採集庫(DAQ)。注意,Snort 3使用的DAQ與Snort 2.9.x.x系列不一樣:

cd ~/snort_src
git clone https://gitee.com/deng_wenyi/snort3-libdaq.git
cd snort3-libdaq
./bootstrap
./configure
make
sudo make install

更新共享庫:

sudo ldconfig

如今,咱們準備從github存儲庫下載、編譯和安裝Snort 3。若是您對啓用額外的編譯時功能感興趣,好比可以處理大的(超過2 GB) PCAP文件,或者新的命令行shell,那麼您應該運行./configure cmake.sh --help列出全部可能的選項。若是您想安裝到其餘位置,請參閱附錄B。下載和安裝,默認設置:

cd ~/snort_src
git clone https://gitee.com/deng_wenyi/snortadmin-snort3.git
cd snortadmin-snort3/
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
cd build
make
sudo make install

安裝的最後一步是驗證Snort是否安裝並能夠運行。爲此,咱們向snort可執行文件傳遞-V這個標誌:

/usr/local/bin/snort -V

您應該會看到相似以下的輸出:

root@UbuntuServer:~/snort_src/snortadmin-snort3/build# /usr/local/bin/snort -V

   ,,_     -*> Snort++ <*-
  o"  )~   Version 3.0.3 (Build 5)
   ''''    By Martin Roesch & The Snort Team
           http://snort.org/contact#team
           Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using DAQ version 3.0.0
           Using LuaJIT version 2.0.4
           Using OpenSSL 1.0.2g  1 Mar 2016
           Using libpcap version 1.7.4
           Using PCRE version 8.43 2019-02-23
           Using ZLIB version 1.2.8
           Using FlatBuffers 1.12.0
           Using Hyperscan version 5.2.1 2020-12-13
           Using LZMA version 5.1.0alpha

 若是您的輸出與上面的相似,那麼恭喜您!Snort已安裝並正常工做。如今讓咱們使用默認配置文件測試Snort:

snort -c /usr/local/etc/snort/snort.lua

您應該會看到以如下內容結束的輸出:

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

配置網卡

現代網卡使用卸載(例如LRO)來處理硬件中的網絡包從新組裝,而不是在軟件中從新組裝。對於大多數狀況,這是首選的,由於它減小了系統上的負載。對於NIDS,咱們但願禁用LRO和GRO,由於這會截斷較長的數據包(更多信息請參見Snort 2手冊)。

咱們須要建立一個systemD服務來更改這些設置。首先肯定使用ifconfig查看讓snort偵聽的接口的名稱。

注意:若是你使用的是Ubuntu 20: ifconfig已經被ip命令所取代(運行ip address show查看接口和ip地址)。

一旦知道了網絡接口的名稱,請檢查這些接口的大接收(LRO)和通用接收(GRO)的卸載狀態。在下面的示例中,個人接口名稱是ens3(根據系統類型,您一般也會看到ethoens160做爲接口名稱)。

咱們使用ethtool來檢查LRO/GRO的狀態

sudo ethtool -k ens3 | grep receive-offload

輸出:

generic-receive-offload: on
large-receive-offload: off [fixed]

從這個輸出中,您能夠看到啓用了GRO,LRO被禁用(「固定」意味着它不能被改變)。咱們須要確保二者都被設置爲"off"(或off [fixed])。咱們可使用ethtool命令禁用LRO和GRO,但該設置不會在從新啓動時持久存在。解決方案是建立一個systemD腳本,在每次引導時自動設置這個值。

建立systemD腳本:

sudo vi /lib/systemd/system/ethtool.service

輸入如下信息,將ens3替換爲您的接口名稱:

[Unit]
Description=Ethtool Configration for Network Interface

[Service]
Requires=network.target
Type=oneshot
ExecStart=/sbin/ethtool -K ens3 gro off
ExecStart=/sbin/ethtool -K ens3 lro off

[Install]
WantedBy=multi-user.target

文件建立完成後,啓用服務:

sudo systemctl enable ethtool
sudo service ethtool start

這些設置如今將在從新引導時持久存在。您可使用ethtool驗證設置,將顯示(off或offixed]是您想要看到的設置):

sudo ethtool -k ens3 | grep receive-offload

輸出:

generic-receive-offload: off
large-receive-offload: off [fixed]

安裝OpenApplD

OpenApplD容許識別應用層(第7層)的流量。您能夠建立操做應用程序層流量的規則(好比阻止facebook),並記錄檢測到的每種類型的流量統計數據

在社區的幫助下,Snort團隊建立了一個檢測器包,稱爲應用程序檢測器包,能夠下載和安裝。首先下載OpenAppID檢測器包並解壓縮文件

cd ~/snort_src/
mv snort3-ubuntu-install-source-code/snort-openappid.tar.gz ./
tar -xzvf snort-openappid.tar.gz
sudo cp -R odp /usr/local/lib/

若是您獲得的錯誤是該文件不存在,那麼多是Snort團隊更新了規則集。瀏覽到https://snort.org/downloads#openappid,並下載snort-openappid.tar.gz

按照上面的方法下載和提取規則後,咱們須要編輯Snort配置文件以指向這個odp目錄:

sudo vi /usr/local/etc/snort/snort.lua

在第89行(您的行號可能略有不一樣),您將看到"appid ="條目。您將須要在這裏添加app_detector_dir選項,它指向咱們上面解壓縮的odp文件夾的父文件夾。它應該是這樣的:

appid =
{

    −− appid requires this to use appids in rules
    app_detector_dir = '/usr/local/lib',
 }

注意,縮進行必須有四個空格(而不是製表符)。如今咱們想測試配置文件正確加載:

snort -c /usr/local/etc/snort/snort.lua --warn-all

此命令將驗證Snort是否能夠正確讀取snort.lua文件,它不包含任何錯誤。運行此命令後,您應該看到以如下內容結束的輸出:

注:(Snort的異常等級,警告、錯誤、致命錯誤)(我產生了5個警告,但這無傷大雅)

...
Finished /usr/local/etc/snort/snort.lua:
WARNING: appid: no lua detectors found in directory '/usr/local/lib/custom/lua/*'
--------------------------------------------------
pcap DAQ configured to passive.

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

您可能會看到一個警告(非致命):WARNING: appid:在目錄"/usr/local/lib/custom/lua/"中找不到lua檢測器。

只要輸出以「Snort成功驗證了配置」結束,就能夠忽略此警告。這個警告只是意味着您沒有任何本地開發的openAppld獲取腳本。

接下來,咱們將建立一個簡單的規則來測試OpenAppID是否正常工做

sudo mkdir /usr/local/etc/rules
sudo touch /usr/local/etc/rules/local.rules
sudo vi /usr/local/etc/rules/local.rules

咱們將在local.rules文件中生成兩個規則。第一個規則使用OpenApplID來檢查Facebook流量,第二個規則將檢測ICMP流量,這對於測試警報是否正確生成很是有用。這兩條規則很適合測試您的設置。將如下兩行粘貼到上面建立的local.rules文件中:

alert tcp any any -> any any ( msg:"Facebook Detected"; appids:"Facebook";sid:10000001; )
alert icmp any any -> any any (msg:"ICMP Traffic Detected";sid:10000002;)

如今運行Snort並加載local.rules文件,以確保正確加載這些規則(驗證規則的格式正確):

snort -c /usr/local/etc/snort/snort.lua \
-R /usr/local/etc/rules/local.rules

輸出應該以「Snort成功驗證了匹配」結束。你不該該有任何警告或錯誤.

若是您向上滾動輸出,您應該會看到這兩個文本規則已成功加載(在rule counts部分)。如今,讓咱們在一個接口(更改下面的etho以匹配您的接口名稱)上以檢測模式運行snort,並將全部警報打印到控制檯:

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

"-k none"標誌告訴Snort忽略錯誤的校驗和,而"-s 65535"標誌則防止Snort處理過大的包。Stream和Frag解碼器會丟棄校驗和錯誤的數據包,而OpenApplD檢測器也不會處理這些數據包。經過包含這些標誌,咱們能夠確保具備錯誤校驗和的數據包仍然被處理爲警報。snort將加載配置,而後顯示:

Commencing packet processing
++ [0] eth0

這意味着snort目前正在監聽該接口上的全部流量,並將其與它加載的兩個規則進行比較。當流量與規則匹配時,snort將向控制檯寫入警告。如今,從該計算機上的另外一個窗口(打開一個新的終端窗口或第二個ssh會話),使用wget鏈接到facebook。這將觸發第一個規則:

wget facebook.com

在第一個控制檯窗口中,您將看到相似於如下的警報輸出:

05/3021:26:48.482231 [**] [1:10000001:0] "Facebook Detected" [**] [Priority: 0] [AppID: Facebook] {TCP} 10.10.10.170:59632 −>
    185.60.216.35:80
05/3021:26:48.506197 [**] [1:10000001:0] "Facebook Detected" [**] [Priority: 0] [AppID: Facebook] {TCP} 185.60.216.35:80 −>
    10.10.10.170:59632
...

使用ctrl-c中止Snort。您還能夠在snort偵聽時(觸發local.rules文件中的第二條規則)與這臺機器進行ping或從該機器發出ping以生成警報。這是測試Snort的好規則,但在實際生產使用過程當中可能會產生一些干擾。

若是沒有看到生成的警報,請確保在此測試中,您正在運行snort的計算機上運行wget facebook.com,而且請求將從snort偵聽的接口發出。您能夠從另外一臺計算機ping到snort(到讓snort偵聽的接口的ip地址)。

注:(若是沒法使用ctrl-c中止Snort,能夠嘗試ctrl-z)

 

若是但願收集OpenAppID統計信息(每一個檢測器檢測到多少流量),則須要在snort.lua文件中啓用它,並使用"-l"標誌,在標誌後接"日誌目錄"運行Snort。

首先建立一個日誌目錄

sudo mkdir /var/log/snort

如今修改/usr/local/etc/snort/snort.lua使appid檢測器可以記錄統計信息(第89行):

appid =
{

    app_detector_dir = '/usr/local/lib',
    log_stats = true,
}

如今運行snort,監聽接口,將數據記錄到/var/log/snort文件夾

(與以前的命令相同,咱們只是添加了日誌文件夾路徑"-l"標誌)

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

在收集一些數據並中止Snort(像之前同樣使用ping和wget facebook.com生成數據,而後使用Ctrl-C中止)以後,您將在/var/log/snort看到appid_stats.log該文件爲root用戶全部,所以讓全部人均可讀(咱們將在後面一節中更改Snort自動編寫的文件的權限):

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

如今能夠查看snort收集的協議統計信息:

noah@snort3:~/snort_src$ cat /var/log/snort/appid_stats.log
1549218716,DNS,1576,1778
1549218716,Facebook,8727,630912
1549218716,OpenSSH,19523,2344
1549218716,SSH,19523,23445
1549218716,HTTPS,8727,630912
1549218716,SSL client,8727,630912
1549218716,ICMP,392,392
1549218716,__unknown,11028,139100

這是一個逗號分隔的文件,按照這個順序顯示時間(unixtime)、檢測器、發送字節(tx)和接收字節(rx)。若是不但願收集此數據,能夠在snort.lua配置文件appid模塊中禁用log開啓選項。請注意,此數據與local.rules文件中由規則生成的警報不一樣。有關檢測器的更多信息,請參見OpenApplD檢測器指南

安裝Snort規則集

與Snort 2規則相比,Snort 3規則有更多的選項,儘管手動下載的v2規則或使用PulledPork(一個自動下載更新規則集的腳本)能夠在Snort 3中使用,但應該使用專門爲Snort 3建立的規則

目前PulledPork還不能與Snort 3一塊兒工做,所以沒法自動更新規則集。我指望在不久的未來改變,一旦有了,我將發佈一個更新的指南。

有三組不一樣的Snort規則可供選擇(稱爲規則集)。社區規則集是免費的,不須要登陸;註冊的規則集包含社區規則集和其餘規則,須要在snort.org上擁有一個免費賬戶。訂閱者規則集是付費服務。訂閱方規則集的規則將在30天后添加到註冊的規則集。更多的信息在這裏

本指南將假設您正在使用註冊的規則集。您須要在Snort.org上建立一個賬戶,還能夠選擇在其中註冊各類snort郵件列表(電子郵件數量適中,一般有一些有趣的問題)。註冊並簽到以後,導航到規則下載頁面,下載最新的3.0規則(稱爲snortrales-snapshot3xxx.tar.gz或相似的內容,取決因而否發佈了新的版本)。將規則集保存到snort-src文件夾中。

咱們須要建立一些文件夾來存儲規則集中的規則。這裏咱們在usr/local/etc/snort中建立了四個文件夾(若是您在上面爲local.rules文件建立了第一個文件夾,那麼它可能已經存在);

文件夾名稱 目的
rules  註冊規則集中的全部基本規則文件
builtin_rules 包含內置規則的引用和信息的規則文件
so_rules  這些是編譯後的規則。Snort 3尚未這些功能,但很快就會實現
lists 白名單和黑名單。咱們在本指南中沒有設置這些

建立這些文件夾:

sudo mkdir /usr/local/etc/rules
sudo mkdir /usr/local/etc/builtin_rules

sudo mkdir /usr/local/etc/so_rules
sudo mkdir /usr/local/etc/lists

Snort的規則集包含三個文件夾:一個規則文件夾包含全部單獨的規則文件,一個內建文件夾包含關於構建到snort的規則的信息,以及一個etc文件夾,其中包含規則集生成的更新後的snort配置文件。從Snort的規則集中提取文件,將全部規則文件複製到snort規則文件夾中,將內置規則複製到內置文件夾中,並將snort配置文件複製到snort的程序文件夾中:

注:(此時應該去snort官網下載註冊規則集,並儲存在~/snort_src/目錄;由於下一步即將用到)

cd ~/snort_src/

#在此提供了註冊規則集的下載地址,但仍但願您去官方下載,由於它有可能會失效
wget https://www.snort.org/rules/snortrules-snapshot-3000.tar.gz?oinkcode=0e0795beeba6b8bd7c1d5b2727e48ad7a9202eb6 -O snortrules-snapshot-3000.tar.gz

mkdir snortrules-3000
tar -xvzf snortrules-snapshot-3000.tar.gz -C ./snortrules-3000
cd snortrules-3000

#複製單個規則文件
sudo cp ./rules/*.rules /usr/local/etc/rules/

#複製內建規則文件
sudo cp ./builtins/builtins.rules /usr/local/etc/builtin_rules/

#複製新的配置文件(咱們將覆蓋當前的配置)。
sudo cp ./etc/* /usr/local/etc/snort/

咱們從etc文件夾複製了三個文件。file_magic.lua它告訴snort如何識別文件類型;snort_defaults.lua表示(配置snort的全局設置(系統範圍);snort.lua它是snort特定實例的配置文件。

每次運行Snort時,您將向Snort傳遞一個snort.lua文件,該文件描述您但願snort如何運行。這個文件會加載默認文件,它描述的系統配置,適用於每一個dierent不一樣方式運行snort。

能夠有多個dierent版本的snort.lua,但一般只有一個默認的配置。

咱們如今將編輯這些文件。咱們不須要對/usr/local/etc/snort/snort_defaults.lua進行任何更改。可是若是您查看從第23行開始的部分,您會注意到咱們在上面建立的文件夾。這就是snort如何在這些文件夾中查找規則文件的方法。

注:(這兩段話及其繞口,勞資也沒聽懂,可是不要緊)

接下來,編輯snort.lua文件。這個文件是咱們在啓動時傳遞給snort的配置文件,它還加載snort_defaults.lua文件。

sudo vi /usr/local/etc/snort/snort.lua

首先,讓咱們配置咱們的HOME_NET變量。這指的是咱們正在保護的本地子網(規則使用此信息來肯定警報是否匹配)。在這裏設置您的本地子網信息以匹配您的子網。個人子網配置是10.0.0.0網絡與24位子網掩碼:

HOME_NET = '10.0.0.0/24'

設置EXTERNAL_NET「any」(一些指南但願你設置這個爲除了全部子網的主網。但這會讓你錯過許多重要的警告)。

在第91行,您將看到appid插件沒有任何選項(意味着檢測器已加載,但未配置)。若是願意,能夠像上一節那樣配置它。

注:(官方修改了配置文件,之前多是在91行,但如今它在116行;像以前同樣配置appid的路徑並啓用日誌文件便可)

在第169行,您將看到ips檢測器。若是你查看IPS設置,你會看到咱們複製的全部規則文件,從第180行開始:

注:(ips檢測器在195行,「咱們複製的全部規則文件」是從206行開始)

rules = [[

        include $RULE_PATH/snort3-app-detect.rules
        include $RULE_PATH/snort3-browser-chrome.rules
        include $RULE_PATH/snort3-browser-firefox.rules
        include $RULE_PATH/snort3-browser-ie.rules
        ...

$RULE_PATH路徑在snort_defaults.lua中定義,引用/usr/local/etc/rules.您能夠在第172行看到內置ips選項;稍後咱們將啓用這些規則。如今,讓咱們測試一下snort是否能夠成功加載這些規則。讓咱們經過運行snort來測試配置文件,並將路徑傳遞給這個修改後的snort.lua文件,就像咱們以前作的:

snort -c /usr/local/etc/snort/snort.lua

 若是你出現了相似如下報錯:

Finished /usr/local/etc/snort/snort.lua:
Loading ips.rules:
FATAL: ips.rules:3 undefined variable name: RULE_PATH.
Fatal Error, Quitting..

請移步個人另外一篇文章:http://www.javashuo.com/article/p-xibqgyxv-ny.html

未完待續……

相關文章
相關標籤/搜索