User Tools

Site Tools


mikrotik:sniffer

Sniffer su ROS

Per sniffare il traffico su ROS usiamo principalmente la funzione /tool/sniffer che ha un sacco di usi possibili. Possiamo sniffare in tempo reale con output (limitato) a video, oppure sniffare salvando in un buffer in RAM oppure in un file (compatibile con Wireshark) oppure ancora possiamo mandare i pacchetti via UDP a una macchina remota per essere visualizzati in realtime con Wireshark.

In ogni caso c'è un limite: non possiamo aprire due sessioni assieme, cioè non possiamo, per esempio, lanciare due sniffer distinti in due finestre uno che sniffa la ether1 e l'altro che sniffa la ether2. Questo qualche volta rende non banale l'analisi di certi problemi. Forse c'è un modo furbo per farlo, ma io su Linux ho sempre lanciato enne volte wireshark assieme senza problemi, qui devo imparare come si può aggirare il limite.

Per gli amanti dell'interfaccia grafica, le funzioni dello sniffer sono sotto il menù "Tools / Packet Sniffer". Notare che la funzione "quick" non credo che sia disponibile in questa modalità.

Sniffer quick (in tempo reale)

Per sniffare il traffico in tempo reale possiamo usare /tool/sniffer/quick con una serie di parametri che definiscono cosa visualizzare e come. Si può filtrare per indirizzo, porte, interfacce, ecc. Il numero di righe visualizzato è basso ma possiamo alzarlo con rows=80. Le colonne sono sempre troppo poche, allargate per quanto possibile la finestra della console per vederne di più.

Sniffer con salvataggio in RAM o su file

Possiamo sniffare il traffico e salvare i dati in RAM e/o su un file per poter poi esportare il tutto e per esempio aprirlo con Wireshark (il formato è il medesimo). Per usare questa funzione forse è più comoda l'interfaccia grafica perché possiamo vedere al volo tutti i parametri impostati, quali filtri, dimensione massima del buffer in RAM, dimensione massima del file (occhio a non riempire il disco), ecc. In ogni caso in command line abbiamo tutti i comandi necessari, dei quali riporto un piccolissimo esempio qui sotto:

  • Per vedere le impostazioni attuali: /tool/sniffer/print
  • Per lanciare una sessione: /tool/sniffer/start interface=ether1
  • Per fermare una sessione: /tool/sniffer/stop
  • Per salvare il buffer in RAM su file: tool/sniffer/save file-name=/flash/test.pcap

Sniffer con trasmissione in tempo reale verso un host remoto

Questo è un trucco che amo perché mi permette di usare wireshark in tempo reale. In pratica lo sniffer applica il filtro che gli imposti localmente (se lo imposti) e manda il traffico dopo il filtro a un host remoto che lo riceve e analizza in tempo reale.

  • Lato Mikrotik definiamo una configurazione per la cattura e avviamo la cattura. In questo esempio mando i dati al mio pc che è 172.31.255.29. Notare che se voglio sniffare sulla stessa interfaccia dalla quale parlo con il mio PC, dovrò applicare dei filtri per non "vedere" anche il traffico UDP che viene dal Mikrotik e va verso il mio PC. In questo esempio non è così, io sniffo la WAN (ether1) e parlo con il mio PC in LAN (ether2).
/tool/sniffer
set streaming-server=172.31.255.29
set streaming-enabled=yes 
set filter-interface=ether1
start
  • Lato PC lanciamo Wireshark (anche non da root, sto raccogliendo dati che entrano su una porta non privilegiata) dicendogli che voglio usare l'interfaccia "udpdump" con il formato "ztsp". È importante altrimenti vedo i pacchetti così come mi arrivano, ovvero incapsulati in UDP e non "decapsulati". Ho cercato un modo per impostare wireshark da command line per questo tipo di cattura ma non ci sono riuscito, per cui dovrete usare l'interfaccia grafica per farlo. Come potete vedere, dovete:
  • Selezionare l'interfaccia "udpdump" (se non l'avete, avete wireshark compilato senza delle funzioni)
  • Cliccare l'ingranaggio a sinistra (indicato dalla enorme freccia rossa)
  • Nella finestra che si apre dobbiamo impostare la porta (37008 è il default del Mikrotik, e potete vedere quale sia questo default usando il comando /tool/sniffer/print sul Mikrotik)
  • E soprattutto dobbiamo impostare il formato tzsp (non c'è un drop-down, va scritto a mano senza sbagliarsi)

Se va tutto bene, vedremo su Wireshark il traffico "come se fosse locale" cioè vedremo il traffico già "decapsulato", anche se guardando i dettagli dei pacchetti vedremo che sono in realtà incapsulati.

Statistiche

Durante lo sniffamento, o anche dopo la fine del medesimo (fino a che non ne iniziamo un altro) possiamo vedere delle statistiche divise per:

  • Connessioni /tool/sniffer/connection/print
  • Host /tool/sniffer/host/print
  • Pacchetti (questo non ho capito bene che utilità abbia) /tool/sniffer/packet/print
  • Protocolli /tool/sniffer/protocol/print

Ci sono una marea di opzioni per questi comandi, per scegliere cosa e come vedere, ed esiste anche il comando find per applicare un filtro. Se volete approfondire, cosa che dovrò fare anche io più avanti, giocateci un poco.

Sniffare dalle regole di firewall

Nel firewall è possibile creare delle regole nella sezione "Mangle" che hanno come Action "Sniff TZSP". In questo modo possiamo creare una configurazione che, senza bisogno di sniffare tutto quanto, manda i pacchetti direttamente dal firewall verso il nostro Wireshark in tempo reale.

Limiti dello sniffer

Lo sniffer non "sente" tutto il traffico. Ci sono casi nei quali il traffico non attraversa la CPU del Mikrotik e in questi casi non viene sniffato. Alcuni casi sono:

  • Il traffico che passa per il fasttrack
  • Il traffico che passa fra due client WIFI se è abilitata l'opzione per consentire il traffico fra i client (di fatto è un offload e il traffico non passa per il kernel)
  • Il traffico che passa per qualsiasi tipo di offload hardware (switch, bridge, ecc)

In alcuni casi è possibile, anche temporaneamente, disabilitare l'offload per permettere di sniffare. In altri casi può essere impossibile perché si affogherebbe la CPU.

mikrotik/sniffer.txt · Last modified: by kurgan