技術文章 · 網路與網通建置

交換器埠鏡像(Port Mirror/SPAN)怎麼設?抓封包、接 IDS、排查流量

Port Mirroring/SPAN 可把指定 Port 或 VLAN 的流量複製給 Wireshark 或 IDS。整理來源、目的、方向、超額掉包、RSPAN 與驗證方式。

作者 Steve Chen · 發布  · 更新  · 約 9 分鐘閱讀

網路與網通建置 — 廷皓技術專欄插圖

Port Mirroring/SPAN 會把指定來源埠或 VLAN 的流量複製到分析埠,讓 Wireshark、IDS 或封包分析設備在不中斷原線路的情況下取證。設定前要先估流量,因為多個高速來源塞進單一目的埠時,鏡像封包仍可能掉包。

先搞懂:為什麼把筆電直接插上去,看不到別人的流量

這件事得從交換器怎麼運作講起,不然你會覺得埠鏡像很玄。早年集線器(Hub)的年代,任何一台電腦送出去的封包,整個網段的埠全都收得到,那時候想抓包很簡單,插上去開軟體就有。交換器完全是另一回事。它會去學習每一個埠後面接的是哪些 MAC 位址,記在一張表裡;之後單播封包進來,它只會轉送到目的地所在的那一個埠,其他埠連一個位元組都收不到。這正是交換器比集線器快、比較不會塞的根本原因,因為它不做無謂的廣播,但也因為這樣,「找一台筆電插進去看看別人在幹嘛」在交換器上根本行不通。

埠鏡像就是專門來補這個洞的。交換器內部負責轉發的是一顆 ASIC 晶片,它在把封包送往正常目的地的同一瞬間,順手多複製一份丟到你指定的那個埠,這個埠一般叫目的埠,或叫監控埠。重點在「同時」跟「多複製一份」這兩件事上:原本的流量走它該走的路,速度、路徑都不受影響,你只是在旁邊多接了一份拷貝。所以接筆電開分析軟體查協定、接 IDS 做入侵偵測、或單純想抓出哪台機器流量爆量,靠的都是這一招。遇到迴圈引發廣播風暴那種整個網段被灌爆、大家一起卡住的狀況,埠鏡像也常常是定位元凶的第一件工具。

設定其實就三件事:來源、方向、目的

不管你手上是哪個牌子的機器,設定的邏輯都跑不掉這三個欄位,把它們想清楚,設定就成一半了。

  • 來源(Source):你想看誰?可以是單一個埠,可以一次框好幾個埠,進階一點的機種還能直接指定整個 VLAN,把某個網段的流量全撈出來。
  • 方向(Direction):只看流進來的(rx/ingress)、只看送出去的(tx/egress)、還是進出都要(both)。這個欄位新手最容易忽略,等一下講到塞爆的時候,你就會知道它為什麼關鍵。
  • 目的(Destination):副本要送到哪個埠,也就是你的分析設備要插的位置。

以業界最常見的一種企業級交換器 CLI 語法為例,兩行就設完:先用 monitor session 1 source interface Gi1/0/1 both 指定來源埠跟方向,再用 monitor session 1 destination interface Gi1/0/2 指定目的埠,設完打一句 show monitor session 1 看一下狀態,確認真的生效。走 Web 管理介面的機種,這個功能多半藏在 Monitoring 或 Port Mirroring 的選單底下,位置各家韌體不太一樣,但來源、方向、目的這三格一定都在,找到就照填。

第一次設一定會被嚇到:目的埠會斷網

有個地雷幾乎每個人第一次踩都會愣一下:一個埠一旦被指定成鏡像目的埠,它通常就不再轉發一般流量了。也就是說,你把分析筆電插上去,它會「上不了網」,只收得到那份鏡像副本。這不是故障,是設計本來就這樣,目的埠的任務就是專心吐拷貝給你。所以千萬別把還有人在用的埠拿來當目的埠,不然對方會突然斷線,回頭來問你發生什麼事。如果你的分析筆電一邊抓包還一邊要上網查資料、翻手冊,就乖乖再拉一條線接到別的埠去上網,這條線專門收鏡像就好。

最容易誤判的一關:鏡像是「複製」不是「搬移」,目的埠會塞爆

這一段是整篇最想跟你講清楚的,很多人設完覺得沒報錯就等於成功,其實不然。先算一筆帳:一個 Gigabit 埠是全雙工,收跟送可以同時進行,各自都能跑到接近 1 Gbps,加起來瞬間流量上看 2 Gbps。你如果把方向設成 both、鏡到一個同樣是 1 Gbps 的目的埠,物理上就是塞不下,一條 1 Gbps 的管子,你硬要灌 2 Gbps 的水進去,多的那一半只能溢出來。

問題是交換器溢出來的處理方式很「安靜」。它會把裝不下的那些副本,在目的埠的送出緩衝區滿了之後,照先進先出的順序直接丟掉,不會跳警告、不會閃紅燈、log 裡也未必看得到。更麻煩的是,交換器天生會優先保障正常轉發,鏡像副本在它眼裡只是次要工作;一旦整台機器忙起來,它第一個犧牲的就是鏡像流量。結果就是你抓到的封包缺東缺西,偏偏畫面上又看起來一切正常,你拿著一份殘缺的資料在那邊下判斷、找兇手,這比根本沒抓到還危險,因為你會很有信心地找錯方向。

