Prejsť na obsah
Secret Knock

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
Na serveri

3. Sekvencia dorazí v nesprávnej podobe

  1. 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. 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.
  3. 3Protokol: krok UDP sa musí odoslať ako UDP, krok TCP ako TCP — každý krok skontrolujte podľa knockd.conf.
  4. 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

  1. 1Oba kľúče sa musia zhodovať s access.conf: kľúč Rijndael a Kľúč HMAC s rovnakým digestom (štandardne SHA-256).
  2. 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ý.
  3. 3Každý paket SPA možno použiť iba raz; fwknopd opakovane odoslaný paket zámerne zahodí.
  4. 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

  1. 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. 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.
  3. 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