Varför en portknackning inte öppnar dörren
En knackning når antingen aldrig servern, når den i en form som demonen inte accepterar, eller öppnar dörren för en adress som du inte använder. Gå igenom listan uppifrån och ned — den är sorterad efter hur ofta varje orsak förekommer.
1. Dörren öppnades för en annan adress
Brandväggen öppnar porten för källadressen som servern såg. Om du knackade via IPv6 och sedan ansluter med SSH via IPv4 — eller tvärtom — är dörren öppen för en adress som du inte använder. Mobildata, operatörs-NAT och VPN ändrar också adressen.
Jämför adressen som Secret Knock visar på hemskärmen (”Du knackar från …”) med adressen i serverns logg, och lås IPv4 eller IPv6 för dörren om de skiljer sig åt.
2. Paketen når inte servern
Hotell-, kontors- och mobilnät blockerar ibland ovanliga portar, och en molnbrandvägg framför servern kastar bort paket innan knockd eller fwknopd ser dem. Övervaka trafiken på servern medan du knackar:
# knockd (UseSyslog): every recognised step and the command it ran
sudo journalctl -u knockd -f
# Do the packets reach the server at all? (use your interface and ports)
sudo tcpdump -ni eth0 'tcp port 7311 or tcp port 8822 or udp port 9133'
# fwknopd in the foreground with verbose output
sudo fwknopd -f -v 3. Sekvensen kommer fram i fel form
- 1Återsända SYN: när en TCP-knackning inte får något svar skickar klientens operativsystem samma SYN igen. knockd 0.8 återställer sekvensen vid en sådan upprepning. Secret Knock skickar varje TCP-knackning som ett enda SYN och avbryter försöket direkt; andra klienter kanske inte gör det.
- 2Tidsinställning: alla steg måste komma fram inom seq_timeout, i rätt ordning. Lägg till en kort fördröjning före ett steg om en router däremellan ändrar paketens ordning.
- 3Protokoll: ett UDP-steg måste skickas som UDP och ett TCP-steg som TCP — kontrollera varje steg mot knockd.conf.
- 4tcpflags = syn gör att knockd ignorerar TCP-paket utan SYN-flaggan. Utan det räknas även de andra paketen i en anslutning till samma port som träffar och kan bryta sekvensen.
4. fwknop: nycklar, klockor och upprepningar
- 1Båda nycklarna måste matcha access.conf: Rijndael-nyckeln och HMAC-nyckeln, med samma hashalgoritm (SHA-256 som standard).
- 2fwknopd avvisar paket som är äldre än MAX_SPA_PACKET_AGE (120 sekunder som standard), så en enhetsklocka som går mycket fel gör att varje paket ser gammalt ut.
- 3Varje SPA-paket kan användas en gång; fwknopd kastar med avsikt bort ett paket som spelas upp igen.
- 4Om du knackar via HTTP måste något acceptera TCP-anslutningar på den porten, annars skickas begäran aldrig.
5. Dörren öppnas, men SSH fungerar fortfarande inte
- 1Regelordning: regeln som demonen lägger till måste komma före regeln som blockerar porten — iptables -A lägger till regeln efter en befintlig DROP-regel, så den tillagda regeln matchar aldrig några paket.
- 2Tidsfönstret: cmd_timeout eller FW_ACCESS_TIMEOUT stängde dörren innan SSH anslöt. Anslut inom tidsfönstret; etablerade sessioner fortsätter att fungera om brandväggen accepterar etablerade anslutningar.
- 3Secret Knocks portkontroll efter knackningen visar om porten svarade över huvud taget, separat från SSH-autentisering.
Alla exempel på GitHub → Alla konfigurationer på den här sidan, redo att kopiera: github.com/mobilcomm/secretknock-examples (public domain).
Frågor
Hur ser jag vad appen faktiskt skickade?
Dörrens historik visar varje knackning med tid, resultat och adressfamilj, och redigeraren visar samma knackning som ett terminalkommando som du kan köra från en dator för att jämföra.
Guider för din konfiguration
- Port knocking förklarat →
- knockd på iPhone, iPad och Mac →
- fwknop SPA på iPhone, Mac och Apple Watch →
- MikroTik-portknackning →
- DrayTek Vigor-portknackning →
- Dölj SSH bakom portknackning →
- Port knocking på Apple Watch →
- Exempel på knockd.conf →
- Konfigurera fwknop-server →
- Port knocking, VPN eller fail2ban? →