Prečo zaklopanie neotvorí dvere
Zaklopanie buď vôbec nedorazí na server, dorazí v podobe, ktorú démon neprijíma, alebo otvorí dvere pre adresu, ktorú nepoužívate. Prejdite si zoznam zhora nadol — je zoradený podľa toho, ako často sa jednotlivé príčiny vyskytujú.
1. Dvere sa otvorili pre inú adresu
Firewall otvorí port pre zdrojovú adresu, ktorú server videl. Ak ste zaklopali cez IPv6 a SSH sa potom pripája cez IPv4 — alebo naopak — dvere sú otvorené pre adresu, ktorú nepoužívate. Adresu menia aj mobilné dáta, NAT operátora a VPN.
Porovnajte adresu, ktorú Secret Knock zobrazuje na domovskej obrazovke ("Klopete z adresy …"), s adresou v denníku servera a ak sa líšia, pre dvere napevno nastavte IPv4 alebo IPv6.
2. Pakety nedorazia na server
Hotelové, kancelárske a mobilné siete niekedy blokujú nezvyčajné porty a cloudový firewall pred serverom zahodí pakety skôr, než ich uvidí knockd alebo fwknopd. Počas zaklopania sledujte prevádzku na serveri:
# 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. Sekvencia dorazí v nesprávnej podobe
- 1Opätovne odoslané SYN: keď TCP zaklopanie nedostane odpoveď, operačný systém klienta znovu odošle rovnaké SYN. knockd 0.8 pri takomto opakovaní resetuje sekvenciu. Secret Knock odošle každé TCP zaklopanie ako jedno SYN a pokus okamžite ukončí; iní klienti to nemusia robiť.
- 2Časovanie: všetky kroky musia prísť v poradí v rámci seq_timeout. Ak smerovač medzi nimi preusporadúva pakety, pred krokom pridajte krátke oneskorenie.
- 3Protokol: krok UDP sa musí odoslať ako UDP, krok TCP ako TCP — každý krok skontrolujte podľa knockd.conf.
- 4tcpflags = syn spôsobí, že knockd ignoruje TCP pakety bez príznaku SYN. Bez neho sa za zásahy považujú aj ostatné pakety spojenia s rovnakým portom a môžu narušiť sekvenciu.
4. fwknop: kľúče, hodiny a opakovania
- 1Oba kľúče sa musia zhodovať s access.conf: kľúč Rijndael a Kľúč HMAC s rovnakým digestom (štandardne SHA-256).
- 2fwknopd odmieta pakety staršie ako MAX_SPA_PACKET_AGE (štandardne 120 sekúnd), takže výrazne nesprávne hodiny zariadenia spôsobia, že každý paket bude vyzerať ako starý.
- 3Každý paket SPA možno použiť iba raz; fwknopd opakovane odoslaný paket zámerne zahodí.
- 4Ak klopete cez HTTP, niečo musí na danom porte prijímať TCP spojenia, inak sa požiadavka nikdy neodošle.
5. Dvere sa otvoria, ale SSH stále zlyháva
- 1Poradie pravidiel: pravidlo, ktoré démon pridá, musí byť pred pravidlom, ktoré port zahadzuje — iptables -A ho pridá za existujúce DROP, takže sa nikdy nezhoduje.
- 2Časové okno: cmd_timeout alebo FW_ACCESS_TIMEOUT zavrelo dvere pred pripojením SSH. Pripojte sa v rámci okna; existujúce relácie fungujú ďalej, ak firewall prijíma nadviazané spojenia.
- 3Kontrola portu v Secret Knock po zaklopaní vám samostatne od overenia SSH povie, či port vôbec odpovedal.
Všetky príklady na GitHube → Každá konfigurácia z tejto stránky pripravená na skopírovanie: github.com/mobilcomm/secretknock-examples (voľné dielo).
Otázky
Ako zistím, čo aplikácia skutočne odoslala?
História dverí zobrazuje každé zaklopanie s časom, výsledkom a rodinou adries. Editor zobrazuje rovnaké zaklopanie aj ako príkaz terminálu, ktorý môžete spustiť z počítača na porovnanie.
Návody pre vašu konfiguráciu
- Vysvetlenie techniky port knocking →
- knockd na iPhone, iPade a Macu →
- fwknop SPA na iPhone, Macu a Apple Watch →
- Port knocking pre MikroTik →
- Zaklopanie na porty DrayTek Vigor →
- Skryte SSH pomocou port knockingu →
- Port knocking na Apple Watch →
- Príklady knockd.conf →
- nastavenie servera fwknop →
- Port knocking, VPN alebo fail2ban? →