NetFlow

NetFlow, utvecklat av Cisco 1996, är ledande inom ”network accounting” och hjälper till att svara på frågorna – ”Vem, vad, var, när och hur?” när det kommer till IP-trafikflöden inom ett nätverk. Till vad brukar då NetFlow användas till i dagsläget? Några vanliga exempel på användningsområden är:

  • Bevaka Internet-access (protokoll distribuering, var & till vem trafiken går)
  • Användarbevakning (vem gör vad)
  • Applikationsövervakning
  • Interndebitering mellan avdelningar
  • Säkerhetsövervakning (likt en IDS) mot exempelvis DoS-attacker
  • Kapacitetsbevakning/planering

Innan NetFlow introducerades med tillhörande verktyg för analys användes främst SNMP för att bevaka exempelvis bandbreddsutnyttjande, detta utlämnade dock ingen information om vad det var för typ av data som skickades och från/till vem. Detta är något som blivit allt mer viktigt för att bättre kunna optimera nätverket via exempelvis Quality of Service.

Vad definierar då ett ”Flow”? Paketen ska ha identisk information inom följande parametrar för att ses som att tillhöra samma trafikflöde:

  • Source IP-adress
  • Destination IP-adress
  • Source Port
  • Destination Port
  • Layer 3 Protocol type
  • TOS byte (DSCP)
  • Input logical interface (ifIndex)

NetFlow klarar av att analysera IP-trafik som passerar de interface vi aktiverat och stödjer både CEF & FastSwitching. Ciscos Catalyst 6500 & 7600 serie har NetFlow aktiverat per default. Nyare versioner av NetFlow (v9) kan även hantera Multicast-, MPLS- och IPv6-flöden.

Trafikflödet sparas i NetFlow cache lokalt på enheten och timar per default ut efter 15 sekunder vid inaktivitet (30min för aktiva flöden) eller efter att routern uppfattat ett TCP RST/FIN-paket för strömmen. Informationen exporteras sedan vidare till en ”Collector”, vilket oftast är en dedikerad server som i sin tur sparar informationen i databaser och presenterar all tänkbar info via ett grafiskt gränssnitt, ex. PRTG Network Monitor.

Information samlas in enligt följande:

  1. Ett trafikflöde identifieras och lagras lokalt i NetFlow cache
  2. Trafikflödet timar ut på den lokala enheten
  3. Eventuell aggregering utförs (NetFlow version 8/9)
  4. Informationen exporteras till Collectorn

Export-paketet skickas via UDP eller SCTP och innehåller cirka 20-50st ”flow records” på maximalt 1500 byte. NetFlow ger även möjligheten att göra enklare diagnostik direkt på enheten där NetFlow aktiverats utan att implementera en Collector. Informationen om respektive Flow tas då helt enkelt bara bort när trafikflödet timat ut från NetFlow cache.

Aktiveras funktionen ”Top talkers” ges dock möjligheten att spara ner aggregerad information direkt på den lokala enheten om exempelvis de IP-adresser eller protokoll som använt sig av mest bandbredd. Detta kan vara mycket användbart vid exempelvis felsökning. Sedan 1996 har flera förbättringar införts i protokollet och NetFlow är idag uppe i version 9.

  • Version 5 – Standardversionen av nuvarande NetFlow och den mest använda i dagsläget
  • Version 7 – Specifik för Catalyst 6500 & 7600, likt Version 5 men saknar BGP AS, Interface, TCP Flaggor och ToS information
  • Version 9 – Stöd för Flexible NetFlow, Extensible File Export Format, IPv6, BGP Next-Hop och MPLS

Version 9 är lite av en milstolpe inom NetFlow då det är den första versionen som likt BGP ger möjligheten att dynamiskt kunna lägga till ny information för exportering. I tidigare versioner har det krävts att Cisco tagit fram en ny version av NetFlow för varje tillägg.

Då NetFlow är Cisco proprietär har IETF tagit fram en egen variant, ”IP Flow Information eXport” / IPFIX, vilket lånar de bästa lösningarna från NetFlow version 9 som sedan andra tillverkare kan ta del av, ett annat alternativ är sFlow som även det börjar bli populärt.

Implementering

Topologi

netflow

För att demonstrera en enklare implementering av NetFlow har ovanstående topologi använts. Tre routrar och en extern server som agerar Collector med programvaran PRTG Network Monitor.

RIPv2 valdes som routing-protokoll på grund av dess periodiska uppdateringar vilket justerats ner till var 10:e sekund för att generera mer trafik.

