Schlagwort-Archive: FortiGate Appliance

Die FortiGate Next Generation Firewall nutzt spezielle Security-Prozessoren und Threat Intelligence Security Services von den FortiGuard.

FortiGate Sniffer Output in Wireshark

diag sniffer packet via Pipe an Wireshark

Fortinet beinhaltet bei ihren FortiGate Appliance den in FortiOS mit eingebauten Packet Sniffer, zur Analyse von Paketweiterleitungen. Bei umfangreichen Analysen mit der Anwendung von Filtern, zeigt sich die Auswertung in der Console als unkomfortabel.

In diesem Post wird gezeigt, wie unter Linux ein Sniffer Packet Output direkt via Pipe von Wireshark gelesen wird. Falls Wireshark noch nicht installiert sein sollte, wird das Paket für die entsprechende Distribution wie folgt bereitgestellt.

# Fedora
$ sudo dnf -y install wireshark

# CentOS, RHEPL
$ sudo yum -y install wireshark

# Debian, Ubuntu, Linux Mint
$ sudo apt-get install wireshark

Damit Wireshark als non-root User ausführbar wird, ist bei Ubuntu folgender Befehl aus dem Terminal auszuführen.

$ sudo dpkg-reconfigure wireshark-common
dpkg-reconfigure wireshark-common

Bei der Auswahl die bei der Wireshark Reconfigartion erscheint, wird YES gewählt, bei i18n Einstellung deutsch ist es JA.

Die Red Hat Distributionen CentOS und Fedora erfordern die folgenden Befehle zur Ausführung, so auch bei Ubuntu.

$ sudo gpasswd -a $USER wireshark
$ sudo usermod -a -G wireshark $USER

FortiGate Sniffer Wireshark Analyse

Wireshark zum Analysier einer FortiGate machen, mit dem Output von diagnose sniffer packet, dazu den Script sdump.pl hier herunterladen und ausführbar machen.

$ chmod +x sdump.pl

Nun wird in einem Terminal eine SSH Verbindung zur Firewall aufgebaut, um den Output direkt via Pipe an Wireshark zu senden.

$ ssh -l   "diag sniffer packet any 'ip' 3 0 l" | ./sdump.pl - | text2pcap - - | wireshark -k -i -

Es wird via SSH der Sniffer auf der FortiGate gestartet, sdump.pl liest Output von STDIN, erzeugt den hexdump 16 Bytes space-delimited, text2pcap formatiert den hexdump in das PCAP Format, um dann den Output in Wireshark einzulesen und zu analysieren.

 Erscheint beim Aufruf von Wireshark folgende Ausgabe:

couldn’t run /usr/bin/dumpcap in child process: Permission Denied.

Wurde bis hier noch nicht neu eingeloggt! Ferner ist wahrscheinlich noch folgende Zuweisung erforderlich.

$ sudo chgrp wireshark /usr/bin/dumpcap
$ sudo chmod +x /usr/bin/dumpcap

 Filter werden zwischen Hochkommata eingebunden, wie folgende Beispiele zeigen.

# Filter Session Initiation Protocol (SIP)
'udp port 5060'

# Capture non-HTTP and non-SMTP traffic
'host www.example.com and not (port 80 or port 25)'

# Die Traffic zum eigenen Rechner ausfiltern.
'host 10.10.10.1 and not host 10.10.10.2'

Der Perl-Script sdump.pl kann im Terminal mit  Copy Paste der folgenden Zeilen angelegt werden, oder hier per Download bereitstellen.

cat > sdump.pl << "EOF"
#!/usr/bin/perl

use strict;
use warnings;

our $help = "
 Usage: $0 <sniffer dump file> 
 Option - (dash) read from stdin
 ex. ssh -l admin \<fortigate ip or fqdn\> \"diag sniffer packet any 'ip' 3 0 l\" | $0 - | text2pcap - - | wireshark -k -i -
\n";

our $sdump;
our ($input) = $ARGV[0];

if (not defined $input) {
  die "$help\n";
}

if ( -e $input ) {
        open  ($sdump, qq(\x3C), $input);
} elsif ( $input =~ /^-$/ ) {
        $sdump = *STDIN;
} else {
        die "\nError in open dump $input may not exist or unable to read!\n $help";
}

while (<$sdump>) {
        if ( /^\d+-\d+-\d+\s+\d+:\d+:\d+\.\d+/ ) {
                our ($date, $time) = /^(\d+-\d+-\d+)\s+(\d+:\d+:\d+\.\d+)\s+/;
                print $date . qq(\x20) . $time . "\n";
        } elsif ( /^$/ ) {
                print;
        } elsif ( /^0x/ ) {
                s/0x/00/;
                s/^(\w+)\s+(.*)\t(.*)/$1 $2/;
                our ($hex, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $null) = split ' ';
                print $hex . '  ';
                foreach our $out ( $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8 ) {
                        if ( $out ) {
                                substr $out, 2, 0, qq(\x20);
                                print $out . qq(\x20);
                        }
                }
                print "\n";
        }
}
EOF

