
Fortinet - Netzwerkprobleme mit einer FortiGate analysieren
Fortinet
Netzwerke werden immer komplexer und unübersichtlicher. Deshalb braucht es Werkzeuge um Probleme zu analysieren und zu identifizieren.
Eine FortiGate Firewall bietet hier ein breites Spektrum an Werkzeugen. Ich möchte Ihnen heute ein paar vorstellen und erklären, wie man diese einsetzen kann.
Das einfachste Werkzeug ist natürlich der klassische Ping, welcher bei einer FortiGate über das CLI mit dem Befehl execute ping ausgeführt wird. Allerdings gibt es noch Möglichkeiten den Ping gezielter zu nutzen. Dafür nutzt man den Befehl execute ping-options <'parameter'>. Folgende Parameter können hier genutzt werden:
-
adaptive-ping
FortiGate sendet das nächste Paket, sobald die letzte Antwort empfangen wurde. - data-size <'bytes'> Geben Sie die Datagrammgröße in Bytes an.
- df-bit <'yes | no'> Setzen Sie df-bit auf yes, um zu verhindern, dass das ICMP-Paket fragmentiert wird. Setzen Sie df-bit auf no, um die Fragmentierung des ICMP-Pakets zuzulassen.
- pattern <'2-byte_hex'> Wird verwendet, um den optionalen Datenpuffer am Ende des ICMP-Pakets aufzufüllen. Die Größe des Puffers wird mit dem Parameter data_size angegeben. Damit können Sie Pakete unterschiedlicher Größe aussenden, um die Auswirkung der Paketgröße auf die Verbindung zu testen.
- repeat-count <'repeats'> Geben Sie an, wie oft der Ping wiederholt werden soll.
- Source {auto | <'source-intf_ip'>} Geben Sie die FortiGate-Schnittstelle an, von der der Ping gesendet werden soll. Wenn Sie auto angeben, wählt die FortiGate-Einheit die Quelladresse und -schnittstelle basierend auf der Route zum <'host-name_str'> oder <'host_ip'>. Die Angabe der IP-Adresse einer FortiGate-Schnittstelle wird verwendet, um Verbindungen zu verschiedenen Netzwerksegmenten von der angegebenen Schnittstelle aus zu testen.
- timeout <'seconds'> Geben Sie in Sekunden an, wie lange gewartet werden soll, bis die Ping-Zeit abgelaufen ist.
- tos <'service_type'> Legen Sie das ToS-Feld (Type of Service) im Paketkopf fest, um einen Hinweis auf die gewünschte Servicequalität zu geben.
- lowdelay Verzögerung minimieren
- throughput Maximierung des Durchsatzes
- reliability Zuverlässigkeit maximieren
- lowcost Kosten minimieren
-
ttl
Geben Sie die Time to live an. Time to live ist die Anzahl der Hops, die das Ping-Paket machen darf, bevor es verworfen oder zurückgeschickt wird. - validate-reply {yes | no} Wählen Sie ja, um Antwortdaten zu validieren.
- view-settings Zeigt die aktuellen Einstellungen der Ping-Optionen an.
- reset Reset settings.
Dabei können Sie natürlich Optionen kombinieren um das gewünschte Ergebnis zu erhalten. Hier ein Beispiel:
Execute ping-options source 192.168.10.254 repeat-count 50
execute ping 10.10.10.234
Mit dieser Kombination würde ein Ping mit der Quelladdresse 192.168.10.254 und der Zieladresse 10.10.10.234 ausgeführt. Dabei würden 50 PING Pakete gesendet werden.
Wenn man herausfinden möchte welche Firewall-Regel in einem speziellen Fall Anwendung findet, kann man dies ebenfalls über das CLI herausfinden. Dazu wird folgender Befehl benutzt:
diag firewall iprope lookup <'src_ip'> <'src_port'> <'dst_ip'> <'dst_port'> <'protocol'> <'Source interface'>
- <'src_ip'> Quelladresse
- <'src_port'> Quellport
- <'dst_ip'> Zieladresse
- <'dst_port'> Zielport
- <'protocol'> Welches Protokoll soll simuliert werden, beispielsweise TCP oder UDP
- <'source interface'> Quell-Interface von dem aus die Anfrage simuliert werden soll
Wenn die Anfragen korrekt ausgeführt werden erhält man Ergebnisse wie beispielsweise diese:
FortiGate # diag firewall iprope lookup 10.187.1.100 12345 8.8.8.8 53 udp port2
FortiGate # diag firewall iprope lookup 10.187.1.100 12345 8.8.8.8 53 tcp port2
Bei der ersten Abfrage kommt als Ergebnis die Firewall-Richtlinie mit der ID 0. Dies wäre die Implicit-Deny Regel welche immer ganz unten steht und jeglichen Netzwerkverkehr blockt, welcher nicht in eine der vorhergehenden Regeln gepasst hat.
Bei der zweiten Abfrage erhalten wir das Ergebnis, dass die Firewall-Richtline mit der ID 2 zuständig ist. Damit kann sichergestellt werden, ob die korrekte Firewall-Regel Anwendung findet.
Was aber macht man, wenn alles scheinbar passt, aber es trotzdem nicht sauber läuft?
Dann muss man sich den Netzwerkverkehr direkt angucken. Dafür bietet die FortiGate mehrere Möglichkeiten. Über das WebGUI, oder das CLI.
Packet Capture über WebGUI
Über Network --> Packet Capture in dem FortiGate WebGUI können Sie mit Hilfe von ein paar Optionen schnell Daten für eine Analyse erzeugen.
- Wählen Sie das Interface auf dem die FortiGate die Daten sammeln soll.
- Die Anzahl der Pakete die gesammelt werden sollen, das Maximum sind 10.000.
Wenn Sie die Filter aktivieren, haben Sie noch folgende nützliche Optionen:
- Host(s) Geben Sie Adressen an, deren Daten gesammelt werden sollen. Sie können mit einem , mehrere Adressen eingeben. Beispiel: 192.168.10.254, 10.10.10.234
- Port(s) Hier können Sie wieder mit einem , getrennt mehrere Ports definieren. Beispiel: 443, 80
- VLAN(s) Wenn Sie in Ihrem Netzwerk mehrere VLANs auf einem Interface nutzen, können Sie gezielt die VLANs angeben. Beispiel: 1, 4096
- Protocol(s) Hier geben Sie die Nummern der Protokolle ein, welche Sie analysieren wollen. Die Nummern finden Sie in der offiziellen Dokumentation der IANA: IANA Protocol numbers
- Include IPv6 Packets Damit können Sie nicht nur IPv4 Pakete, sondern auch IPv6 Pakete aufzeichnen, sollten diese in Ihrem Netzwerk verwendet werden.
- Include Non-IP Packets Wenn Sie ARP, DHCP oder andere Protokolle aufzeichnen wollen, die nicht immer IPs verwenden, dann können Sie diese über diese Option aufzeichnen.
Speichern Sie die Auswahl. Diese ist dann unter Network -> Packet Capture auswählbar. Sie können die Aufzeichnung über das Rechtsklick Menü starten.
Wenn Sie die Aufzeichnung herunterladen, was auch geht während die Aufzeichnung noch läuft, erhalten Sie eine PCAP Datei welche Sie in einem Analysewerkzeug wie Wireshark öffnen und betrachten können.
Packet Sniffing über CLI
Über die Kommandozeile können Sie auch schnell und bequem gezielt Netzwerkverkehr beobachten.
Der Befehl baut sich wie folgt auf:
diag sniffer packet <'interface'> <'filter'> <'verbose'> <'count'> a
- <'interface'> Das Interface auf dem gelauscht werden soll. Hier wird der Name benötigt. Beispiel: wan1 oder WLAN-Gaeste. Bitte beachten Sie dass die Angabe Case-Sensitive ist. Wenn Sie ein Tunnel Interface namens WLAN-Gaeste haben wird wlan-gaeste nicht funktionieren.
- <'filter'> Der wohl komplexeste und mächtigste Parameter. Hier haben Sie mehrere Möglichkeiten die kombiniert werden können:
-
src|dst host
Angabe der Quell- oder Zieladresse. - arp|ip|gre|esp|udp|tcp Welche Protokolle überwacht werden sollen.
-
port
Welcher Port überwacht werden soll. - <'verbose'> Wie ausführlich die Pakete aufgezeichnet werden sollen:
- 1: Header von Paketen ausgeben.
- 2: Header und Daten von IP-Paketen ausgeben.
- 3: Header und Daten von Ethernet von Paketen ausgeben.
- 4: Header von Paketen mit Schnittstellennamen ausgeben.
- 5: Header und Daten aus IP von Paketen mit Schnittstellennamen ausgeben.
- 6: Header und Daten aus Ethernet von Paketen mit Schnittstellenname ausgeben.
-
Wie viele Pakete aufgezeichnet werden sollen. Wenn hier eine 0 eingegeben wird, wird dauerhaft aufgezeichnet. Die Aufzeichnung kann mit Strg+C beendet werden. - a Hier werden dann absolute Zeitstempel verwendet. Normalerweise wird die Zeit aufsteigend ab Start der Aufzeichnung in Sekunden angezeigt. Mit dem Parameter wird dann aktuelle Uhrzeit und Datum angezeigt.
Beispiel: diag sniffer packet internal 'host 192.168.0.130 and 192.168.0.1 and tcp port 80' 1
Hier wird dann nur Netzwerkverkehr aufgezeichnet welcher zwischen den beiden Hosts auf dem Port 80 mit dem TCP-Protokoll stattgefunden hat.
Ich hoffe ich konnte Ihnen einen guten ersten Eindruck von den Analysemethoden der FortiGate verschaffen.