NetFlow bör endast aktiveras på R2s interface då trafik från R1 & R3 ändå måste passera via dessa. Att aktivera NetFlow även på R1 & R3 i detta fall är överflödigt och hade endast infört onödig belastning på nätet.

Konfigurering

Specificera först vad NetFlow skall samla in utöver protokollinformation från Layer 2/3-headers via kommandot ip flow-capture.

ip flow-capture packet-length
ip flow-capture ttl
ip flow-capture vlan-id
ip flow-capture ip-id
ip flow-capture mac-addresses

Konfigurera sedan exportering till Collectorn samt vilken version av NetFlow som skall användas.

ip flow-export version 9
ip flow-export destination 10.0.24.2 9996
ip flow-export source 10.0.24.1

Om default-inställningarna för NetFlows cache önskas justeras används följande kommandon:

ip flow-cache entries 1024
ip flow-cache timeout inactive 30
ip flow-cache timeout active 15

Detta kan vara mycket användbart om vi vill vara restriktiva med hur mycket resurser NetFlow får använda sig av i den lokala routern.

Aktivera sedan NetFlow för önskade interface.

interface FastEthernet0/0.12
 ip flow ingress
 ip flow egress

 interface FastEthernet0/1.23
 ip flow ingress
 ip flow egress

Observera dock att ip flow egress endast stöds i NetFlow version 9. Enheten samlar nu information och exporterar till Collectorn med IP-adressen 10.0.24.2 på UDP-porten 9996.

Verifiering kan göras via kommandot ”show ip flow export”. För att granska data som finns lagrad i NetFlow cache används kommandot ”show ip cache flow”, alternativt ”show ip cache verbose flow” för mer detaljerad information.

R2#show ip cache flow
IP packet size distribution (2164 total packets):
 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480
 .000 .198 .000 .755 .000 .000 .000 .000 .000 .000 .000 .000 .004 .000 .000
512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
 .000 .000 .039 .000 .000 .000 .000 .000 .000 .000 .000

IP Flow Switching Cache, 69636 bytes
 10 active, 1014 inactive, 12 added
 708 ager polls, 0 flow alloc failures
 Active flows timeout in 15 minutes
 Inactive flows timeout in 30 seconds

IP Sub Flow Cache, 5896 bytes
 30 active, 226 inactive, 36 added, 12 added to flow
 0 alloc failures, 0 force free
 1 chunk, 1 chunk added
 last clearing of statistics never

Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)
-------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow
TCP-Telnet 2 0.0 1 44 0.0 0.0 30.2
Total: 2 0.0 1 44 0.0 0.0 30.2

SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
Fa0/0.12 1.1.1.1 Fa0/1.23* 3.3.3.3 06 0017 6E0A 96
Fa0/0.12 1.1.1.1 Fa0/1.23 3.3.3.3 06 0017 6E0A 97
Fa0/1.23 10.0.23.3 Null 224.0.0.9 11 0208 0208 22
Fa0/0.12 1.1.1.1 Fa0/1.23 3.3.3.3 01 0000 0800 468
Fa0/0.12 1.1.1.1 Fa0/1.23* 3.3.3.3 01 0000 0800 468
Fa0/1.23 3.3.3.3 Fa0/0.12 1.1.1.1 01 0000 0000 467
Fa0/1.23 3.3.3.3 Fa0/0.12* 1.1.1.1 01 0000 0000 467
Fa0/1.23 3.3.3.3 Fa0/0.12* 1.1.1.1 06 6E0A 0017 159
Fa0/1.23 3.3.3.3 Fa0/0.12 1.1.1.1 06 6E0A 0017 159
Fa0/0.12 10.0.12.1 Null 224.0.0.9 11 0208 0208 21

Verbose:

R2#show ip cache verbose flow
IP packet size distribution (4378 total packets):
 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480
 .000 .145 .000 .818 .000 .000 .000 .000 .000 .000 .000 .000 .003 .000 .000
512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
 .000 .000 .031 .000 .000 .000 .000 .000 .000 .000 .000

IP Flow Switching Cache, 69636 bytes
 10 active, 1014 inactive, 12 added
 1018 ager polls, 0 flow alloc failures
 Active flows timeout in 15 minutes
 Inactive flows timeout in 30 seconds

IP Sub Flow Cache, 5896 bytes
 30 active, 226 inactive, 36 added, 12 added to flow
 0 alloc failures, 0 force free
 1 chunk, 1 chunk added
 last clearing of statistics never

Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)
-------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow
TCP-Telnet 2 0.0 1 44 0.0 0.0 30.2
Total: 2 0.0 1 44 0.0 0.0 30.2

