Netcat für einfache Netzwerkkommunikation verwenden

LinuxBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie die Grundlagen der Netzwerkkommunikation mit Netcat kennen – einem vielseitigen Netzwerkwerkzeug, das häufig als „Schweizer Taschenmesser“ der Netzwerktechnik bezeichnet wird. Sie erfahren, wie dieses leistungsfähige Dienstprogramm das Lesen und Schreiben von Daten über Netzwerkverbindungen mit den Protokollen TCP oder UDP ermöglicht.

In praktischen Übungen erkunden Sie die Grundlagen der Client-Server-Kommunikation, erstellen ein einfaches Chatsystem und lernen wichtige Netzwerkkonzepte wie Ports kennen. Außerdem führt Sie das Lab in grundlegende Verschlüsselungsverfahren für die sichere Übertragung von Daten ein.

Netcat installieren

In diesem Schritt statten wir uns zunächst mit dem richtigen Werkzeug für unsere geheime Agentenkommunikation aus. Netcat wird oft als „Schweizer Taschenmesser“ der Netzwerkwerkzeuge bezeichnet, da es für viele unterschiedliche Netzwerkaufgaben eingesetzt werden kann. Installieren wir Netcat nun Schritt für Schritt auf unserem System.

Öffnen Sie zunächst das Terminal. Suchen und öffnen Sie auf Ihrem Desktop das Xfce-Terminal. Im Terminal geben wir alle Befehle ein, die wir für die Arbeit mit Netcat benötigen.

Screenshot zum Öffnen des Xfce-Terminals

Hinweis: Kostenlose Benutzer können keine Verbindung zum Internet herstellen. Netcat ist daher in der Lab-Umgebung bereits vorinstalliert. Fahren Sie in der Liste direkt mit Punkt 4 fort (prüfen, ob Netcat installiert ist). Führen Sie ein Upgrade auf Pro durch, um die Installation von Netcat selbst zu üben.

Nur für Pro-Benutzer

Sobald das Terminal geöffnet ist, müssen wir zunächst die Paketlisten aktualisieren. So stellen wir sicher, dass wir die neueste Version von Netcat erhalten. Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

sudo apt update

Das System fordert Sie möglicherweise zur Eingabe Ihres Passworts auf. Geben Sie es ein – während der Eingabe werden keine Zeichen angezeigt – und drücken Sie die Eingabetaste. Der Bestandteil sudo bedeutet, dass der Befehl mit Administratorrechten ausgeführt wird.

Nachdem die Paketlisten aktualisiert wurden, können wir Netcat installieren. Der Paketmanager kümmert sich automatisch um alle Abhängigkeiten. Geben Sie den folgenden Befehl ein:

sudo apt install netcat -y

Die Option -y beantwortet alle Rückfragen automatisch mit „yes“ und sorgt dadurch für einen reibungsloseren Installationsvorgang. Das ist praktisch, wenn Sie sicher sind, dass Sie das Paket installieren möchten.

Nach Abschluss der Installation prüfen wir, ob Netcat korrekt installiert wurde. Dazu lassen wir uns die Hilfe anzeigen. Geben Sie Folgendes ein:
nc -h

Die Ausgabe sollte mit „OpenBSD netcat“ beginnen und anschließend eine Liste von Optionen enthalten. Das bedeutet, dass Netcat installiert und einsatzbereit ist. Die Option -h zeigt die Hilfeinformationen an und eignet sich daher gut, um zu prüfen, ob ein Programm ordnungsgemäß funktioniert.

Herzlichen Glückwunsch! Sie haben gerade ein leistungsfähiges Netzwerkwerkzeug installiert. Netcat bietet zahlreiche Funktionen – von der einfachen Dateiübertragung bis zum Aufbau von Netzwerkverbindungen. In diesem Lab konzentrieren wir uns auf die grundlegende Verwendung, damit Sie seine Möglichkeiten verstehen. Stellen Sie sich Netcat als eine einfache Möglichkeit vor, Computer miteinander zu verbinden und Informationen zwischen ihnen auszutauschen.

Ports verstehen und einen Listener einrichten

