在 Linux 系統中,網路封包的捕捉和分析對於網路管理和安全至關重要。本文將介紹如何使用 tcpdump 和 Wireshark 等工具進行封包捕捉和分析,並討論 DHCP 和 SPAN 等相關技術。瞭解這些技術有助於診斷網路問題、分析網路行為以及增強網路安全性。透過設定適當的捕捉篩選器,可以有效地鎖定目標流量,並利用 Wireshark 的圖形化介面深入分析封包內容,例如 DHCP 的 DORA 流程。此外,文章還將探討在高速網路環境下的效能考量和 ARP 欺騙攻擊的防禦策略。
Linux下的封包捕捉與分析
在資料中心中,封包是最接近真相的東西。無論主機或防火牆上的策略或組態有多麼複雜,主機和應用程式的封包總是會反映實際發生的事情。因此,封包捕捉和分析是網路管理員工具箱中的關鍵問題解決和故障排除技能。
封包捕捉簡介
封包捕捉涉及在正確的位置收集網路流量。正確的位置通常是指網路流量的入口或出口點,例如路由器、交換器或伺服器本身。
效能考量
在進行封包捕捉時,需要考慮對系統效能的影響。捕捉大量的封包可能會佔用大量的磁碟空間和處理資源。
篩選捕捉的流量
為了提高效率,通常需要對捕捉的流量進行篩選,以排除不相關的封包。
# 使用tcpdump捕捉HTTP流量
tcpdump -i eth0 -w http_traffic.pcap 'tcp port 80'
內容解密:
tcpdump是一個用於捕捉和分析網路流量的工具。-i eth0指定了要監聽的網路介面。-w http_traffic.pcap將捕捉的流量儲存到名為http_traffic.pcap的檔案中。tcp port 80篩選出TCP協定且目標或來源埠為80(HTTP服務的預設埠)的封包。
Linux 中的封包擷取與分析技術要求
在網路專業人員的日常工作中,封包擷取與分析是一項至關重要的技能。本章節將介紹如何在 Linux 環境下進行封包擷取與分析。雖然初始設定和封包擷取需要使用實體交換機,但本章節的大部分內容將聚焦於分析已擷取的封包,因此現有的 Linux 主機環境即可滿足需求。
為何需要封包擷取?
封包擷取是網路故障排除和協定分析的有力工具。透過擷取和分析網路封包,可以深入瞭解各種網路協定和應用程式的運作機制。
封包擷取檔案下載
封包擷取簡介:選擇適當的位置
有多種方法可以在兩台主機之間攔截和擷取封包,並且有多個位置可供選擇。讓我們來探討一些常見的選擇。
從任一端擷取
這是最簡單的方法,因為在正常情況下,對話雙方的主機都會接收或傳送所有封包。然而,這種方法存在一些限制:
- 您可能無法存取任一端的主機。
- 即使可以存取,您也可能沒有管理許可權。
- 在大多陣列織中,安裝新的系統軟體需要嚴格的變更控制程式。
- 封包擷取應用程式可能會被誤解為問題的根源。
切換監控埠
在許多情況下,我們需要在無法存取主機或無法中斷服務的情況下擷取封包。交換機供應商已經實作了埠映象或監控流量的功能,通常稱為 SPAN 設定。
設定範例:Cisco 交換機
monitor session 1 source g1/0/1 both
monitor session 1 destination g1/0/5
上述設定將監控 GigabitEthernet 1/0/1 埠的雙向流量,並將資料傳送到 GigabitEthernet 1/0/5 埠。
內容解密:
monitor session 1 source g1/0/1 both:此命令設定監控會話 1 的來源為 GigabitEthernet 1/0/1 埠,並且監控雙向(both)流量。monitor session 1 destination g1/0/5:此命令設定監控會話 1 的目標為 GigabitEthernet 1/0/5 埠,即將監控到的流量傳送到此埠。
中間內嵌主機
在某些情況下,可以使用路由器、交換機或防火牆等中間主機來擷取流量。防火牆特別有用,因為它可以在 NAT 前後擷取流量。
優缺點分析
- 優點:可以直接在問題發生的地方擷取封包。
- 缺點:網路裝置通常儲存空間有限,需要小心控制擷取的封包數量。
使用 Cisco 路由器作為封包收集器
更多關於使用 Cisco 路由器作為封包收集器的資訊,請參考:https://isc.sans.edu/forums/diary/Using+a+Cisco+Router+as+a+Remote+Collector+for+tcpdump+or+Wireshark/7609/。
網路分路器(Tap)
網路分路器是一種硬體裝置,可以插入到網路鏈路中,實作對流量的完全監控。由於是硬體解決方案,不受封包容量的限制。
圖示:網路分路器架構圖
此圖示展示了網路分路器如何插入網路鏈路並複製流量到監聽站。
內容解密:
網路分路器是一種專門的硬體裝置,用於複製網路流量。它允許監聽站接收到所有透過網路鏈路的資料,而不會對原始流量造成影響。這種方法對於需要完整監控網路流量的場景非常有用。
網路封包擷取的介紹 – 正確的觀察點
在網路診斷和安全分析中,封包擷取是一項重要的技術。對於網路管理員和安全專家來說,瞭解如何正確擷取和分析封包至關重要。
低階網路分接器(Tap)的運作原理
一個典型的低階網路分接器,如Michael Ossmann設計的「Throwing Star」,可用於擷取乙太網路流量。其運作原理如下圖所示: 此圖示說明瞭被動式網路分接器如何將原始網路流量複製到兩個監聽埠,每個埠監聽一個方向的流量。
內容解密:
- 被動式分接是指在不幹擾原始網路流量的情況下複製流量到監聽埠。
- 監聽埠1和2分別用於捕捉不同方向的流量,確保完整性和雙向分析。
網路分接器的演進與限制
隨著乙太網路速度的提升,例如從10/100 Mbps到1 Gbps、10 Gbps,分接器的設計也變得更加複雜。在高速網路環境中,單純的被動式分接器因訊號衰減而難以正常運作,因此需要更先進的主動式分接技術。
此圖示展示了主動式分接器如何透過內建的訊號增強電路來確保高品質的流量複製。
內容解密:
- 主動式分接涉及更複雜的電路設計,以保證訊號完整性。
- 訊號增強電路用於補償高速傳輸中的訊號損失。
惡意封包擷取方法與防禦
攻擊者可能會利用各種方法來擷取封包,包括:
- 惡意的DHCP伺服器:攻擊者可以架設流氓DHCP伺服器,使受害者的流量透過攻擊者的主機,從而進行封包擷取。
- 路由協定劫持:攻擊者可以透過操縱路由協定(如BGP)來劫持特定子網或主機的流量。
- ARP快取投毒:攻擊者可以透過傳送虛假的ARP封包,使受害者誤將攻擊者的MAC位址當作目標主機的MAC位址,從而截獲流量。
此圖示闡述了ARP快取投毒的攻擊過程。
內容解密:
- 虛假ARP封包用於欺騙受害者,使其將攻擊者的MAC位址與目標IP位址關聯。
- 受害者的流量被錯誤地傳送給攻擊者,導致流量被攔截。
防禦措施
- 加強DHCP服務的安全性:使用安全的DHCP組態和認證機制,防止流氓DHCP伺服器的出現。
- 注意憑證警告:當瀏覽器提示憑證無效時,應當謹慎處理,避免存取可疑網站。
- 使用安全的網路協定:盡可能使用加密的通訊協定(如HTTPS),減少明文傳輸的風險。
Linux 中的封包擷取與分析
在 Linux 環境中進行封包擷取與分析是一項重要的網路監控與安全稽核工作。當攻擊者利用 ARP 欺騙攻擊時,受害者的網路流量可能會被導向攻擊者的機器,從而導致敏感資訊的洩露。
ARP 欺騙攻擊的防護
為了防止 ARP 欺騙攻擊,可以採取以下措施:
日誌記錄與監控
大多數現代交換機和路由器都會在檢測到不同的 MAC 位址聲稱擁有相同的 IP 位址時記錄「Duplicate IP Address」錯誤。對此類別日誌條目進行警示有助於啟動主動式事件回應計劃。
動態 ARP 檢測(DAI)
大多數交換機都具有稱為動態 ARP 檢測(DAI)的功能,該功能可以檢測並阻止 ARP 欺騙攻擊。當檢測到攻擊時,攻擊者的乙太網路埠將被停用。不過,需要謹慎組態 DAI,避免影響下游交換機或無線接入點。
DAI 組態範例
ip arp inspection vlan <number>
ip arp inspection log-buffer entries 1024
ip arp inspection log-buffer logs 1024 interval 10
設定 DAI 信任埠
int g1/0/x
ip arp inspection trust
調整 DAI ARP 閾值
int g1/0/x
ip arp inspection limit 10
內容解密:
ip arp inspection vlan <number>:在指定的 VLAN 上啟用 DAI。ip arp inspection log-buffer entries 1024:設定日誌緩衝區的大小。ip arp inspection log-buffer logs 1024 interval 10:設定日誌記錄的頻率和數量。int g1/0/x:進入特定介面的組態模式。ip arp inspection trust:將指定埠設定為信任埠,停用 DAI。ip arp inspection limit 10:調整 ARP 檢測的速率限制。
高速網路環境下的封包擷取效能考量
在高速網路環境中,封包擷取可能會對主機效能造成影響。以下是一些最佳化建議:
- 確保網路卡足夠快速以捕捉目標封包。
- 檢查網路卡的上游頻寬是否足夠。
- 使用足夠快速的儲存裝置,如 NVME SSD。
- 調整 ring buffer 的大小,以避免封包遺失。
- 調整
snaplen的值,以減少捕捉的資料量。
tcpdump 調整 ring buffer 大小範例
tcpdump -B 1024 ...
內容解密:
tcpdump:用於捕捉網路封包的工具。-B 1024:將 ring buffer 的大小設定為 1024 KB。
網路封包捕捉與分析工具
在進行網路安全測試或排錯時,網路封包捕捉與分析是非常重要的步驟。封包捕捉工具可以幫助我們捕捉網路上的封包,並對其進行分析,以瞭解網路的運作情況或找出潛在的安全問題。
封包捕捉工具
有多種工具可以用於捕捉網路上的封包,並對其進行分析或儲存為pcap檔案。以下是幾種常見的封包捕捉工具:
tcpdump
tcpdump是一種命令列封包捕捉工具,適合用於沒有圖形介面或透過SSH連線的系統。它使用Berkely Packet Filter(BPF)語法來篩選要捕捉的封包。
內容解密:
- BPF語法:tcpdump使用BPF語法來定義捕捉哪些封包,可以根據IP位址、MAC位址、協定或TCP封包中的特定旗標進行篩選。
- 高效能與低影響:由於tcpdump不需要處理圖形介面,也不會對封包進行預處理,因此它是一種高效能、低系統資源佔用的工具。
Wireshark
Wireshark是一種圖形介面的封包捕捉與分析工具,可以對捕捉的封包進行詳細分析,並提供豐富的資訊。它同樣使用BPF語法來篩選捕捉的封包,但顯示篩選時使用不同的語法。
內容解密:
- 圖形介面:Wireshark提供圖形介面,使得使用者可以更直觀地檢視和分析封包。
- 豐富的資訊顯示:Wireshark對每個封包進行分類別、著色,並提供盡可能多的資訊。
- 篩選功能:Wireshark在捕捉和顯示封包時都提供了篩選功能,方便使用者聚焦於感興趣的封包。
TShark
TShark是與Wireshark一起封裝的命令列工具,提供了類別似Wireshark的功能,但適用於命令列環境。它在需要更靈活的命令列操作時非常有用。
內容解密:
- 命令列版本:TShark是Wireshark的命令列版本,適合在SSH會話中使用。
- 靈活性:TShark提供了比tcpdump更靈活的選項,適合需要更多功能的場景。
其他PCAP工具
除了上述工具外,還有許多其他工具可用於捕捉和分析封包,如Ettercap、Bettercap、dsniff和NetworkMiner等。這些工具各有其特點和用途,可以根據具體需求選擇合適的工具。
內容解密:
- 多樣化的工具選擇:有多種工具可用於不同的場景和需求。
- 特定用途:如NetworkMiner可以用於從pcap檔案中提取有價值的工件,如憑證、憑證雜湊、憑證和傳輸的資料檔案。
篩選捕捉的流量
在使用封包捕捉工具時,通常會遇到大量的封包資料。為了有效地進行分析和排錯,需要對捕捉的流量進行篩選。
Wireshark捕捉篩選器
Wireshark允許使用者在捕捉封包之前設定篩選器,以限制捕捉的封包範圍。例如,可以排除自己的IP位址和ARP封包。
內容解密:
- 預先篩選:在開始捕捉之前設定篩選條件,可以減少不必要的資料量。
- 範例:排除自己的IP位址和ARP封包,可以幫助專注於其他網路流量。
tcpdump捕捉篩選器 – VoIP手機和DHCP
tcpdump同樣支援使用BPF語法進行捕捉篩選。可以根據特定的需求,如觀察VoIP手機的啟動過程或DHCP請求,設定適當的篩選條件。
內容解密:
- 特定場景分析:透過設定特定的篩選條件,可以對特定的網路行為或裝置進行深入分析。
- 範例:觀察VoIP手機的啟動過程,可以幫助瞭解其網路行為和協定互動。
Linux 中的封包擷取與分析
在 VoIP 電話的啟動和通訊過程中,涉及的多個網路層級的資訊總結如下表所示: 從左到右依序對應到 ISO 模型的不同層級:應用層的分機號碼、第四層的 IP 位址、第二層的 MAC 位址和 VLAN,以及實體介面。
首先,我們使用 tcpdump 在 DHCP 伺服器上捕捉 DHCP 封包序列。由於 DHCP 伺服器是 DHCP 通訊的一端,因此如果一切正常,它應該能看到雙向的所有封包。
使用 tcpdump 的好處是它不依賴任何圖形介面,即使透過 SSH 連線也能正常運作。tcpdump 幾乎在所有 Linux 發行版中都預設安裝,並且可以在大多數防火牆、路由器和交換器上呼叫。
使用 tcpdump 捕捉封包
因為來源主機尚未取得 IP 位址,我們需要根據電話機的 MAC 位址和 DHCP 使用的兩個 UDP 連線埠(67/udp 和 68/udp)來指定流量。 首先,列出可用的網路介面以正確指定來源:
$ tcpdump -D
1. ens33 [Up, Running]
2. lo [Up, Running, Loopback]
3. any (Pseudo-device that captures on all interfaces) [Up, Running]
4. bluetooth-monitor (Bluetooth Linux Monitor) [none]
5. nflog (Linux netfilter log (NFLOG) interface) [none]
6. nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
7. bluetooth0 (Bluetooth adapter number 0) [none]
內容解密:
tcpdump -D:列出系統中所有可用的網路介面。ens33、lo等介面:顯示目前系統中的網路介面及其狀態。-D引數:用於列出可用的網路介面,以便選擇正確的介面進行封包捕捉。
接下來,開始捕捉封包:
$ sudo tcpdump -s0 -l -i ens33 udp portrange 67-68
內容解密:
sudo tcpdump:使用管理員許可權執行tcpdump,以便擷取網路封包。-s0:設定捕捉封包的最大大小為 0,表示捕捉完整封包。-l:使輸出變為行快取模式,便於即時檢視捕捉結果。-i ens33:指定從ens33網路介面捕捉封包。udp portrange 67-68:僅捕捉 UDP 連線埠 67 和 68 的封包,對應於 DHCP 協定。
輸出結果顯示了 DHCP 交換過程中的前幾個封包。為了將捕捉結果寫入檔案,使用 -w 引數:
$ sudo tcpdump -s0 -l -i ens33 udp portrange 67-68 -w DHCPDora-Phone.pcap
內容解密:
-w DHCPDora-Phone.pcap:將捕捉到的封包寫入名為DHCPDora-Phone.pcap的檔案中,以便稍後分析。
設定 SPAN 連線埠進行封包捕捉
如果無法直接存取 DHCP 伺服器,或 DHCP 運作不正常,可以設定 SPAN(Switched Port Analyzer)連線埠,也稱為監控或映象連線埠,將目標主機的流量映象到指定的監控連線埠。
在 Cisco 交換器上設定範例:
monitor session 1 source interface Gi1/0/1
monitor session 1 destination interface Gi1/0/5
內容解密:
monitor session 1 source interface Gi1/0/1:將連線埠Gi1/0/1設定為來源介面,即被監控的目標。monitor session 1 destination interface Gi1/0/5:將連線埠Gi1/0/5設定為目標介面,用於接收來自來源介面的映象流量。
使用 Wireshark 分析捕捉到的封包
Wireshark 提供了圖形化介面,能夠語法檢查篩選條件,並以圖形方式顯示網路封包。
設定 Wireshark 的捕捉篩選條件
在 Wireshark 中設定的篩選條件語法與 tcpdump 一致,使用 BPF(Berkeley Packet Filter)語法。例如:
udp portrange 67-68 and ether host 80:5e:c0:57:bc:91
內容解密:
udp portrange 67-68:篩選 UDP 連線埠範圍為 67 至 68 的封包,即 DHCP 流量。ether host 80:5e:c0:57:bc:91:僅捕捉 MAC 位址為80:5e:c0:57:bc:91的裝置所傳送或接收的封包。
檢視 DHCP “DORA” 程式
透過 Wireshark,可以觀察到完整的 DHCP “DORA”(Discover, Offer, Request, Acknowledgment)程式。
展開 DHCP 部分,可以檢視詳細的診斷資訊和選項欄位,例如 “Parameter Request List”。
圖表說明:DHCP DORA 程式
此圖示展示了完整的 DHCP “DORA” 程式,分別對應到 Discover、Offer、Request 和 Acknowledgment 四個階段。
圖表內容說明:
- Discover:客戶端發出的 DHCP 探索請求。
- Offer:伺服器回應的 IP 位址提供。
- Request:客戶端請求指定的 IP 位址。
- Acknowledgment:伺服器確認客戶端的 IP 位址分配。
圖表示範程式碼(Plantuml)
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Linux網路封包捕捉與分析技術
package "網路架構" {
package "應用層" {
component [HTTP/HTTPS] as http
component [WebSocket] as ws
component [gRPC] as grpc
}
package "傳輸層" {
component [TCP] as tcp
component [UDP] as udp
component [TLS/SSL] as tls
}
package "網路層" {
component [IP] as ip
component [ICMP] as icmp
component [路由協議] as routing
}
package "鏈路層" {
component [Ethernet] as eth
component [WiFi] as wifi
component [ARP] as arp
}
}
http --> tcp
ws --> tcp
grpc --> tcp
tcp --> tls : 加密
tls --> ip
udp --> ip
ip --> routing
routing --> eth
routing --> wifi
eth --> arp
@enduml