Seite wählen

NETWAYS Blog

Log Management mit Graylog

Graylog ist eines der Open Source Log Management Produkte aus dem NETWAYS Portfolio. Wir bieten hierzu sowohl Consulting-Dienstleistungen als auch Schulungen an. Im Consulting unterstützen wir Kunden vor allem

  • bei der Konzeptionierung und dem Sizing der Umgebung
  • dem initialen Aufbau
  • der Skalierung bzgl. Performance und Verfügbarkeit
  • Lösen von Problemstellungen
  • Erweitern des Funktionsumfangs, z. B. bei der Einrichtung der Graylog Enterprise Features

 

Im obigen Screenshot sieht man sehr schön die Anzahl der eingegangenen Log Messages im dargestellten Zeitraum. Darüber findet man sowohl die Suchleiste zum Filtern nach bestimmten Kriterien als auch die Möglichkeit, den zeitlichen Bereich individuell abzustecken.

 

 

 

 

 

 

 

 

 

Im folgenden möchten wir Euch einen ersten Überblick geben, was Graylog an Funktionen mitbringt und wie es Euch im alltäglichen Umgang mit Log Daten unterstützt:

Eingesetzt werden kann Graylog vor allem auf den Gebieten Security, Compliance, IT Operations und DevOps: Alle Log-Daten können mit einer Lösung kombiniert, angereichert, korreliert, abgefragt und visualisiert werden. Durch diese Möglichkeiten können Gefahren erkannt und gebannt, Audits vereinfacht, Downtimes verhindert und die Komplexität im Umgang mit Log-Daten reduziert werden.

Graylog ist also die zentrale Stelle zur Verarbeitung von Log-Dateien und den darin enthaltenen Log-Daten. Daraus ergeben sich ganz klar Mehrwerte sowohl für Techies als auch für das Management:

  • alle Log-Daten an einem Ort
  • tiefgreifende Analyse von Log-Daten durch das Erstellen und Kombinieren individuell erstellter Searches
  • Echtzeitverarbeitung von Searches
  • Exportieren von Resultaten anhand von Reports
  • Visualisierung der Log-Daten anhand von Widgets und Dashboards
  • schnelle Resultate durch verteilte Multithread Search Workflows sowie der Wiederverwendbarkeit bereits erstellter Elemente
  • Alarmierung anhand individuell definierter Events, gleichzeitigem Eintreten oder auch Ausbleiben von Events

 

Wir haben Euer Interesse an Graylog geweckt? Es haben sich Fragen aufgetan zu Eurer bestehenden Graylog-Umgebung? Dann her damit! Schreibt uns einfach über unser Kontaktformular oder an sales@netways.de. Auch per Telefon sind wir für Euch unter der 0911 / 92885-66 zum Thema Graylog erreichbar.

Mini-NAS mit Raspberry Pi & OpenMediaVault

Als Auszubildender zum Fachinformatiker für Systemintegration im ersten Lehrjahr bei NETWAYS darf ich regelmäßig neue Projekte bearbeiten. Das Ziel der Projekte: Wissensaufbau und Verständnis für die zugrunde liegende Technik und Software entwickeln.
Im Rahmen meines aktuellen Projektes setze ich mich mit der Einsatzmöglichkeit eines Raspberry Pi 4 als Network-attached storage (NAS) auseinander. Um sich als Einsteiger mit dem Konzept NAS und den Konfigurationsmöglichkeiten vertraut zu machen, ist die Open Source Software OpenMediaVault (OMV) eine sehr gute Einstiegsmöglichkeit. Mit ihrer Hilfe lässt sich unkompliziert und innerhalb kurzer Zeit ein voll funktionstüchtiges NAS installieren und konfigurieren.

In diesem Blogpost erkläre ich dir, wie du schnell und einfach OpenMediaVault auf einem Raspberry Pi installieren kannst.

Was ist OpenMediaVault?

OpenMediaVault ist eine moderne, auf Debian basierende NAS-Lösung. Die Software unterstützt mit FTP, TFTP, SMB/Samba, NFS, SNMP und SSH die gängigsten Protokolle für den Fernzugriff. Dadurch kann von (fast) jedem Gerät auf die gespeicherten Daten zugegriffen werden, egal ob PC, Laptop oder Smartphone.

Eine besonders wichtige Rolle spielt Samba. Das dazugehörige SMB-Protokoll wird von Linux, Microsoft Windows, macOS sowie Android unterstützt und ist somit das ideale Protokoll für den Cross-Platform-Zugriff.

Die Datensicherung kann unter anderem mit RSync durchgeführt werden. Dafür müssen lediglich ein Quell- sowie ein Zielordner angegeben werden.
Neben den von Haus aus vorhandenen Funktionen lässt sich OMV mit unterschiedlichen Plug-ins erweitern und an die eigenen Bedürfnisse anpassen.

Zusätzlich zu seiner umfassenden Funktionalität ist OpenMediaVault zudem äußerst Einsteiger- und Benutzerfreundlich. Das zeigt sich unter anderem an der grafischen Weboberfläche, die es allen Nutzer:innen, unabhängig vom IT-Wissen, erlaubt mit dem Browser auf OMV zuzugreifen und die Software zu konfigurieren.