Nachdem unser Kommunikationswerkzeug bereitsteht, lernen wir in diesem Schritt Ports kennen und richten einen Listener ein. In Netzwerken sind Ports mit verschiedenen Radiokanälen vergleichbar: Sie ermöglichen mehrere gleichzeitig stattfindende Kommunikationsvorgänge auf demselben Gerät. Man kann sie sich als nummerierte Türen vorstellen, hinter denen jeweils ein anderer Dienst oder eine andere Anwendung auf Ihrem Computer erreichbar ist.

Erstellen wir nun einen Listener. Für unsere Kommunikation verwenden wir Port 12345. Portnummern reichen von 0 bis 65535. Wir wählen 12345, weil die Nummer leicht zu merken ist und normalerweise nicht von Systemdiensten verwendet wird. Geben Sie im Terminal Folgendes ein:

nc -l 12345

Dieser Befehl weist Netcat an, an Port 12345 auf Verbindungen zu warten (Option -l). -l steht für den „listen“-Modus. Der Computer wartet dabei auf eingehende Verbindungen an diesem Port.

Das Terminal scheint nun nicht mehr zu reagieren. Keine Sorge – das ist das erwartete Verhalten. Netcat überwacht den Port aktiv und wartet darauf, dass jemand eine Verbindung zu Port 12345 herstellt. Der blinkende Cursor zeigt an, dass das Programm ordnungsgemäß im Listening-Modus läuft.

Um unseren Listener zu testen, öffnen wir ein weiteres Terminalfenster. Klicken Sie dazu mit der rechten Maustaste auf das Terminalsymbol und wählen Sie „New Terminal“, oder verwenden Sie das Tastenkürzel Strg+Umschalt+N. Dieses zweite Terminal fungiert als „Client“, der eine Verbindung zum Listener herstellt.

In diesem neuen Terminal verbinden wir uns mit dem Listener. Geben Sie Folgendes ein:

nc localhost 12345

Dieser Befehl weist Netcat an, eine Verbindung zu localhost (also zu Ihrem eigenen Computer) an Port 12345 herzustellen. localhost ist ein spezieller Hostname, der immer auf das aktuelle Gerät verweist.

Geben Sie nun im zweiten Terminal eine einfache Nachricht wie „Hello“ ein und drücken Sie die Eingabetaste. Die Nachricht sollte im ersten Terminal erscheinen, in dem der Listener ausgeführt wird. Damit sehen Sie, wie Daten über den Netzwerkport vom verbindenden zum wartenden Terminal übertragen werden.

Netcat-Listener und Verbindung

Sie können in beiden Terminals weitere Nachrichten eingeben. Diese erscheinen jeweils im anderen Terminal. Das zeigt die Vollduplex-Fähigkeit von Netcat: Die Kommunikation kann gleichzeitig in beide Richtungen fließen. Probieren Sie einige Nachrichten in beide Richtungen aus.

Um die Verbindung zu beenden, drücken Sie in beiden Terminals Strg+C. Dieses Tastenkürzel sendet ein Unterbrechungssignal und beendet die Netcat-Sitzungen ordnungsgemäß. Es ist wichtig, Verbindungen nach dem Testen sauber zu schließen.

Dateien mit Netcat übertragen

Nachdem wir gelernt haben, wie sich mit Netcat eine grundlegende Netzwerkkommunikation aufbauen lässt, erkunden wir nun eine seiner praktischsten Anwendungen: die Übertragung von Dateien zwischen Systemen. Diese einfache, aber leistungsfähige Funktion macht Netcat zu einem wertvollen Werkzeug für Systemadministratoren und Netzwerkingenieure.

Zunächst erstellen wir eine Beispieldatei für die Übertragung. Geben Sie im Terminal Folgendes ein:

cd ~/project
echo "Top Secret: The cake recipe is actually a lie" > secret.txt

Dieser Befehl führt zwei Aktionen aus: Er wechselt in Ihr Projektverzeichnis und erstellt eine neue Datei namens secret.txt, die unsere Beispielnachricht enthält. Das Symbol > leitet die Ausgabe des Befehls echo in eine Datei um.

Nun richten wir die empfangende Seite der Dateiübertragung ein. Öffnen Sie ein Terminalfenster und führen Sie Folgendes aus:

cd ~/project
nc -l 12345 > received_secret.txt

Hier startet nc -l 12345 Netcat im Listening-Modus an Port 12345. Das Symbol > leitet alle eingehenden Daten in eine neue Datei namens received_secret.txt um. Dieses Terminal wartet nun still auf eingehende Verbindungen.

In einem separaten Terminalfenster – während das erste weiterhin ausgeführt wird – senden wir die Datei:

cd ~/project
nc localhost 12345 < secret.txt

Mit diesem Befehl verbindet sich Netcat an Port 12345 mit unserem Listener (localhost bedeutet „dieser Computer“). Das Symbol < weist Netcat an, secret.txt als Eingabe zu verwenden. Dadurch wird der Inhalt der Datei über die Netzwerkverbindung gesendet.

Die Übertragung erfolgt sofort, da sich beide Seiten auf demselben Computer befinden. Um die erfolgreiche Übertragung zu überprüfen, zeigen Sie den Inhalt der empfangenen Datei an:

cat received_secret.txt

Der Befehl cat gibt den Dateiinhalt aus. Er sollte exakt mit unserer ursprünglichen geheimen Nachricht übereinstimmen.

Screenshot der Dateiübertragung mit Netcat

Herzlichen Glückwunsch! Sie haben erfolgreich eine Datei mit Netcat übertragen. Für diese Demonstration haben wir localhost verwendet. Derselbe Ablauf funktioniert jedoch auch zwischen verschiedenen Computern in einem Netzwerk – ersetzen Sie localhost einfach durch die IP-Adresse des empfangenden Computers. Diese unkomplizierte Methode kann sich als äußerst nützlich erweisen, wenn schnell Dateien übertragen werden müssen und keine komplexeren Protokolle zur Verfügung stehen.

Verschlüsselte Kommunikation umsetzen

In diesem Schritt ergänzen wir unsere Kommunikation um eine Sicherheitsebene. Dazu verschlüsseln wir Nachrichten mit OpenSSL und verbinden die Verschlüsselung mit Netcat. Verschlüsselung ist unerlässlich, um vertrauliche Informationen während der Übertragung im Netzwerk vor dem Abfangen und Lesen durch Unbefugte zu schützen.

In den vorherigen Labs haben wir bereits gelernt, wie OpenSSL verwendet wird. OpenSSL stellt leistungsfähige kryptografische Funktionen bereit, mit denen wir unsere Nachrichten absichern. Konkret verwenden wir den Befehl openssl enc, um Nachrichten mit der Chiffre AES-256-CBC zu verschlüsseln und zu entschlüsseln. Dabei handelt es sich um einen starken symmetrischen Verschlüsselungsalgorithmus. Außerdem verwenden wir eine Passphrase, aus der der Verschlüsselungsschlüssel abgeleitet wird – betrachten Sie sie als gemeinsam genutztes Geheimnis zwischen Sender und Empfänger.

Zuerst erstellen wir das Senderskript. Dieses Skript übernimmt die Verschlüsselung und den Versand von Nachrichten. Öffnen Sie eine neue Datei namens secure_sender.sh:

nano secure_sender.sh

Fügen Sie den folgenden Inhalt in die Datei ein (Sie können ihn kopieren und einfügen):

#!/bin/bash

echo "Secure Sender - Enter messages to send. Press Ctrl+C to exit."

