knockd: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
K (hat "Knock" nach "knock" verschoben)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Der [[Daemon]] <b>Knock</b> ist ein [[Portknocker]], der auf einer [[Ethernet]]- oder [[PPP]]-Schnittstelle nach bestimmten Reihenfolgen von "Klopflauten" lauscht. Ein Client erzeugt diese "Klopflaute" durch das Senden eines [[TCP]]- oder [[UDP]]-Pakets an einen [[Port]] des Rechners. Dieser Port braucht nicht offenzustehen, da Knock auf der Link-Layer-Stufe lauscht und so allen Verkehr sieht, selbst wenn er für einen geschlossenen Port bestimmt ist. Entdeckt knockd eine bestimmte Reihenfolge von "Klopflauten", so wird ein in der Konfigurationsdatei bestimmter Befehl ausgeführt. Dieses Verhalten kann genutzt werden, um für raschen Zugang Löcher in einer Firewall zu öffnen.
Der [[Daemon]] <b>knock</b> (dt. "klopfen") ist ein [[Portknocker]], der auf einer [[Ethernet]]- oder [[PPP]]-Schnittstelle nach bestimmten Reihenfolgen von "Klopflauten" lauscht. Ein Client erzeugt diese "Klopflaute" durch das Senden eines [[TCP]]- oder [[UDP]]-Pakets an einen [[Port]] des Rechners. Dieser Port braucht nicht offenzustehen, da Knock auf der Link-Layer-Stufe lauscht und so allen Verkehr sieht, selbst wenn er für einen geschlossenen Port bestimmt ist. Entdeckt knockd eine bestimmte Reihenfolge von "Klopflauten", so wird ein in der Konfigurationsdatei bestimmter Befehl ausgeführt. Dieses Verhalten kann genutzt werden, um für raschen Zugang Löcher in einer Firewall zu öffnen.


== Funktionsweise ==
== Funktionsweise ==

Version vom 25. Januar 2009, 20:50 Uhr

Der Daemon knock (dt. "klopfen") ist ein Portknocker, der auf einer Ethernet- oder PPP-Schnittstelle nach bestimmten Reihenfolgen von "Klopflauten" lauscht. Ein Client erzeugt diese "Klopflaute" durch das Senden eines TCP- oder UDP-Pakets an einen Port des Rechners. Dieser Port braucht nicht offenzustehen, da Knock auf der Link-Layer-Stufe lauscht und so allen Verkehr sieht, selbst wenn er für einen geschlossenen Port bestimmt ist. Entdeckt knockd eine bestimmte Reihenfolge von "Klopflauten", so wird ein in der Konfigurationsdatei bestimmter Befehl ausgeführt. Dieses Verhalten kann genutzt werden, um für raschen Zugang Löcher in einer Firewall zu öffnen.

Funktionsweise

Der Daemon knockd öffnet beim Start einen Raw-Socket und registriert alle an der Netzwerkschnittstelle ein- und ausgehenden Pakete, unabhängig von der Konfiguration der Firewall. Empfängt knockd eine bestimmte Reihenfolge von Paketen, die besondere Merkmale im Protokoll, Port und Flag aufweist, so wird die Firewall mit einer entsprechenden Regel geöffnet.

Auf welche Pakete der Daemon knockd reagiert und welche Aktion er ausführt, wird in der Konfiguration festgelegt. Die Möglichkeiten reichen dabei vom Freischalten eines SSH-Zugangs zu Fernwartungszwecken bis hin zur Abfrage des heimischen Mailservers über POP3 oder IMAP.

Wird die Verbindung nicht mehr benötigt, so wird sie mit Hilfe von knockd wieder geschlossen, allerdings mit einer anderen Reihenfolge von Klopflauten.

Knock hat auch eine Schwachstelle: Ein Angreifer kann mit einem Sniffer erst den Datenverkehr zwischen Client und Server abhören und ihn dann analysieren. So kann er dem Einsatz des Portknockers auf die Spur kommen und findet auch die konkrete Knock-Reihenfolge. Um das zu erschweren, erlaubt Knock, die Knock-Reihenfolge beliebig zu erweitern und ausserdem innerhalb der Reihenfolge wechselnde Protokolle zu verwenden.

Noch sicherer arbeitet Knock mit wechselnden und einmaligen Knock-Reihenfolgen - ähnlich einer TAN. Die in einer Textdatei hinterlegten Trigger werden vom Programm eines nach dem anderen abgearbeitet und bereits benutzte Zeilen automatisch auskommentiert.

Installation

Knock ist bei den Distributionen Debian, Ubuntu und OpenSuse in den Repositories enthalten und kann über den Paketmanager der jeweiligen Distribution installiert werden.

Zur Nutzung von Knock muss auf den zugreifenden Rechnern ausserdem der Knock-Client installiert werden.

Konfiguration

Die Konfiguration findet in der Datei "/etc/knockd.conf" statt.

Der Abschnitt "[options]" legt standardmässig fest, dass sich die Logdatei von Knock im Verzeichnis "/var/log" befindet und dass knockd standardmässig an der Netzwerkschnittstelle "eth0" lauscht - normalerweise also am ersten kabelgebundenen Netzwerkanschluss.

Der Abschnitt "[openSSH]" bestimmt die Reihenfolge der "Klopflaute" sowie - in Form einer Firewallregel - die damit verbundene Aktion, also z. B. das Öffnen von Port 22 sowie das Setzen der entsprechenden TCP-Flags. Die Reihenfolge zum Schliessen des Ports und den zugehörigen Löschbefehl an die Firewall wird im Abschnitt "[closeSSH]" festgelegt.

Eine mögliche Konfiguration kann wie folgt aussehen.

[options]
logfile     = /var/log/knockd.log
interface   = eth0

[openSSH]
sequence    = 7000,8000,9000
seq_timeout = 5
command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags    = syn

[closeSSH]
sequence    = 9000,8000,7000
seq_timeout = 5
command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags    = syn

Sollen wechselnde Protokolle verwendet werden, so können dafür die Protokollbezeichnungen "tcp" und "udp" hinter den zugehörigen Portnummern eingefügt werden.

sequence = 9000:udp,8000:tcp,7000:tcp

Zur Verwendung wechselnder Knock-Reihenfolgen wird der folgende Eintrag verwendet.

one_time_sequences /path/to/textfile

Verwendung

Starten des Daemons knockd.

# knockd -d

Beispiel

Für einen Test wird als Client Xubuntu, als Server Debian verwendet. Mit Hilfe der Fernsteuerungssoftware NIX wird über eine verschlüsselte SSH-Verbindung Debians GNOME-Arbeitsoberfläche auf den Xubuntu-Rechner geholt.

Ein erster Scan mit Nmap bestätigt, das alle Port der Firewall auf dem Debian-Rechner geschlossen sind. Das auf dem Debian-Rechner gestartete Firewall-Frontend Firestarter gibt grafisch und in Echtzeit Auskunft über ungewöhnliche Ereignisse an der Netzwerkschnittstelle.

Die Eingabe des folgenden Befehls auf dem Client sendet die notwendige Klopfsequenz an den Knock-Server, was Firestarter sofort als Ereignis registriert.

$ knock -v <IP-Adresse des Servers> <Port 1> <Port 2> <Port 3>

knockd interpretiert die Reihenfolge korrekt und öffnet den Port 22, sodass eine Anmeldung über SSH möglich ist.

Weblinks

  • Knock (Zeroflux.org) - offizielle Homepage