SrcIf SrcIPaddress DstIf DstIPaddress Pr TOS Flgs Pkts
Port Msk AS Port Msk AS NextHop B/Pk Active
Fa0/0.12 1.1.1.1 Fa0/1.23* 3.3.3.3 06 00 18 140
0017 /8 0 6E0A /8 0 10.0.23.3 336 74.4
FFlags: 01
MAC: (VLAN id) c200.0fe0.0000 (012) c202.0fe0.0001 (023)
Min plen: 40 Max plen: 576
Min TTL: 255 Max TTL: 255
IP id: 64850

Fa0/0.12 1.1.1.1 Fa0/1.23 3.3.3.3 06 00 18 140
0017 /8 0 6E0A /8 0 10.0.23.3 336 74.4
MAC: (VLAN id) c200.0fe0.0000 (012) c202.0fe0.0001 (023)
Min plen: 40 Max plen: 576
Min TTL: 255 Max TTL: 255
IP id: 64850
Fa0/1.23 10.0.23.3 Null 224.0.0.9 11 C0 10 25
0208 /24 0 0208 /24 0 0.0.0.0 52 207.3
MAC: (VLAN id) c202.0fe0.0001 (023) 0000.0000.0000 (000)
Min plen: 52 Max plen: 52
Min TTL: 2 Max TTL: 2
IP id: 0

SrcIf SrcIPaddress DstIf DstIPaddress Pr TOS Flgs Pkts
Port Msk AS Port Msk AS NextHop B/Pk Active
Fa0/0.12 1.1.1.1 Fa0/1.23 3.3.3.3 01 00 10 958
0000 /8 0 0800 /8 0 10.0.23.3 100 63.8
MAC: (VLAN id) c200.0fe0.0000 (012) c202.0fe0.0001 (023)
Min plen: 100 Max plen: 100
Min TTL: 255 Max TTL: 255
IP id: 0
..............

Collectors

prtg

För att analysera all NetFlow-information på ett enkelt sätt finns ett stort antal verktyg att använda, både kommersiella och gratisprodukter. Programvaran Scrutinizer inkluderar exempelvis även IPS/IDS-funktionalitet då den matchar NetFlow-informationen mot kända attackmönster & virus och kan sedan automatiskt skicka ut exempelvis uppdaterade access-listor, policy-förändringar eller inaktivera interface i såväl routrar som switchar och brandväggar för att stoppa detta.

Top-Talkers

Top-Talkers ger som tidigare nämnt möjligheten att vid felsökning snabbt ge administratören möjligheter att upptäcka exempelvis Denial of Service-attacker eller vilken användare/applikation som använder onormalt mycket bandbredd även utan att ha en Collector. Konfigurationen är väldigt enkel om NetFlow redan finns implementerat och består endast av:

ip flow-top-talkers
    top 10
    sort-by packets

Bestäm sedan vilken information som NetFlow skall använda sig av via ”match”:

R2(config-flow-top-talkers)#match ?
  byte-range        Match a range of bytes
  class-map         Match a class
  destination       Match destination criteria
  direction         Match direction
  flow-sampler      Match a flow sampler
  input-interface   Match input interface
  nexthop-address   Match next hop
  output-interface  Match output interface
  packet-range      Match a range of packets
  protocol          Match protocol
  source            Match source criteria
  tos               Match TOS

Kontrollera sedan resultat via ”show ip flow top-talkers” eller ”show ip flow top-talkers verbose”. Följande exempel använder sig av ”match protocol 1” för att lista vilka enheter som skickat mest ICMP-paket I nätet:

R2#show ip flow top-talkers
SrcIf         SrcIPaddress    DstIf         DstIPaddress    Pr SrcP DstP  Pkts
Fa0/0.12      1.1.1.1         Fa0/1.23      3.3.3.3         01 0000 0800   100
Fa0/1.23      3.3.3.3         Fa0/0.12      1.1.1.1         01 0000 0000   100
Fa0/1.23      10.0.23.3       Fa0/0.12      1.1.1.1         01 0000 0800    10
Fa0/0.12      1.1.1.1         Fa0/1.23      10.0.23.3       01 0000 0000    10
Fa0/0.12      1.1.1.1         Local         2.2.2.2         01 0000 0000     5

Det var allt jag hade om NetFlow! Går och tvekar mellan att göra en satsning mot CCNP Security eller fortsätta med CCIE-studierna efter jag tagit CCDA-certet inom kort. Har lite jobberbjudanden på gång och tror det får bestämma vilken väg det blir istället då inriktningarna skiljer sig lite (Nätverkskonsult / Nätdriftsingenjör). 🙂

1 reaktion på ”NetFlow

Lämna ett svar

Din e-postadress kommer inte publiceras.