1.3 Snort如何獲取數據包
Snort 2.9引入了用于數據包I / O的DAQ或數據采集庫。DAQ用抽象層代替了對libpcap函數的直接調用,該抽象層便于在各種硬件和軟件接口上進行操作,而無需更改Snort。調用Snort進行pcap回讀或內聯操作等時,可以選擇DAQ類型和模式。
注意:某些網卡具有可能會影響Snort的功能。其中兩個功能分別稱為“大型接收卸載”(lro)和“通用接收卸載”(gro)。啟用這些功能后,網卡將在內核對其進行處理之前執行數據包重組。默認情況下,Snort將截斷大于默認快照值1518字節的數據包。此外,LRO和GRO可能會導致基于Stream目標的重組問題。我們建議您關閉LRO和GRO。在Linux系統上,您可以運行:
$ ethtool -K eth1 gro off
$ ethtool -K eth1 lro off
1.3.1 配置
假設您沒有禁用靜態模塊或更改默認的DAQ類型,則可以像以往一樣運行Snort進行文件回讀或嗅探接口。但是,可以在調用Snort時選擇和配置DAQ,如下所示:
./snort \
[--daq <type>] \
[--daq-mode <mode>] \
[--daq-dir <dir>] \
[--daq-var <var>]
config daq: <type>
config daq_dir: <dir>
config daq_var: <var>
config daq_mode: <mode>
<type> ::= pcap | afpacket | dump | nfq | ipq | ipfw
<mode> ::= read-file | passive | inline
<var> ::= arbitrary <name>=<value> passed to DAQ
<dir> ::= path where to look for DAQ module so's
可以通過命令行或在conf文件中指定DAQ類型、模式、變量和目錄。您可以通過重復arg / config來包含所需數量的變量和目錄。DAQ類型最多可以在conf中指定一次,而在命令行中一次指定;如果在兩個地方都配置,則命令行將覆蓋conf。
如果未明確設置模式,則-Q將強制其內聯,如果尚未設置,則-r將其強制為讀取文件,如果尚未設置,則模式默認為被動。另外,由于沒有沖突,因此允許-Q和-daq-mode內聯,但是-Q和任何其他DAQ模式將在啟動時導致致命錯誤。
請注意,如果Snort找到給定庫的多個版本,則選擇最新版本。這適用于同一庫的靜態和動態版本。
./snort --daq-list[=<dir>]
./snort --daq-dir=<dir> --daq-list
上面的命令在指定的目錄中搜索DAQ模塊以及每個模塊的打印類型、版本和屬性。該功能在conf中不可用。Snort在解析-daq-list之后停止處理,因此,如果要添加一個或多個目錄,請在命令行上的-daq-list之前添加-daq-dir選項。(由于目錄是-daq-list的可選目錄,因此此選項必須使用=不帶空格。)
1.3.2 pcap
pcap是默認的DAQ。如果在沒有任何DAQ參數的情況下運行snort,它將像使用該模塊一樣始終運行。這些是等效的:
./snort -i <device>
./snort -r <file>
./snort --daq pcap --daq-mode passive -i <device>
./snort --daq pcap --daq-mode read-file -r <file>
您可以使用以下命令指定pcap使用的緩沖區大小:
./snort --daq pcap --daq-var buffer_size = <#bytes>
請注意,pcap DAQ不計算過濾的數據包。
1.3.3 Afpacket
afpacket函數類似于內存映射的pcap DAQ,但不需要外部庫:
./snort --daq afpacket -i <device>
[--daq-var buffer_size_mb=<#MB>]
[--daq-var debug]
如果要以串聯模式運行afpacket,則必須將設備設置為一個或多個接口對,其中一對接口的每個成員都由單個冒號分隔,而每個配對對則由雙冒號分隔,如下所示:
eth0:eth1
或這個:
eth0:eth1 :: eth2:eth3
默認情況下,afpacket DAQ為數據包內存分配128MB。您可以使用以下方法進行更改:
--daq-var buffer_size_mb = <#MB>
請注意,分配的總數實際上更高,這就是原因。假設默認數據包內存的快照數為1518,則數字按如下所示分解:
1. 幀大小為1518(snaplen)+ AFPacket標頭的大小(66個字節)= 1584個字節。
2. 幀數為128 MB / 1518 = 84733。
3. 至少可容納一幀的最小塊大小為4 KB = 4096字節@每塊2幀。
4. 結果,我們需要84733/2 = 42366塊。
5. 分配的實際內存為42366 * 4 KB = 165.5 MB。
1.3.4 NFQ
NFQ是處理iptables數據包的新方法和改進的方法:
./snort --daq nfq \
[--daq-var device=<dev>] \
[--daq-var proto=<proto>] \
[--daq-var queue=<qid>] \
[--daq-var queue_len=<qlen>]
<dev> ::= ip | eth0, etc; default is IP injection
<proto> ::= ip4 | ip6 | ip*; default is ip4
<qid> ::= 0..65535; default is 0
<qlen> ::= 0..65535; default is 0
1.3.5 IPQ
IPQ是處理iptables數據包的舊方法。它替換了使用此版本構建的2.9之前版本中的內聯版本:
./configure --enable-inline / -DGIDS
如下啟動IPQ DAQ:
./snort --daq ipq \
[--daq-var device=<dev>] \
[--daq-var proto=<proto>] \
<dev> ::= ip | eth0, etc; default is IP injection
<proto> ::= ip4 | ip6; default is ip4
1.3.6 IPFW
IPFW可用于BSD系統。它替換了使用此版本構建的2.9之前版本中的內聯版本:
./configure --enable-ipfw / -DGIDS -DIPFW
不再支持此命令行參數:
./snort -J <port#>
相反,像這樣啟動Snort:
./snort --daq ipfw [--daq-var port = <port>]
<port> :: = 1..65535; default is 8000
IPFW僅支持ip4流量。
1.3.7 轉儲
轉儲DAQ允許您測試2.9 Snort中可用的各種串聯模式功能,例如注入和規范化。
./snort -i <device> --daq dump
./snort -r <pcap> --daq dump
默認情況下,將創建一個名為inline-out.pcap的文件,其中包含所有通過snort或由snort生成的數據包。您可以選擇指定其他名稱。
./snort --daq dump --daq-var file=<name>
dump使用pcap daq進行數據包獲取。因此,它不計算過濾的數據包。
請注意,轉儲DAQ串聯模式不是實際的串聯模式。此外,您可能希望以其他方式獲取pcap DAQ,如下所示:
./snort -r <pcap> -Q --daq dump --daq-var load-mode=read-file
./snort -i <device> -Q --daq dump --daq-var load-mode=passive
1.3.8 統計數據變化
Snort輸出的Packet Wire Totals和Action Stats部分包括其他字段:
過濾數據包的數量過濾掉,而不是交給的Snort進行分析。注入Snort生成并發送了數據包,例如TCP重置。允許Snort數據包進行分析,并且未采取任何措施。阻止Snort未轉發數據包,例如由于阻止規則。替換Snort修改的數據包。白名單導致Snort允許任何分析程序通過無檢查的流量的數據包。黑名單導致Snort阻止流量通過的數據包。忽略導致Snort通過此Snort實例允許流通過/不進行檢查的數據包。
動作統計信息顯示“已阻止”數據包,而不是“已丟棄”數據包,以避免已丟棄數據包(Snort實際看不到的數據包)和已阻止數據包(Snort不允許通過的數據包)之間的混淆。
Snort安裝使用中文手冊
推薦文章: