knockd: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: Der Daemon <b>Knock</b> ist ein Portknocker, der auf einer Ethernet- oder PPP-Schnittstelle nach bestimmten Reihenfolgen von "Klopflauten" lauscht. Ein ...)
 
Keine Bearbeitungszusammenfassung
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
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>knockd</b> (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 ==
== 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.
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.
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.
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.
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 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.
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 ==
== Installation ==


Knock ist bei den Distributionen Debian, Ubuntu und OpenSuse in den Repositories enthalten und kann über den Paketmanager der jeweiligen Distribution installiert werden.
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 Knock muss auf den zugreifenden Rechnern ausserdem der Knock-Client installiert werden.
Zur Nutzung von knockd muss auf den zugreifenden Rechnern ausserdem der Knock-Client installiert werden.


== Konfiguration ==
== Konfiguration ==
Zeile 23: Zeile 23:
Die Konfiguration findet in der Datei "/etc/knockd.conf" statt.
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 "[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.
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.
Zeile 61: Zeile 61:
=== Beispiel ===
=== 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.
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.
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.
Die Eingabe des folgenden Befehls auf dem Client sendet die notwendige Klopfsequenz an knockd, was Firestarter sofort als Ereignis registriert.


  $ <b>knock -v <IP-Adresse des Servers> <Port 1> <Port 2> <Port 3></b>
  $ <b>knock -v <IP-Adresse des Servers> <Port 1> <Port 2> <Port 3></b>
Zeile 73: Zeile 73:
== Weblinks ==
== Weblinks ==


* [http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki Knock] (Zeroflux.org) - offizielle Homepage
{{Weblinks}}
{{url|CA|Zeroflux|eng|http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki|Knock|Offizielle Homepage}}
{{Fuss}}





Aktuelle Version vom 6. August 2011, 16:01 Uhr

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