Ⅰ Wireshark+Elasticsearch+Kibana打造流量回溯系統
流量回溯系統捕獲和分析數據流程,一般由以下幾個步驟組成:
1.數據包捕獲 -記錄網路上的數據包流量。
2.協議解析 -解析不同的網路協議和欄位。
3.搜索和可視化 -詳細或匯總瀏覽數據。
從 Wireshark 3.0.0rc1 開始,TShark可以使用 -G elastic-mapping 選項,生成Elasticsearch映射文件,存儲在Elasticsearch中並進行瀏覽,使得TShark解析結果可以在在Kibana中進行搜索和可視化。
下面,我將展示如何使用Wireshark和Elastic Stack來建立流量回溯系統:
Packetbeat 可以配置為捕獲實時網路數據包,並使用 -I 選項從捕獲文件中讀取數據包。它可以識別和解析許多應用程序級協議,例如HTTP,MySQL和DNS,以及常規流信息。但packetbeat對報文採用會話方式分析,不能對一個個報文單獨分析,傾向於應用層,對網路層面分析不足,並且支持的協議有限,tshark的2000多種存在明顯差距。
Wireshark是最受歡迎的數據包捕獲和分析軟體,它可以識別 2,000多個協議,其中包含200,000多個欄位 。除GUI界面操作外,它還提供命令行實用程序 tshark 來捕獲實時流量以及讀取和解析捕獲文件。作為其輸出, tshark 可以生成報告和統計信息,還可以分析不同文本格式的數據包數據。
自2.2版( 2016年9月發布 )以來, tshark 支持的 Elasticsearch Bulk API 的JSON格式輸出。
將在 eth0 網路介面上實時捕獲數據包,並以Elasticsearch Bulk API格式輸出到文件 packets.json 。
將從捕獲文件 capture.pcap 中讀取數據包,並作為JSON格式輸出為Elasticsearch Bulk API格式到文件 packets.json 。
將從捕獲文件 capture.pcap 中讀取數據包,過濾HTTP協議指定欄位,並作為JSON格式輸出為Elasticsearch Bulk API格式到文件 packets.json 。
將從捕獲文件 capture.pcap 中讀取數據包,過濾HTTP協議指定欄位,並增加"|"分隔符以txt格式輸出到文件 packets.txt 。
從5.0版開始,Elasticsearch提出了Ingest Pipeline的概念。一個pipeline 由一系列線程組成,這些可以對數據進行許多不同的更改。
Pipeline示例如下:
該Pipeline只是簡單更改數據包將被寫入的Elasticsearch索引(默認值為 packets-YYYY-MM-DD )。要在導入數據時使用此管道,請在URL中指定它:
有關更多信息,請參見 Ingest模塊文檔 和新的攝取方式- 第1 部分 , 第2部分 。
Filebeat和Logstash都有等效的配置選項,用於在將數據發送到Elasticsearch時指定接收Pipeline。
Logstash是Elastic Stack的一部分,並用作數據處理線程。它可以用來讀取Elasticsearch Bulk API格式的數據,並在將數據發送到Elasticsearch之前對數據執行更復雜的轉換和充實。
配置示例為:
logstash.conf
grok過濾器從,格式為「 protocol:protocol:protocol 」的 frame_frame_protocols 欄位(例如「 eth:ethertype:ip:tcp:http 」 )中提取最內層的網路協議名稱,到頂級「 protocol 」欄位中。
Wireshark解析的原始數據包含大量欄位,這些欄位種絕大多數不會搜索或匯總,因此在所有這些欄位上創建索引通常不是正確的選擇。
欄位太多會降低索引和查詢速度, Elasticsearch 5.5開始,默認會將索引中的欄位數限制為1000 。另外, tshark -T ek 無論原始數據欄位值是文本還是數字,包括時間戳和IP地址,均輸出為字元串。
如果要指定正確的數據類型,將數字索引為數字,將時間戳作為時間戳等,防止索引欄位激增,應顯式指定Elasticsearch映射。
Elasticsearch映射例子如下:
要將 tshark -T ek 的輸出數據導入到Elasticsearch中,有以下幾種方式。
Filebeat非常輕巧,可以監視一組文件或目錄中是否有任何新文件,並自動對其進行處理。讀取Tshark輸出文件並將數據包數據發送到Elasticsearch。
示例配置如下所示:
filebeat.yml
與Filebeat一樣,Logstash可以監視目錄中的新文件並自動對其進行處理。與Filebeat相比,它比Elasticsearch Ingest Pipeline可以更廣泛地轉換數據。
有關Logstash配置的示例,請參見3.1轉換數據的部分。
在Kibana中,您現在可以瀏覽數據包並在它們之上構建儀錶板。
*網路數據詳細視圖,包括一個表格,該表格在可擴展的行中顯示原始數據包數據
*顯示網路協議分布的餅圖
由於來自Wireshark的網路數據具有與syslog等不同的數據格式,因此更改Kibana中的某些設置(「管理」選項卡->「 Kibana高級設置」)很有意義。
Kibana配置如下:
參考
Ⅱ tshark命令參數詳解
捕獲介面:
-i: -i interface 指定捕獲介面,默認是第一個非本地循環介面;
-f: -f capture filter 設置抓包過濾表達式,遵循libpcap過濾語法,這個實在抓包的過程中過濾,如果是分析本地文件則用不到。
-s: -s snaplen 設置快照長度,用來讀取完整的數據包,因為網路中傳輸有65535的限制,值0代錶快照長度65535,默認也是這個值;
-p: 以非混合模式工作,即只關心和本機有關的流量。
-B: -B buffer size 設置緩沖區的大小,只對windows生效,默認是2M;
-y: -ylink type 設置抓包的數據鏈路層協議,不設置則默認為-L找到的第一個協議,區域網一般是EN10MB等;
-D: 列印介面的列表並退出;
-L 列出本機支持的數據鏈路層協議,供-y參數使用。
捕獲停止選項:
-c: -c packet count 捕獲n個包之後結束,默認捕獲無限個;
-a: -a autostop cond. ... ration:NUM,在num秒之後停止捕獲;
filesize:NUM,在numKB之後停止捕獲;
files:NUM,在捕獲num個文件之後停止捕獲;
捕獲輸出選項:
-b ringbuffer opt. ... ring buffer的文件名由-w參數決定,-b參數採用test:value的形式書寫;
ration:NUM - 在NUM秒之後切換到下一個文件;
filesize:NUM - 在NUM KB之後切換到下一個文件;
files:NUM - 形成環形緩沖,在NUM文件達到之後;
RPCAP選項:
remote packet capture protocol,遠程抓包協議進行抓包;
-A: -A user:password,使用RPCAP密碼進行認證;
輸入文件:
-r: -r infile 設置讀取本地文件
處理選項:
-2: 執行兩次分析
-R: -R read filter,包的讀取過濾器,可以在wireshark的filter語法上查看;在wireshark的視圖-過濾器視圖,在這一欄點擊表達式,就會列出來對所有協議的支持。
-Y: -Y display filter,使用讀取過濾器的語法,在單次分析中可以代替-R選項;
-n: 禁止所有地址名字解析(默認為允許所有)
-N: 啟用某一層的地址名字解析。「m」代表MAC層,「n」代表網路層,「t」代表傳輸層,「C」代表當前非同步DNS查找。如果-n和-N參數同時存在,-n將被忽略。如果-n和-N參數都不寫,則默認打開所有地址名字解析。
-d: 將指定的數據按有關協議解包輸出,如要將tcp 8888埠的流量按http解包,應該寫為「-d tcp.port==8888,http」;tshark -d. 可以列出所有支持的有效選擇器。
輸出選項:
-w: -w outfile|- 設置raw數據的輸出文件。這個參數不設置,tshark將會把解碼結果輸出到stdout,「-w -」表示把raw輸出到stdout。如果要把解碼結果輸出到文件,使用重定向「」而不要-w參數。
-F: -F output file type,設置輸出的文件格式,默認是.pcapng,使用tshark -F可列出所有支持的輸出文件類型。
-V: 增加細節輸出;
-O: -O protocols,只顯示此選項指定的協議的詳細信息。
-P: 即使將解碼結果寫入文件中,也列印包的概要信息;
-S: -S separator 行分割符
-x: 設置在解碼輸出結果中,每個packet後面以HEX mp的方式顯示具體數據。
-T: -T pdml|ps|text|fields|psml,設置解碼結果輸出的格式,包括text,ps,psml和pdml,默認為text
-e: 如果-T fields選項指定,-e用來指定輸出哪些欄位;
-E: -E fieldsoption=value如果-T fields選項指定,使用-E來設置一些屬性,比如
header=y|n
separator=/t|/s|char
occurrence=f|l|a
aggregator=,|/s|char
-t: -t a|ad|d|dd|e|r|u|ud 設置解碼結果的時間格式。「ad」表示帶日期的絕對時間
Ⅲ 在linux上tshark怎麼過濾
抓Mysql包命令如下:
tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query
tshark -s 512 -i em1 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query
過濾HTTP請求:
# tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R 'http.request.method == "GET" || http.request.method == "HEAD"'
輸出:
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
0.000000 123.126.68.27 -> 173.255.196.50 HTTP GET /grep.html HTTP/1.1
12.066470 123.126.68.27 -> 173.255.196.50 HTTP GET /pro_lang.html HTTP/1.1
-s 512 :只抓取前512個位元組數據
-i eth0 :捕獲eth0網卡
-n :禁止網路對象名稱解析
-f 'tcp dst port 3306' :只捕捉協議為tcp,目的埠為3306的數據包
-R 'mysql.query' :過濾出mysql.query
-T fields -e mysql.query :列印mysql查詢語句
tshark使用-f來指定捕捉包過濾規則,規則與tcpmp一樣,可以通過命令man pcap-filter來查得。
tshark使用-R來過濾已捕捉到的包,與界面板wireshark的左上角Filter一致。