實務上怎麼閃這個坑,幾個做法先記著:

  • 來源埠多、或流量本來就大的時候,目的埠改用 10G 的上聯埠來收,管子夠粗就不容易溢。
  • 只鏡單一方向,先看進來的、或先看出去的,流量直接砍一半。
  • 把範圍縮小,一次只查一兩個埠,別貪心一次撈整個 VLAN。

另外提醒一句,鏡像本身會吃掉交換器的處理資源,入門等級的機種你同時開一堆來源,尖峰時段連正常轉發都可能被拖累。所以我自己的習慣是:要排查才開,session 開著查,查完立刻刪掉,不留在那邊長期吃資源。

SPAN 的先天盲區:壞掉的封包,你根本看不到

就算你把塞爆的問題都閃過了,埠鏡像還是有它先天摸不到的地方,這點很多人不知道,通常是吃過一次虧才懂。交換器收到 CRC 校驗錯誤的損壞幀、長度過短的碎幀(runt),會在轉發之前就直接丟棄,連進到轉發邏輯的資格都沒有,自然也輪不到被複製。這代表什麼?線材接頭氧化、水晶頭沒壓好、旁邊有大電流干擾這類實體層的毛病,症狀就藏在這些壞幀裡,可是你的鏡像流量裡看起來一片乾淨,完全找不到證據。你會誤以為線路很健康,其實它一直在默默掉封包。

還有一個更隱形的問題是時間。封包在交換器內部要排隊,等著被複製、被送出,這一排隊,封包跟封包之間原本的時間間隔就被打亂了。做過實測的資料顯示,鏡像流量的抖動(jitter)可以到好幾毫秒的等級;在 10G 這種高速鏈路上,毫秒級的誤差已經大到讓精確的時序分析形同做白工。你要是拿鏡像流量去查 VoIP 通話品質、即時交易延遲這種對時間敏感到骨子裡的應用,得到的數字很可能會騙你。

什麼時候 SPAN 不夠用,該認真上 TAP

要把上面那些盲區補起來,答案是網路分接器(TAP)。它的做法跟埠鏡像完全不同:TAP 是實體串在線路中間,用硬體把電或光的訊號原封不動分一份出來,根本不經過交換器的轉發邏輯。所以壞幀它照收、CRC 錯誤它照收、封包之間的時間間隔它一絲不差地保留下來,因為它不排隊,只是被動地把訊號分光。要注意的是,一條全雙工鏈路有收、送兩個方向,TAP 分出來通常是兩股,你的分析設備要嘛用兩張網卡分別收,要嘛前面再接一台會合(aggregation)的設備,把兩股併成一份,這是用 TAP 要多花的一點成本跟工。

那實際什麼時候用哪個?我的判斷準則其實很單純:臨時性的排查、查應用層跟協定層的問題、預算跟時間都緊,SPAN 又快又不用花錢,直接開下去;但只要碰到長期要接 IDS 做資安監控、線路流量本來就接近滿載、或者你已經懷疑問題出在實體層,這三種情況,才值得認真上 TAP。一句話總結:SPAN 是好用的臨時工,TAP 是可靠的常駐哨兵,各有各的舞台,別拿臨時工去站長期的哨。

跨交換器要集中看流量:RSPAN、ERSPAN 是另一個層次

前面講的都是同一台交換器上的事。如果你的來源埠跟分析設備分別在不同的交換器上,甚至隔了好幾層網路,本機的埠鏡像就搆不到了,這時候要用進階做法。RSPAN 的原理,是把鏡像流量灌進一個專用的 VLAN 裡,再透過 trunk 把這個 VLAN 拉到別台交換器上取出來,等於用一段 VLAN 當運輸管道,屬於第二層(L2)的技術,路徑上所有交換器都得認得這個 RSPAN VLAN 才行。ERSPAN 又更進一步,它把抓到的流量用 GRE 封裝起來,可以直接跨越第三層(L3)的路由邊界送到遠端,機房在不同棟、不同網段也送得到,只是這通常要比較高階的機種才支援。這兩種都比本機鏡像複雜,設定、資源占用、故障排除的難度都上一個台階,一般中小型網路用不太到,知道有這回事、真的需要時再回頭研究就好。

接 IDS 跟一個常被忽略的資安提醒

很多人架埠鏡像,是為了餵一台 IDS 做入侵偵測,這裡有兩個實務重點值得先講。第一,IDS 這種被動監控,放在鏡像或 TAP 的旁路上(out-of-band)是對的,它只看副本、不擋在正線上,就算它當機也不會害你的網路跟著斷掉,這是刻意的設計。剛上線的時候,建議先讓它跑純偵測、觀察一段時間,把你這個網路平常長什麼樣子摸清楚,再考慮要不要進一步做主動阻擋。第二,現在絕大多數流量都加密了,你可能會問那還看得到什麼?其實就算不解密,光是連線的時間戳、封包大小、流量方向跟行為模式,就足以讓分析引擎嗅出不對勁的地方,不見得非要拆開內容不可。

但也正因為看得到這麼多,最後這件事千萬別輕忽:鏡像流量裡,那些還沒加密的帳號密碼、信件內容,是明明白白攤在那份副本裡的。你目的埠接的那台設備、拉出去的那條線,等於是一個能看光內網的分接點。查完一定要把 session 刪掉,別讓一條誰都能接上去的線孤零零留在機櫃裡,那在資安上是個不折不扣的大破口。

對照指令

聯絡廷皓討論 看更多文章