Die Entwickler:innen selbst bezeichnen ihr Produkt als eine „Out-of-the-box-Lösung die es jeder Person, auch ohne technisches Vorwissen, möglich macht ein NAS zu installieren und zu verwalten.“

Technische Voraussetzungen

Damit ein NAS mithilfe von OpenMediaVault auf dem Rapsberry Pi installiert und konfiguriert werden kann, müssen einige technische Voraussetzungen erfüllt werden.
Du benötigst:

  • Raspberry Pi 4 mit Raspberry Pi OS Full oder Raspberry Pi OS lite (Versionen ab Raspberry Pi 2B sind ebenfalls möglich)
  • microSD-Karte (idealerweise 8GB Speicherkapazität)
  • Aktive Ethernet- oder WiFi-Verbindung des Raspberry Pi
  • Externes Speichermedium (z.B. Festplatte, USB-Stick) mit dem gewünschten Speicherplatz
  • Raspberry Pi HDMI-Kabel (falls der Pi mit einem Bildschirm verbunden werden muss)

Installation von OpenMediaVault

–HINWEIS–
Nach der Installation von OpenMediaVault kann der Raspberry Pi problemlos ohne Monitor betrieben werden. Da für den Zugriff auf die Weboberfläche jedoch die IP-Adresse des Pi benötigt wird, sollte für die Dauer des Installationsvorgangs ein Monitor angeschlossen sein.

Das Versprechen der Benutzerfreundlichkeit hält OpenMediaVault bereits bei der Installation ein. Sie umfasst lediglich fünf Schritte, wovon vier der Aktualisierung bzw. der Informationsfindung dienen.

  • Update und Aktualisierung der bereits auf dem Raspberry Pi installierten Softwarepakete
sudo apt update 
sudo apt upgrade
  • Installation des OpenMediaVault – Softwarepakets
wget -O - https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/installScript/master/install | sudo bash
  • Nach Abschluss der Installation ist ein Neustart des Raspberry Pi empfehlenswert
sudo reboot
  • Abfragen der IP-Adresse des Pi
hostname -I

ODER

ip -a
  • Aufrufen der IP-Adresse im Browser der Wahl
    Wenn das folgende Eingabefenster erscheint, war die Installation erfolgreich:

Die standardmäßigen Anmeldedaten von OpenMediaVault lauten:

username: admin
password: openmediavault (aus Sicherheitsgründen sollte das Passwort direkt nach dem ersten Login in ein sicheres Passwort geändert werden.)

Damit ist die Installation von OpenMediaVault auf dem Raspberry Pi abgeschlossen. Welche Konfigurationsmöglichkeiten bestehen, auf welche Art und Weise auf das NAS zugegriffen wird und vieles mehr, bleibt dem Nutzer selbst überlassen.

Die folgenden Guides behandeln eine Erstkonfiguration der Software:

Wenn du einen Ausbildungsplatz als Fachinformatiker:in für Systemintegration suchst, Lust auf spannende und abwechslungsreiche Projekte hast (die stets auf deinen persönlichen Wissensstand abgestimmt sind) und Teil eines modernen IT-Unternehmens werden willst, bist du du bei NETWAYS an der richtigen Adresse.

Wireguard mit dynamischen DNS Namen

Seit einiger Zeit bin ich großer Fan von Wireguard als VPN Lösung um meine Server und Notebooks zu verbinden. Auch Patrick hatte schon mal über DNS Privacy mit Wireguard geschrieben.

Dabei ist mir ein kleines Problem begegnet, Wireguard hat kein automatisches Handling wenn sich Endpoint Adressen über DNS ändern. In meinem Fall verbinde ich:

  • Server im Rechenzentrum mit fester IP Adresse
  • Notebook irgendwo unterwegs, muss sich zu allen anderen Verbinden
  • Server zuhause, Verbindung nur über DynDNS möglich

Auf dem Bild kann man in etwa die aufgebauten Verbindungen erkennen, nun besteht das Hauptproblem darin, dass der Server zuhause nur über die Auflösung des dynamischen DNS Namens erreichbar ist. Wireguard löst DNS Namen nur beim laden der Konfiguration auf. Sollte sich die IP Adresse ändern funktioniert die Verbindung nicht mehr.

Ein Beispiel meiner Konfiguration:

[Interface]
# Notebook
Address = 10.99.0.3/24
PrivateKey = BASE64
ListenPort = 51820

[Peer]
# Server at home
PublicKey = BASE64
AllowedIPs = 10.99.0.1/32
Endpoint = home.example.com:51820

[Peer]
# hosted VM
PublicKey = BASE64
AllowedIPs = 10.99.0.2/32
Endpoint = server.example.com:51820

#[Peer]
## Notebook Entry on other nodes
#PublicKey = BASE64
#AllowedIPs = 10.99.0.3/32
## No endpoint defined for this peer

Nachdem Wireguard noch keine eingebaute Lösung dafür hat, braucht man ein Script, welches DNS Namen neu auflöst und dann anwendet. Ich verwende das Beispielskript reresolve-dns.sh aus den contrib Skripten.

Die Installation ist relativ einfach:

curl -LsS -o /usr/local/bin/wireguard-reresolve-dns https://github.com/WireGuard/wireguard-tools/raw/master/contrib/reresolve-dns/reresolve-dns.sh
chmod 0755 /usr/local/bin/wireguard-reresolve-dns

Im Anschluss kann das Skript manuell oder per Cron (als root) ausgeführt werden:

wireguard-reresolve-dns wg0

Oder was ich bevorzuge, als Systemd Service und Timer wie folgt.

/etc/systemd/system/wireguard-reresolve-dns.service

[Unit]
Description=Wireguard Re-Resolve DNS of endpoints

[Service]
Type=oneshot
ExecStart=/usr/local/bin/wireguard-reresolve-dns wg0

/etc/systemd/system/wireguard-reresolve-dns.timer

[Unit]
Description=Runs Wireguard Re-Resolve DNS every 5 Minutes

[Timer]
OnUnitActiveSec=300s
OnActiveSec=300s

[Install]
WantedBy=multi-user.target

Anschließend muss man den Timer nur aktivieren und kann den Status des Service jederzeit checken:

# systemctl daemon-reload
# systemctl enable wireguard-reresolve-dns.timer
# systemctl status wireguard-reresolve-dns.timer
* wireguard-reresolve-dns.timer - Runs Wireguard Re-Resolve DNS every 5 Minutes
Loaded: loaded (/etc/systemd/system/wireguard-reresolve-dns.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Thu 2021-12-30 15:40:09 CET; 6 days ago
Trigger: Wed 2022-01-05 15:50:48 CET; 3min 1s left
Triggers: * wireguard-reresolve-dns.service

Dec 30 15:40:09 notebook systemd[1]: Started Runs Wireguard Re-Resolve DNS every 5 Minutes.

# systemctl status wireguard-reresolve-dns.service
* wireguard-reresolve-dns.service - Wireguard Re-Resolve DNS of endpoints
Loaded: loaded (/etc/systemd/system/wireguard-reresolve-dns.service; static)
Active: inactive (dead) since Wed 2022-01-05 15:45:48 CET; 2min 1s ago
TriggeredBy: * wireguard-reresolve-dns.timer
Process: 3600033 ExecStart=/usr/local/bin/wireguard-reresolve-dns wg0 (code=exited, status=0/SUCCESS)
Main PID: 3600033 (code=exited, status=0/SUCCESS)
CPU: 17ms

Jan 05 15:45:48 notebook systemd[1]: Starting Wireguard Re-Resolve DNS of endpoints...
Jan 05 15:45:48 notebook systemd[1]: wireguard-reresolve-dns.service: Succeeded.
Jan 05 15:45:48 notebook systemd[1]: Finished Wireguard Re-Resolve DNS of endpoints.

Ich wünsche viel Spaß beim Ausprobieren.

Wer gerne automatisiert, dem kann ich die Ansible Rolle von githubixx empfehlen, so spart man sich das müssige Erstellen und Verteilen von Keys. Leider habe ich noch keine fertige Rolle für reresolve DNS. 😉️

Nur Vim ist nicht genug!

Alle, die mal ein Problem mit Linux hatten, werden das vermutlich kennen: Du suchst online nach deinem Problem, stößt auf einige Befehle, bearbeitest eine Konfigurationsdatei und dann passiert es – Du bist in Vim gefangen!

Der Erstkontakt mit Vim kann durchaus von Frust geprägt sein, aber das muss nicht auf Dauer so sein. Stattdessen könntest Du Dich mit Vim anfreunden und seine Vorzüge genießen. Wenn Du nach fünf Jahren mit Vim ca. drei Prozent der Möglichkeiten kennengelernt hast – oder das zumindest glaubst – kannst Du aber auch noch tiefer abtauchen.

Hier kommen sog. „Vim-likes“ in’s Spiel.
Ein paar Kandidaten, die ich interessant finde, möchte ich Dir nicht vorenthalten.

 

Zathura

Bei Zathura handelt es sich um einen PDF Reader (ohne Bearbeitungsfunktion), der sich vim-ähnlich steuern lässt. Die bekannten Bewegungstasten h, j, k, und l bewegen die Ansicht nach links, unten, oben bzw. rechts. Auch gg und G erfüllen ihre bekannte Funktion. Wenn Du Dich auf das Lesen konzentrieren willst und Du die Maus aus Deinem Leben verbannen möchtest, dann ist Zathura ein guter erster Schritt!
Hier sind noch ein paar Tastenbefehle, um Dich auf Deinen Weg zu schicken:

o       → Dokument öffnen
J       → Nächste Seite
K       → Vorige Seite
H       → Anfang der aktuellen Seite
L       → Ende der aktuellen Seite
a       → Ansicht an Fensterhöhe anpassen
s       → Ansicht an Fensterbreite anpassen
/       → Textsuche
+, -, = → Zoom vergrößern, verkleinern, zurücksetzen

Vifm

Mit Vim ist es möglich, viele ähnliche Änderungen gleichzeitig vorzunehmen, wie etwa das Anfügen eines Ausrufezeichens, um jeder Zeile eines Dokuments mehr Ausdruck zu verleihen. Wenn Du Vims Fähigkeit zur Massenbearbeitung tatsächlich einmal gebraucht hast, möchtest Du sie sicher nicht mehr missen. Wäre es da nicht wundervoll, wenn Du das auch auf andere Bereiche ausweiten könntest?

Vifm ist ein Terminal-Dateimanager, der das Gefühl von Vim perfekt einfängt und eine Zwischenstufe zwischen Kommandozeilenbefehlen und einem grafischen Dateimanager darstellt.

Hier lassen sich Dateien verschieben, kopieren und löschen. Du kannst sie allerdings auch umbenennen. Spätestens jetzt wird die Markierfunktion sehr nützlich. Mit ihr können mehrere Dateien auf dieselbe Art bearbeitet werden. Ob es sich dabei um das Kopieren, Verschieben, das Setzen von Berechtigungen oder um das Umbenennen handelt, spielt dabei keine Rolle.

Ein klassisches Beispiel für das Umbenennen wären Screenshots, die üblicherweise unter anderem die Aufnahmeuhrzeit im Dateinamen hinterlegen. So könntest Du bei allen Bildern eines Ordners gleiche Teile der Namen entfernen, Dateiendungen ergänzen oder ungeliebte Leerzeichen ersetzen.

Mit v kannst Du mehrere aufeinanderfolgende Dateien wählen und Deine Auswahl mit Enter bestätigen. Alternativ kannst Du mit t auch die aktuell angesteuerte Datei markieren.

Hast Du die relevanten Dateien markiert, kannst Du mit Shift+i die Dateinamen über einen Texteditor bearbeiten. Der Standard hierfür ist Vim. Damit schließt sich der Kreis zur Massenbearbeitung durch Vim.

Vifm bietet außerdem ein Vorschaufenster, das die Inhalte von Ordnern und Dateien darstellt. Einfache Textdateien kannst Du so bereits lesen. Ähnlich wie der Befehl „tree“ zeigt diese Vorschau auch die Unterstruktur eines Ordners an. Welche Programme für diese Vorschau genutzt werden, kannst Du auch selbst in der Vifm-Konfigurationsdatei anpassen.

Wie auch Vim verfügt Vifm über zu viele Funktionen, um sie hier alle zu nennen. Im besten Fall probierst Du es einfach selbst aus. Das Vifm-cheat-sheet sollte dir für den Anfang genug Beistand leisten.

 

Vimb

Die Königsdiszipilin: Der Browser!
Ja, selbst das Werkzeug, das uns täglich begleitet und das wir wohl am meisten verwenden, ist nicht vor Vims Einfluss geschützt. Vimb ist genau das, was Du gerade erwartest. Dir ist es zu langweilig, Links mit der Maus anzuklicken? Dein Mausrad ist etwas dreckig und dreht sich daher beim Scrollen nicht richtig? Du denkst ohnehin nur noch in Vim-Bewegungen? Vimb ist Dein Browser!

Die Navigation läuft auch in Vimb über h, j, k und l. Strg+f und Strg+b scrollen je eine Seite runter bzw. hoch. Der Seitenanfang ist über gg, das Seitenende über G zu erreichen. Den Standardmodus kannst Du jederzeit über ESC auswählen. Mit Strg+o springst Du in der Historie eine Seite zurück, mit Strg+i eine vorwärts. gi platziert den Eingabezeiger in dem ersten möglichen Textfeld auf dem Bildschirm und aktiviert den Eingabemodus.

Damit kannst Du bereits einen Suchbegriff in eine Suchmaschine eingeben.
Doch bei einer solchen Suchmaschine musst Du erst einmal landen. o lässt Dich eine URL eingeben, die Du aufrufen möchtest. O wiederum ermöglicht das gleiche, fügt aber gleichzeitig die aktuelle URL ein, um diese zu bearbeiten.

Doch wie geht das Klicken denn nun ohne Maus? f ist dein Freund. Diese Taste zeigt Dir klickbare Elemente auf der Seite an und nummeriert sie. Anschließend kannst Du noch Text eingeben, um die Suche einzuschränken, die angezeigte Nummer eingeben und so z.B. von diesem Blog aus zu unseren Events gelangen. Alternativ zu den Nummern funktioniert auch Tab gefolgt von der Eingabetaste.

Möchtest Du ein etwas konventionelleres Erlebnis, kannst Du auch Strg+z drücken. Dann wird nur noch ESC von Vimb verarbeitet (stoppt diesen Modus). Die restlichen Tasten tun dann das, wofür die entsprechende Seite sie vorgesehen hat.

Vimb ist anfänglich sicherlich ungewohnt, aber es versucht schließlich auch, etwas anderes zu sein. Dieses Ziel ist definitiv erreicht. Übrigens kann die Maus auch in Vimb genutzt werden. Du musst Dich also nicht gänzlich auf Deine Tastatur verlassen 😉.

Zusammenfassend kann ich sagen, dass es wohl nicht ohne Grund so viele „Vim-likes“ gibt. Der Ansatz von Vi(m) hat sich bewehrt und deshalb ist es keine Überraschung, dass dieser Ansatz immer wieder in andere Anwendungen einfließt. Nicht jede dieser Anwendungen macht alle glücklich. Aber eine nette Spielerei sind sie allemal. Wenn Du also auch nur zehn Minuten mit einem „Vim-like“ verbringst, hat sich dieser Blogeintrag aus meiner Sicht bereits gelohnt. Viel Spaß beim Entdecken!

Matthias Döhler
Matthias Döhler
Junior Consultant

Über ein paar Umwege ist Matthias nun endlich da gelandet, wo er sich wohl fühlt: in der IT! Bei NETWAYS hat er im September 2021 seine Ausbildung zum Fachinformatiker für Systemintegration im Bereich Professional Services begonnen. Wenn er sich zu Hause nicht auch noch mit Themen rund um Linux auseinandersetzt, sieht er sich leidenschaftlich gerne Horrorfilme und solche an, die man als "Trash" bezeichnen könnte. Je seltsamer, desto besser! Den üblichen Beschäftigungen wie Freunde treffen, Bars aufsuchen oder die Sonne im Freien genießen, geht er eben so nach wie pseudophilosophischen Fragen. Daneben spielt er außerdem wahnsinnig gerne Videospiele vergangener Generationen....

Administrators Toolbox: SSH

SSH

“Secure Shell oder SSH bezeichnet ein kryptographisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten über ungesicherte Netzwerke.[1] Häufig wird es verwendet, um lokal eine entfernte Kommandozeile verfügbar zu machen, d. h., auf einer lokalen Konsole werden die Ausgaben der entfernten Konsole ausgegeben, und die lokalen Tastatureingaben werden an den entfernten Rechner gesendet. Genutzt werden kann dies z. B. zur Fernwartung eines in einem entfernten Rechenzentrum stehenden Servers. Die neuere Protokoll-Version SSH-2 bietet weitere Funktionen wie Datenübertragung per SFTP.” [0]

Damit dürfte SSH den meisten Administratoren schon ein Begriff sein, zumindest wenn eine Maschine mit einem Unix im Netzwerk vorhanden war. Falls noch Unklarheit besteht: Wenn gelentlich PuTTY geöffnet wird, wird sehr wahrscheinlich SSH eingesetzt. Die Vorteile von SSH sind schnell benannt, es bietet schnelle, stabile, sichere (authentifiziert und verschlüsselt) und bandbreitensparsame Verbindungen ohne grossen Aufwand dafür betreiben zu müssen. Die Beginne des Protokolls liegen in den 90ern als damit mehrere klassische Unix-Dienste abgelöst wurden und seitdem gibts es nur selten grössere Neuerungen [1]. Dennoch sind einige sehr nützliche Funktionen in SSH recht unbekannt und dem soll hiermit Abhilfe geschaffen werden. Im folgenden gehe ich dabei auf zuerst ein wenig auf die Grundlagen ein und dann auf die etwas weniger bekannten Eigenschaften.

Das erste Mal

Ein typische SSH-Session beginnt mit der Eingabe des ssh-Kommandos und der Zieladdresse, also etwa eines DNS-Namens oder einer IP-Addresse:

# ssh 192.168.178.23

Ohne weitere Angaben wird dabei wird als Loginname der des aktuellen Nutzers verwendet, bei PuTTY wird man beim einwaehlen nach dem Loginnamen gefragt. Beim ersten Mal wird die folgende Meldung bzw. das Aequivalent auf PuTTY erscheinen:

The authenticity of host '192.168.178.23 (192.168.178.23)' can't be established.
ED25519 key fingerprint is SHA256:cBmwx2ZFgoK0EBvWf2CDtiu5a9hoPMn4xH4LjEnPH64.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Es ist an diesem Punkt bereits eine Verbindung zum Zielrechner aufgebaut und der öffentliche Schlüssel des Hosts abgerufen worden. Ohne jetzt auf die Details von asymmetrischer Kryptographie einzugehen zu wollen, muss dieser Mechanismus kurz erlaeutert werden. Bei der Installation erzeugt der SSH-Server ein oder mehrere Schlüsselpaare, ein Paar besteht aus einem öffentlichen und privaten Teil, diese sind mathematisch verbunden. Daten die mit dem öffentlichen Teil verschlüsselt werden sind nur mit dem privaten Teil entschlüsselbar. Mit dem privaten Teil können Daten signiert werden, was mit dem öffentlichen Teil verifiziert werden kann, dass heisst, die gesendeten Daten wurden genau so von etwas versandt, was Zugriff auf den privaten Schlüssel hat (als typischerweise die Person oder Maschine die den Schlüssel besitzt). Ein aehnliches Prinzip kommt auch an vielen Stellen beim Einsatz von TLS zum Tragen, also z.B. beim normalen Besuch einer Website (wenn oben in der Addressleiste des Browsers ein Schlosssymbol ist). Aufgrund eines Systems von Vertrauensankern kann jedoch der Browser schon mehr oder weniger garantieren, dass die Gegenstelle auch die gewünschte ist, ohne den Nutzer nach einer Bestaetigung zu fragen. Dieses Verfahren kommt bei SSH normalerweise NICHT zum Einsatz, dazu aber spaeter mehr.

Mit einem yes oder der Eingabe des Fingerabdrucks des öffentlichen Schlüssel des Ziels kann nun bestaetigt werden, dass man diesen als authentisch annimmt, bei PuTTY gibt es dementsprechende Knöpfe. Anmerkung: Diese Meldung wird, der Erfahrung nach, IMMER und ohne Verifikation ignoriert. Dies ist in einem kontrollierten Netzwerk (zuhause oder vielleicht auch in einem Betrieb) vermutlich unbedenklich, nicht jedoch, wenn die Verbindung nicht der eigenen Kontrolle unterliegt. Ein Angreifer kann sich an dieser Stelle zwischen den Nutzer und das Ziel schalten! Diese Verifikation sollte also mit Bedacht und mittels eines zweiten (gesicherten) Kanals erfolgen. Wenn man zum Beispiel über eine virtuelle serielle Schnittstelle der Virtualisierungssoftware Zugriff auf die Maschine hat, so kann man mit ssh-keygen den Fingerprint ermitteln:

# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:cBmwx2ZFgoK0EBvWf2CDtiu5a9hoPMn4xH4LjEnPH64 root@generic-debian11 (ED25519)

Dabei ist zu beachten, dass heutzutage mehrere Schlüsselpaare vorhanden sind und in /etc/ssh/ das passende ausgewaehlt werden muss, hier ist das ED25519, es könnte aber auch z.B. RSA oder ECDSA sein. Dies sind verschieden Algorithmen, was hier erstmal ignoriert wird.

Anschliessend sollte die Passwortabfrage erscheinen bzw. unter PuTTY die Frage nach dem Loginname:

user@192.168.178.23's password:

Nach der Eingabe des Passwortes landet man dann auf der eingestellten Loginshell.

SSH-Schlüssel

Das Passwort jedesmal einzugeben ist natürlich unnötige Arbeit und zudem problematisch, da dann schlussendlich doch schlechte und/oder schon mal benutzte Passwörter verwendet werden. Die Lösung dafür ist recht einfach und schon vorhanden: SSH-Schlüssel. Das klingt ja erstmal wie das Thema weiter oben und tatsaechlich ist es in etwa auch das Gleiche, nur dass wir dieses Mal das Schlüsselpaar für einen Nutzer verwenden. Dafür wird zuerst mal ein Schlüsselpaar erzeugt:

ssh-keygen
Enter file in which to save the key (/home/user/.ssh/id_rsa):

hier kann nun ein gewünschter Dateipfad angegeben werden (alternativ gleich in den Befehl mit der Option -f)

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Wie die Ausgabe beschreibt, kann hier eine Passphrase gesetzt werden, dies ist natürlich empfehlenswert. Waehrend einer laufenden Nutzersitzung, kann der Schlüssel einem SSH-Agenten hinzugefügt werden, so dass das Passwort nur einmal eingegeben werden muss.

Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa
The key fingerprint is:
SHA256:NY92co2ANzzBp6P82ILfZpmRALePZJxvU1Yxpt5UgGk user@host
The key's randomart image is:
+---[RSA 3072]----+
|         ..  o=o.|
|      . .o..Eo.o |
|       +.oO+...  |
|        BooOo=   |
|       +S*+=* o  |
|        +.B+     |
|       . = =     |
|      . o.B      |
|       ..+.      |
+----[SHA256]-----+

Der weitere Output zeigt dann noch den Erfolg der Operation an und stellt (aus irgendwelchen Gründen) den Fingerprint graphisch dar. Der Schlüssel kann dann auf die Zielmaschine kopiert werden:

ssh-copy-id -i $PFAD_ZUM_OEFFENTLICHEN_SCHLUESSEL $USER@$ZIEL

(wobei natürlich alle mit $ beginnenden Parameter durch die realen Werte ersetzt werden müssen) und dann benutzt werden mittels:

ssh -i $PFAD_ZUM_PRIVATEN_SCHLUESSEL $USER@$ZIEL

Da der Aufruf immer noch recht lang ist, kann man in einer Konfigurationsdatei ein paar Parameter setzen. Die Standardkonfigurationsdateien auf Unix-Systemen ist vermutlich ~/.ssh/config.

Host bla
    User $USER
    Hostname $ZIEL
    IdentityFile $PFAD_ZUM_PRIVATEN_SCHLUESSEL

Danach ist der Aufruf nur noch ssh bla. In PuTTY ist das Erstellen von Schlüssel und den Konfigurationseintraegen durch Klicken möglich.

Dateitransfer

Es gibt hier verschiedene Möglichkeiten:

1.scp Die Verwendung von scp ist relativ simpel und auch brauchbar für Skripte:

scp $LOKALE_DATEI $ZIELHOST:$ZIELORT_ODER_DATEI
scp $ZIELHOST:DATEI $LOKALE_ZIEL_DATEI

2.sftp Die Verwendung erinnert an die des Kommandos ftp und ist interaktiv, inklusive Verzeichniswechsel usw.

3.sshfs Eine FUSE-Implementierung von einem Dateisystem über SSH.

sshfs $ZIELHOST:$PFAD $LOKALES_VERZEICHNIS

haengt $PFAD des $ZIELHOST im $LOKALES_VERZEICHNIS ein.

Netzwerk

Ein paar sehr nützliche Features sind die Netzwerkoptionen von SSH, z.B.:

ssh -L 5555:bla:80 foo

transportiert alle Anfragen die an den lokalen Port 127.0.0.1:5555 gehen über SSH an den Host foo von wo aus sie über den normalen Netzwerkpfad (ohne SSH-Tunnel) dann auf Port 80 auf bla gehen. Sehr nützlich, wenn man etwa ein nur lokal erreichbares Webinterface besuchen möchte.

ssh -R 5555:localhost:6767 $ZIEL

Das Gegenstück, öffnet auf dem $ZIEL den Port 5555 und leitet in an den lokalen Port 6767 weiter.

ssh -J hop1,hop2 ziel

“Springt” per SSH über hop1 und hop2 zu ziel. Natürlich muss sich der Nutzer auf allen Systemen authentifizieren, aber benötigt keine Shell. Es können damit reine Gateways benutzt werden, die als “Eingangstor” in ein Netzwerk dienen.

ssh -D 6767 $ZIEL

Öffnet eine dynamische Port-Weiterleitung auf $Ziel. Kann auch von Browsern als SOCKS Proxy verwendet werden.

ssh $ZIEL -o "ProxyCommand=nc -X connect -x $PROXYHOST:$PROXYPORT %h %p"

Verbindet sich über den (HTTP-)Proxy $PROXYHOST auf Port $PROXYPORT zum $ZIEL

SSH-Zertifikate

Während die bisherigen Abschnitte SSH-Grundlagen und diverse Nutzungsmöglichkeiten behandelt haben, stellt sich dem interessierten Lesen oder auch dem fortgeschrittenen Nutzer schon die Frage nach der Skalierung solcher Setups. Die Authentizität einer Verbindung ist ja theoretisch durch die Schlüssel sicher gestellt, aber rein praktisch ist da die Problematik, dass man ja erstmal alle Host-Schlüssel in seiner ~/.ssh/known-hosts sammeln muss. Bei großen und dynamischen Umgebungen ein Sysiphos-Unterfangen, dass recht bald in Problemen resultiert. Das gleiche gilt natürlich für die Schlüssel der Nutzer. Da diese lokal für den sshd (den SSH-Daemon) verfügbar sein müssen, müssten potentiell ALLE Schlüssel ALLER Nutzer auf ALLE relevanten Maschinen kopiert und dort natürlich auch aktualisiert werden. Netzwerkdateisysteme sind natürlich ein Aus- oder Umweg, aber bergen das Risiko, dass bei einem Ausfall dieser Infrastruktur der Login überall sonst nicht mehr funktioniert. Naheliegenderweise gibt es dafür zumindest teilweise eine Lösung. In SSH gibt es nämlich auch Komponenten für eine Zertifikatsinfrastruktur. Diese ähnelt ein wenig der von TLS, ist jedoch deutlich rudimentärer und simpler. Dabei lassen sich SSH-Zertifizierungsschlüssel erstellen, die sowohl Host- als auch Nutzerschlüssel signieren können. Ein Nutzer muss dann nur noch dem Zertifizierungsschlüssel vertrauen um einen Host zu verifizieren und ein Host um einen Nutzer zu authentifizieren.

Der Zertifizierungsschlüssel besteht dabei, wie bisher bei den anderen Schlüsseln, auch wieder aus einem Schlüsselpaar:

# ssh-keygen -f ./ca_host_key -t ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./ca_host_key
Your public key has been saved in ./ca_host_key.pub
The key fingerprint is:
SHA256:3UmaB6K4wy/obEBhmeGYWZIKnlvF9emPY8xQgZmygPM user@host
The key's randomart image is:
+--[ED25519 256]--+
|.o* . ..+.       |
|=% . + +. o      |
|O.= o o .+. .    |
|.+ E o .oo * .   |
|. o . ..S.+ +    |
|.. . .  + o.     |
| . .+    * .     |
| .o .o  . .      |
| oo  ..          |
+----[SHA256]-----+

# cat ./ca_host_key.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCdmjMLjw+WGI+Aj1FUHUCG16daqoyeet+GZWi1O/TS user@example.com

und damit können nun Host- oder Nutzerschlüssel signiert werden. Der Parameter -I enthält dabei die certificate_ID welche im Prinzip frei wählbar ist, aber für diesen Fall (der Host-Zertifikate) auf den eindeutigen Hostnamen gesetzt werden sollte.

# ssh-keygen -s ca_host_key -I testhost.local -h /etc/ssh/ssh_host_ecdsa_key.pub
Signed host key /etc/ssh/ssh_host_ecdsa_key-cert.pub: id "testhost.local" serial 0 valid forever

Dabei wird eine neue Datei host_ecdsa_key-cert.pub erstellt, die den unterschriebenen öffentlichen Schlüssel enthält, das sieht dann ungefähr so aus:

# cat ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMuXZN6or69chS+ZT6++P37JeRC5km+cIbzXnfCos9hvJ9jUbB+Becozdcmhfhj6Udg6FfxwDJqc5WaKHA0uErY= root@example.com
# cat ssh_host_ecdsa_key-cert.pub
ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgtZ2LJPOCioVR9tG19Zekk3x6qru6bYXCIlMXsKSc43QAAAAIbmlzdHAyNTYAAABBBMuXZN6or69chS+ZT6++P37JeRC5km+cIbzXnfCos9hvJ9jUbB+Becozdcmhfhj6Udg6FfxwDJqc5WaKHA0uErYAAAAAAAAAAAAAAAIAAAAOdGVzdGhvc3QubG9jYWwAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgIJ2aMwuPD5YYj4CPUVQdQIbXp1qqjJ5634ZlaLU79NIAAABTAAAAC3NzaC1lZDI1NTE5AAAAQFgq6IqNBRjJrysFdBHHceU83AXF0Vg13uq17ZJXn2hk98H6rRnLCV8XvOtRd9o1bxtc8xQ7Poigw4wuRbMjigY= root@testhost.local

Nun fehlt nur noch ein Eintrag in die known_hosts Datei:

@cert-authority *.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCdmjMLjw+WGI+Aj1FUHUCG16daqoyeet+GZWi1O/TS

Damit werden alle Host-Schlüssel akzeptiert, die von einem Host mit dem Namensmuster *.example.com kommen und mit dem Zertifizierungsschlüssel signiert sind.

Dasselbe lässt sich prinzipiell gleichartig auf Nutzerschlüssel übertragen, auf ein Beispiel wird hier nun verzichtet um diese Vorstellung hier knapp zu halten. Jedoch gibt es den einen oder anderen Punkt, der erwähnt werden sollte: Da es sich hier nicht um TLS handelt und die ganze Struktur sehr viel schmaller ist, ist das Widerrufen von Schlüsseln anderst gelöst. Es gibt keine zentrale Stelle die Revocation Lists führt, die abgefragt werden können. Eine solche Liste muss sich lokal auf der Maschine befinden, also etwa mit Ansible, Puppet, Salt, Chef… plaziert und aktualisiert werden. Dies ist natürlich gerade für Nutzerschlüssel zu empfehlen. Zusätzlich sollte erwähnt werden, dass es durchaus die Möglichkeit gibt, das System zu erweitern und eigene Erweiterungen zu erstellen, beispielsweise mit der AuthorizedKeysCommand-Direktive in der sshd-Konfiguration die einem erlaubt ein eigenes Programm zu erstellen/verwenden um die Nutzer zu authentifizieren und damit wiederum eine Anbindung an Datenbanken oder Netzwerkdienste.

Rekapitulation

SSH als Protokoll und mit den gängigen FOSS-Implementierungen ist ein sehr mächtiges Werkzeug für den Umgang mit vernetzten Computern und leider, zumindest in meiner Wahrnehmung, unterschätzt. Nicht nur lassen sich enorm viele Aufgaben damit erledigen, es ist dabei auch flexibel, schnell und ressourcensparend. Etwas, was in einer Zeit der eher penetranten, langsamen Anwendungen als Abwechslung doch mal wieder angenehm ist. Die Netzwerk-Tricks erlauben das sinnvolle Arbeiten, auch in Umgebungen mit eher kreativen Firewall-Regeln und mit ein wenig Einrichtung ist der Zugriff auf entfernte Rechner kaum noch von dem auf den eigenen, lokalen zu unterscheiden (ich würde zu eine Shell-Prompt raten, die dies farblich hervorhebt, es kann leicht zu Verwirrungen kommen). Mit ein bisschen zusätzlicher Arbeit kann das System auch gut skaliert werden. Und das schönste: Es ist schon da! Die Chancen sind gut, dass es bereits auf jedem Linux-System im Netzwerk vorhanden ist (und auf dem meisten aktiv) und auf jedem anderen Unix-System ist es sehr sicher verfügbar. Sogar auf den Windows-Systemen ist relativ einfach zu installeren (Microsoft bietet einfach auch OpenSSH als Dienst zur Installation an). Es lohnt sich hier auf jeden Fall mal ein wenig Zeit in das Setup zu investieren um die Arbeit ein wenig angenehmer und flüssiger zu gestalten und ich hoffe, dass dieser Artikel ein paar Anstösse in diese Richtung gegeben hat.

Danksagung

An dieser Stelle möchte ich kurz Dank ausrichten an das Entwicklungsteam von OpenSSH die das Protokoll und die wohl populärste Implementierung warten und stetig weiterentwickeln und etwas gebaut haben, was mir und vielen anderen den sinnvollen Umgang mit vernetzten Computern ermöglichen. Zusätzlich vielen Leuten im Internet die mir mit vielen Beispielen, Anleitungen und Erklärungen geholfen haben an diesen Punkt zu kommen, was sonst so nicht ohne weiteres möglich gewesen wäre.

Quellen

  • https://de.wikipedia.org/wiki/Secure_Shell
  • https://www.openssh.com/history.html
  • https://www.openssh.com/
  • https://wiki.archlinux.org/title/OpenSSH
  • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-ssh-configuration
  • https://wiki.debian.org/SSH
Lorenz Kästle
Lorenz Kästle
Systems Engineer

Lorenz hat seinen Bachelor der Informatik an der FAU gemacht und sich zuletzt mit Betriebssystemen dort beschäftigt. In seiner Freizeit beschäftigt er sich ein wenig mit XMPP und der Programmiersprache Erlang.