knockd

Aus Mikiwiki
Version vom 6. August 2011, 16:01 Uhr von Michi (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Der Daemon knockd (dt. "klopfen") ist ein Portknocker, der auf einer Netzwerkschnittstelle (Ethernet, PPP) 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 knockd auf der Link-Layer-Stufe lauscht und so allen Verkehr sieht, selbst wenn er für einen geschlossenen Port bestimmt ist. Entdeckt der Daemon 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

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 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.

knockd 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 "Klopf-Reihenfolge". Um das zu erschweren, erlaubt knockd, die "Klopf-Reihenfolge" beliebig zu erweitern und ausserdem innerhalb der Reihenfolge wechselnde Protokolle zu verwenden.

Noch sicherer arbeitet knockd mit wechselnden und einmaligen "Klopf-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

knockd ist bei den Distributionen Debian, Ubuntu und Opensuse in den Repositories enthalten und kann über die Paketverwaltung der jeweiligen Distribution installiert werden.

Zur Nutzung von knockd 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 Protokolldatei 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, auf Serverseite 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 knockd, 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

Herausgeber Sprache Webseitentitel Anmerkungen
Zeroflux eng Knockwbm Offizielle Homepage