while true; do
  echo "Enter message:"
  read message
  encrypted=$(echo "$message" | openssl enc -aes-256-cbc -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
  echo "$encrypted" | nc -N localhost 12345
done

Das Skript funktioniert folgendermaßen:

  • Es fordert in einer Endlosschleife kontinuierlich zur Eingabe von Nachrichten auf.
  • Es leitet Ihre Eingabe zur Verschlüsselung durch OpenSSL.
  • Es verwendet Netcat (nc), um die verschlüsselten Daten an Port 12345 auf localhost zu senden.
  • Die Verschlüsselungsparameter umfassen ein Salt für zusätzliche Sicherheit, eine Base64-Kodierung für die sichere Übertragung sowie die Schlüsselableitung mit PBKDF2 und 10.000 Iterationen.

Beispiel für ein sicheres Senderskript

Drücken Sie Strg+X, anschließend Y und die Eingabetaste, um die Datei zu speichern und zu schließen. Machen Sie das Skript ausführbar:

chmod +x secure_sender.sh

Nun erstellen wir das Empfängerskript. Dieses Skript wartet auf eingehende Nachrichten und entschlüsselt sie. Öffnen Sie eine neue Datei namens secure_receiver.sh:

nano secure_receiver.sh

Fügen Sie den folgenden Inhalt ein:

#!/bin/bash

echo "Secure Receiver - Waiting for messages. Press Ctrl+C to exit."

while true; do
  encrypted=$(nc -l 12345)
  if [ ! -z "$encrypted" ]; then
    decrypted=$(echo "$encrypted" | openssl enc -aes-256-cbc -d -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
    echo "Received message: $decrypted"
  fi
done

In der für dieses Lab verwendeten Ubuntu-22.04-Umgebung lautet die Syntax für einen Listener mit dem standardmäßig eingesetzten OpenBSD Netcat nc -l 12345. Fügen Sie bei Verwendung von -l hier kein -p hinzu.

Das Skript:

  • überwacht Port 12345 kontinuierlich auf eingehende Daten,
  • leitet empfangene Daten zur Entschlüsselung durch OpenSSL,
  • verwendet dieselben Verschlüsselungsparameter wie der Sender, um die Nachricht korrekt zu entschlüsseln,
  • zeigt die ursprüngliche Klartextnachricht an.

Drücken Sie Strg+X, anschließend Y und die Eingabetaste, um die Datei zu speichern und zu schließen. Machen Sie das Skript ausführbar:

chmod +x secure_receiver.sh

Nun testen wir unser verschlüsseltes Kommunikationssystem. Sie benötigen zwei gleichzeitig geöffnete Terminalfenster – eines für den Empfänger und eines für den Sender.

Starten Sie im ersten Terminal den Empfänger:

./secure_receiver.sh

Eine Meldung zeigt an, dass der Empfänger auf Nachrichten wartet. Der Empfänger überwacht nun aktiv Port 12345.

Starten Sie im zweiten Terminal den Sender:

./secure_sender.sh

Sie werden zur Eingabe von Nachrichten aufgefordert. Alles, was Sie hier eingeben, wird vor dem Versand über das Netzwerk verschlüsselt.

Geben Sie im Senderterminal eine Nachricht ein und drücken Sie die Eingabetaste. Die verschlüsselte Nachricht wird gesendet. Während der Übertragung sehen Sie kurzzeitig nur die verschlüsselte Version.

Verschlüsselte Nachricht

Im Empfängerterminal sollte die entschlüsselte Nachricht genau so erscheinen, wie Sie sie im Senderterminal eingegeben haben.

Sie können im Senderterminal weitere Nachrichten eingeben. Diese werden automatisch verschlüsselt, gesendet, empfangen und im Empfängerterminal entschlüsselt. Damit wird ein vollständiger sicherer Kommunikationsablauf demonstriert.

Um die Kommunikation zu beenden, drücken Sie in beiden Terminals Strg+C. Dadurch werden beide Skripte sicher beendet.

Diese Konfiguration zeigt ein einfaches, aber wirksames System für verschlüsselte Kommunikation. Obwohl wir für den Test localhost verwenden, funktioniert derselbe Ansatz auch über Netzwerke hinweg. Die Nachrichten werden vor der Übertragung automatisch verschlüsselt und beim Empfang entschlüsselt, wodurch ein sicherer Kommunikationskanal entsteht. In realen Anwendungen sollten Sie für den Schlüsselaustausch jedoch sicherere Verfahren als ein fest im Skript hinterlegtes Passwort verwenden.

Zusammenfassung

In diesem Lab haben Sie die Grundlagen der Netzwerkkommunikation mit Netcat kennengelernt und grundlegende Verschlüsselungsverfahren für die sichere Datenübertragung erkundet. Sie haben Netcat installiert, Verbindungen über bestimmte Ports hergestellt und Dateien zwischen Systemen übertragen.

Diese praktische Erfahrung hat anhand der Umsetzung mit OpenSSL die Bedeutung der Verschlüsselung in der Netzwerkkommunikation verdeutlicht. Die erworbenen Grundlagen bieten einen soliden Ausgangspunkt, um komplexere Konzepte der Cybersicherheit und sichere Kommunikationsprotokolle zu verstehen.