Archiv der Kategorie: Workaround

UNBLOG Tutorials Usability and Addons Integration with Technical Workarounds and Tutorials for Professionals.

PuTTY Linux Terminal Character-Set

Umlaute Character-Set im Terminal werden in PuTTY falsch dargestellt

Arbeitet man mit PuTTY oder KiTTY stellt man oft fest, das Umlaute im Terminal falsch dargestellt werden. Das auch wenn auf dem Remote Host die Codepage korrekte eingestellt ist. Das PuTTY Character-Set muss geändert werden.

$ sudo su -
[sudo] Passwort für homer:

Der PuTTY Terminal Character-Set Zeichensatz ist auf UTF-8 eingestellt.

$ localectl status
    System Locale: LANG=de_CH.UTF-8
        VC Keymap: ch
       X11 Layout: ch

Das dennoch die Umlaute nicht übersetzt werden, liegt an der Einstellung von PuTTY oder KiTTY. Der Standard Wert des PuTTY Terminal Character-Set ist hier auf ISO-8859-1:1998 (Latin-1, West Europe) voreingestellt.

PuTTY Remote Character set

Unter Window – Translation bei Remote character set kann die Codepage auf UTF-8 geändert werden.

PuTTY Terminal Character-Set

Wird nun mit Character-Set UTF-8 eine Terminal Session geöffnet, werden die Umlaute richtig ausgegeben.

Anmwerkung

PuTTY ist eine freie Software zum Herstellen von Verbindungen über Secure Shell (SSH), Telnet, Remote login oder serielle Schnittstellen. Dabei dient PuTTY als Client und stellt die Verbindung zu einem Server her. Beim Verbindungsaufbau wird die Identität des Benutzers mittels einer der bereitgestellten Methoden zur Authentifizierung überprüft. PuTTY ist für Windows und Linux verfügbar.

In der so bereitgestellten textorientierten Terminalsitzung können direkt Befehle ausgeführt werden, die auf dem fernen System ausgeführt werden. Die Zeichen Übersetzung findet im PuTTY Terminalemulator über das ausgewählte Terminal Character-Set statt. Eine grafische Ausgabe ist nicht möglich, jedoch kann ein X-Server genutzt werden, der auf dem Client-Rechner läuft. Zudem wird IPv6 ab der Version 0.58 und die serielle Schnittstelle ab der Version 0.59 unterstützt.

Die Programmteile PuTTYgen und Pageant sind in WinSCP enthalten, auch einige Android-Apps bauen auf der Software auf. Inoffizielle Versionen existieren für Windows Mobile und Symbian OS.

PuTTY gilt als das Standard-Werkzeug für SSH-Verbindungen unter Windows und ist in Firmenumgebungen häufig bereits vorinstalliert, da Windows bis Ende 2017 keinen eigenen SSH-Client bereitstellte.

FortiGate Sniffer Output in Wireshark

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

In diesem Tutorial 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
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

Wireshark Sniffer Analyse

Um Wireshark zum Analysier einer FortiGate zu machen, wird der Output von ‚diagnose sniffer packet‘ an Wireshark weitergeleitet. 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