Die Script Datei sdump.pl verschiebt man nun nach /usr/bin als sdump, und wird ausführbar gemacht.

$ sudo mv sdump.pl /usr/bin/sdump
$ sudo chmod 755 /usr/bin/sdump

Jetzt kann das CLI command diag sniffer packet über SSH Authentifizierung auf der FortiGate ausgeführt werden, um anschlissend via Pipe den Output in Wireshark zu analysieren.

$ ssh -l admin 10.10.10.1 "diag sniffer packet any 'not host 10.10.10.2' 3 0 l" | sdump - | text2pcap - - | wireshark -k -i -
Input from: Standard input
Output to: Standard output
Output format: pcap
admin@10.10.10.1's password:

  Bei Umgebungen mit erhöhter Netzwerk Traffic ist zu berücksichtigen, das eine Reduzierung durch Mitschnittfilter erreicht werden sollte.

Eine weitere Anwendung besteht darin, den PCAP Output in eine Dump Datei zu speichern, mit der Möglichkeit, die Analyse später mit Wireshark oder anderen Protocol Analyzer vornehmen zu können. Hierbei kommt folgende Zeile zur Anwendung.

$ ssh -l admin 10.10.10.1 "diag sniffer packet any 'not host 10.10.10.2' 3 0 l" | sdump - | text2pcap - - > sniffer.dump

 

FortiClient ssl-vpn Failed

Failed to establish the VPN connection. This may be caused by a mismatch in the TLS version. Please check the TLS version settings in the Advanced of the Internet options. (-5029)

Beim FortiClient kann der aufbau einer SSL-VPN Verbindung zur FortiGate folgende Warnung ausgeben.

Symptom

Ursache

Das mittlerweile veraltete kryptografische Protokoll TLS 1.0 ist ab FortiOS 6.0 per default nicht mehr aktiviert. Es wird empfohlen mindestens TLS 1.1 (Cipher Suites) für Authentifizierung und Datenverschlüsselung zu verwenden. Wir sind derzeit bei TLS 1.3, das von der IETF (Internet Engineering Task Force) genehmigt wurde.

Lösung

Möchte man ältere Clients weiter verwenden, die man im Verlauf einer Migration über Update Rollout erst später mit TLS 1.2 oder höher einsatzbereit hat, kann auf der FortiGate das TLS 1.0 aktiviert werden.

Überprüfen der aktuellen TLS Einstellung, aus der FortiGate Console mit CLI Command:

FG60E # get vpn ssl settings | grep tls
tlsv1-0             : disable
tlsv1-1             : enable
tlsv1-2             : enable
dtls-hello-timeout  : 10
dtls-tunnel         : enable

Im CLI die Cipher Suite TLS 1.0 aktivieren.

config vpn ssl settings
set tlsv1-0 enable

Auch kann beim Client die TLS Version aus dem Microsoft Windows Snapin (inetcpl.cpl) Internetoptionen angepasst werden.

Win + R und der Eingabe von inetcpl.cpl

Bei Internetoptionen im Registerabschnitt Erweitert die TLS Version 1.0 aktivieren.

Weitere Problemlösungen

Bei älteren Windows Versionen, oder bei Router mit PPPoE Internet Anbindung, können Fehler beim aufbau von SSL-VPN Verbindungen wie folgt behoben werden.

Es erscheint im FortiClient die Fehlermeldung:

Unable to establish the VPN connection. The VPN server may be unreachable (-5)

Dazu überprüft man die MTU grösse der Netzwerkschnittstellen, mit folgendem Befehl aus einer geöffneten Eingabeaufforderung

netsh interface ipv4 show subinterface

Die Ausgabe kann in etwa wie folgt aussehen:

C:\> netsh interface ipv4 show subinterface

   MTU  Medienerkennungsstatus   Bytes eingehend  Bytes ausgehend  Schnittstelle
------  ---------------  ---------  ---------  -------------
  1500                5          0          0  Ethernet
  1500                1  598892209   19487894  WiFi
  1500                5          0          0  Mobilfunk
  1500                1       5248     144442  VMware Network Adapter VMnet1
  1500                5          0          0  LAN-Verbindung* 1
  1500                1          0     134436  VMware Network Adapter VMnet8
  1500                5          0          0  LAN-Verbindung* 5
4294967295                1          0      67869  Loopback Pseudo-Interface 1
  1500                5          0          0  Bluetooth-Netzwerkverbindung
  1500                5          0          0  Ethernet 3

Die MTU Size überprüfen und ggf. auf 1400 anpassen. In einer als Administrator geöffneten Eingabeaufforderung, mit ausführen von netsh.

netsh interface ip4 set subinterface Ethernet mtu=1400 store=persistent

Alternativ dazu Regedit aufrufen und zu folgendem Schlüssel navigieren.

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

unter dem entsprechenden Interface mit der passenden IP Adresse, hier {222e135b-d09c-47a3-9236-63a041a02ea6} den Schlüssel MTU mit Wert 578 Hexadecimal ändern.

Nach einem Computer neustart kann die SSL-VPN Verbindung aufgebaut werden.