“Diagnose sniffer packet” op een FortiGate

Inleiding
Het commando “diagnose sniffer packet” is een zeer uitgebreid diagnose commando, op de commandline van een Fortigate. Dit commando wordt gebruikt om verkeersanalyses te maken. Via de web interface is er ook een “Packet sniffer” optie beschikbaar, maar die is niet zo uitgebreid als het “diagnose sniffer packet” commando. Zo kan het “diagnose sniffer packet” commando meerdere filters (en veel uitgebreidere) toepassen, in één keer.

Hoe ga je te werk?

Voordat je begint…
Standaard accelereert een Fortigate alle data met behulp van de NPU/NP2/NP6 processoren. Deze processoren werken onafhankelijk van de CPU en zorgen ervoor dat het verkeer sneller afgehandeld wordt. De enige pakketten die je standaard in een packet capture ziet, zijn de niet versnelde pakketten.

Een packet capture zal dus alleen het volgende laten zien:
• TCP (SYN/ACK/FIN)
• Onbekend UDP verkeer
• Ping/ bepaalde ICMP types
• ARP verkeer
• Broadcast verkeer

Als je wél al het verkeer wilt inzien, kun je specifiek verkeer van een IPv4 policy regel uitsluiten van de NPU processor. Dit kan via het volgende commando:

config firewall policy
edit (policy id)
set auto-asic-offload disable
next
end

Bedenk wel dat niet geaccelereerd verkeer langzamer is en druk op de CPU zet. Als het veel verkeer is (> 100Mbit/s), is het verstandig om dit in een onderhoudsvenster te doen.

Er is een andere mogelijkheid om al het verkeer uit te sluiten van de NPU processor. Dit commando is afhankelijk van uw Fortigate model/software versie en valt terug te vinden in de Knowledgebase van Fortinet.

Het diagnose commando
Het “Diagnose sniffer packet” commando wordt als volgt opgebouwd:

diagnose sniffer packet [interface] [filter] [verbose]

Als de Fortigate VDOMs gebruikt, moet dit commando onder dat VDOM uitgevoerd worden.

Argument [Interface] spreekt voor zich: hier voert u de Interface naam in van waar u verkeer wilt afvangen.
Argument [filter] zullen we verderop bespreken.
Argument [verbose] bepaalt van hoeveel informatie je wordt voorzien. Onderstaand een tabel met de nummers en wat het betekent:

1: Laat alleen de header van de pakketten zien
2: Laat header en data zien van IP pakketten
3: Laat header en data zien van ethernet pakketten (wanneer mogelijk)
4: Laat alleen de header van de pakketten zien met interface naam
5: Laat header en data zien van IP pakketten met interface naam
6: Laat header en data zien van ethernet pakketten met interface naam (wanneer mogelijk)
Als u bijvoorbeeld al het verkeer door de firewall van host 192.168.1.10 wilt zien, met de Interface naam, doet u dit als volgt:

diagnose sniffer packet any “host 192.168.1.10” 3

Uitgebreid filteren
Er kan ook uitgebreid gefilterd worden met vele argumenten.

ArgumentBetekenis
host 1.1.1.1Filteren op IP adres
src host 1.1.1.1Filteren op Source IP adres
dst host 2.1.1.1Filteren op Destination IP adres
src port 20000Filteren op Source poort (1 tot 65535)
src portrange 20000-40000Filteren op Source poort tange (startpoort-eindpoort)
dst port 3389Filteren op Destination poort (1 tot 65535)
dst portrange 67-68Filteren op Destination poort tange (startpoort-eindpoort)
net 1.1.1.0/24Filteren op subnet. Invullen met netwerk adres met class
tcpFilteren op TCP pakketten
udpFilteren op UDP paketten
icmpFilteren op al het ICMP (ping,traceroute) verkeer
arpFilteren op ARP verkeer
broadcastFilteren op Broadcast verkeer
multicastFilteren op Multicast verkeer
ether host aa:bb:cc:11:22:33ether host aa:bb:cc:11:22:33

Met “AND” of “OR” (“&&” of “||” ) kunnen meerdere argumenten gekoppeld worden.

diagnose sniffer packet any “host 192.168.1.10 or host 192.168.1.11” 3

Bij dit voorbeeld wordt al het verkeer van en naar 192.168.1.10 en 192.168.1.11 weergegeven.
Ook kan er uitsluiting gemaakt worden met “NOT” of “!”

diagnose sniffer packet any “net 192.168.1.0 and not host 192.168.1.11” 3

Deze filter laat al het verkeer van 192.168.1.0 zien, maar niet van 192.168.1.11.
Samen met Haak openen/sluiten kunnen twee argumenten samen gevoegd worden tot een uitgebreid filter

diagnose sniffer packet any “(src host 192.168.1.10 or src host 192.168.1.11) and (dst port 80 and tcp)” 3

Bovenstaand filter laat al het verkeer van 192.168.1.10 en 192.168.1.11 met poort TCP poort 80.
Er kan ook gefilterd worden op uitgebreide TCP flags of Pakket gegevens:

ArgumentBetekenis
tcp[tcpflags] == tcp-synFilteren op SYN pakketten
tcp[tcpflags] == tcp-ackFilteren op ACK pakketten
tcp[tcpflags] == tcp-rstFilteren op RST pakketten
tcp[tcpflags] == tcp-finFilteren op FIN pakketten

Er zijn nog vele andere filters te maken, die zelfs tot op bit niveau pakketten kunnen filteren. Deze Filters vallen te vinden in de handleiding van het commando “tcpdump” van Linux.

Vragen?

U kunt altijd contact met SolidBE opnemen mocht u een vraag hebben over een van de besproken onderwerpen (Configuratie, Firewall, TechTalk ) of wanneer u assistentie nodig heeft om netwerk- of security vraagstukken op te lossen. Wij helpen u graag bij de beheren van een veilige en solide ICT omgeving!

Auteur

Tom Scholten is Senior Network Engineer bij SolidBE

Scroll naar boven