Port knocking erklärt
Port knocking hält einen Dienst unsichtbar, bis jemand beweist, dass er ein Geheimnis kennt. Dieser Leitfaden erklärt die Funktionsweise, die beiden verbreiteten Implementierungen — knockd und fwknop — und warum Klopfversuche in der Praxis fehlschlagen.
So funktioniert Port knocking
Die Firewall verwirft jede Verbindung zum geschützten Port, sodass ein Scanner nichts erkennt. Ein kleiner Daemon überwacht den Datenverkehr an der Firewall. Wenn eine Quelladresse das erwartete Muster erzeugt, fügt der Daemon eine Firewall-Regel hinzu, die diese Adresse zulässt, meist für kurze Zeit.
Das Muster ist das Klopfen. Bei knockd ist es eine Sequenz von Verbindungsversuchen zu bestimmten Ports in einer bestimmten Reihenfolge und innerhalb eines Zeitlimits. Bei fwknop ist es ein einzelnes verschlüsseltes Paket.
knockd: Klopfsequenzen
knockd überwacht eine Schnittstelle und gleicht Verbindungsversuche mit den Sequenzen in /etc/knockd.conf ab. Eine Sequenz kann TCP- und UDP-Ports kombinieren. Bei einer Übereinstimmung führt knockd einen Befehl aus — typischerweise eine iptables- oder nftables-Regel für die klopfende Adresse (%IP%).
Dieses Beispiel öffnet SSH für die klopfende Adresse und schließt es nach 10 Sekunden wieder. Bestehende SSH-Sitzungen funktionieren weiter, wenn deine Firewall bereits bestehende Verbindungen akzeptiert.
[options]
UseSyslog
[openSSH]
sequence = 7311:tcp,8822:tcp,9133:udp
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 10
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT Wähle eigene Ports und verwende niemals Ports aus veröffentlichten Beispielen wieder. tcpflags = syn lässt knockd nur Pakete mit dem SYN-Flag zählen — das erste Paket eines Verbindungsversuchs.
fwknop: Single Packet Authorization
fwknop ersetzt die Sequenz durch ein UDP-Paket, das verschlüsselt (AES) und mit HMAC authentifiziert ist. Der Server, fwknopd, erfasst es passiv, prüft es, kontrolliert, dass es sich nicht um eine Wiederholung handelt, und öffnet den angeforderten Port für die im Paket enthaltene Adresse.
Erzeuge Schlüssel mit fwknop --key-gen und hinterlege sie in der access.conf des Servers. Secret Knock importiert die Client-Seite aus deiner .fwknoprc.
SOURCE ANY
OPEN_PORTS tcp/22
KEY_BASE64 <output of fwknop --key-gen>
HMAC_KEY_BASE64 <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT 30 Da die erlaubte Adresse im verschlüsselten Paket enthalten ist, kann SPA einen Port für eine andere Adresse öffnen als die, die das Paket sendet — praktisch, wenn du von einem Mobiltelefon über mobile Daten für einen Laptop an einem anderen Ort klopfst.
Warum Klopfversuche fehlschlagen
- IPv4 oder IPv6: Das Klopfen wurde über eine Adressfamilie gesendet, SSH verbindet aber über die andere. Die Firewall hat die Tür für eine Adresse geöffnet, die du nicht verwendest.
- Eine andere öffentliche Adresse: Über mobile Daten, hinter Carrier-NAT oder einem VPN sieht der Server eine andere IP als erwartet. Prüfe die Adresse, von der du klopfst.
- Erneut übertragene SYNs: Wenn ein TCP-Klopfen nicht beantwortet wird, sendet das Betriebssystem des Clients dasselbe SYN erneut. In unseren Tests setzte knockd 0.8 die Sequenz bei einem solchen wiederholten SYN zurück. Ein Client muss daher jedes Klopfen einmal senden und den Versuch schnell beenden.
- Zeitsteuerung: Klopfversuche, die außerhalb von seq_timeout oder in der falschen Reihenfolge eintreffen, starten die Sequenz neu.
- Zwischensysteme: Einige Netzwerke blockieren oder verändern Datenverkehr zu ungewöhnlichen Ports. Ein Klopfen, das zu Hause funktioniert, kann daher in einem Hotel- oder Büronetzwerk fehlschlagen.
Ist es sicher?
Eine knockd-Sequenz wird unverschlüsselt gesendet; jeder, der deinen Datenverkehr beobachten kann, kann sie wiederholen. Verwende sie, um einen Dienst vor Scannern zu verbergen, zusätzlich zu SSH-Schlüsseln — nicht anstelle davon. fwknop SPA schließt diese Lücke mit Verschlüsselung, HMAC und Schutz vor Wiederholungen und ist die bessere Wahl, wenn dein Datenverkehr beobachtet werden könnte.
Klopfen von iPhone, Mac und Apple Watch
Secret Knock sendet knockd-Sequenzen und fwknop SPA-Pakete von iPhone, iPad und Mac, prüft, ob der Port antwortet, und öffnet deine SSH-App. Die Apple Watch klopft über das gekoppelte iPhone, da watchOS Apps nicht erlaubt, rohe TCP- oder UDP-Pakete zu senden; ohne iPhone kann sie SPA über HTTP an Server senden, die dies aktivieren.
Anleitungen für dein Setup
- knockd auf iPhone, iPad und Mac →
- fwknop SPA auf iPhone, Mac und Apple Watch →
- MikroTik-Port-Knocking →
- DrayTek Vigor Port Knocking →
- SSH hinter Port Knocking verbergen →
- Port Knocking auf der Apple Watch →
- Warum ein Port-Knock nicht öffnet →
- knockd.conf-Beispiele →
- fwknop-Server einrichten →
- Port Knocking, VPN oder fail2ban? →
Halte die Tür geschlossen. Nimm das Klopfen mit.
Secret Knock kommt in den App Store für iPhone, iPad, Mac und Apple Watch.
Secret Knock →