knockd: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
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 | 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. |
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 |