Přejít na obsah
Secret Knock

Proč zaklepání na port neotevře dveře

Zaklepání buď nikdy nedorazí na server, dorazí ve tvaru, který démon nepřijme, nebo otevře dveře pro adresu, kterou nepoužíváte. Projděte seznam od začátku — je seřazený podle toho, jak často se jednotlivé příčiny vyskytují.

1. Dveře se otevřely pro jinou adresu

Brána firewall otevře port pro zdrojovou adresu, kterou server viděl. Pokud jste zaklepali přes IPv6 a SSH se poté připojuje přes IPv4 — nebo naopak — dveře jsou otevřené pro adresu, kterou nepoužíváte. Adresu mohou změnit také mobilní data, NAT operátora a VPN.

Porovnejte adresu, kterou Secret Knock zobrazuje na domovské obrazovce („Zaklepáváte z …“), s adresou v protokolu serveru. Pokud se liší, pevně nastavte pro dveře IPv4 nebo IPv6.

2. Pakety nedorazí na server

Hotelové, kancelářské a mobilní sítě někdy blokují neobvyklé porty a cloudová brána firewall před serverem zahodí pakety dříve, než je knockd nebo fwknopd uvidí. Při zaklepání sledujte provoz na serveru:

# 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 serveru

3. Sekvence dorazí v nesprávném tvaru

  1. 1Znovu odeslané SYN: když zaklepání TCP nedostane odpověď, operační systém klienta znovu odešle stejný SYN. knockd 0.8 při takovém opakování resetuje sekvenci. Secret Knock odesílá každé zaklepání TCP jako jediný SYN a pokus ihned ukončí; jiní klienti to dělat nemusí.
  2. 2Časování: všechny kroky musí dorazit v pořadí během seq_timeout. Pokud směrovač mezi nimi mění pořadí paketů, přidejte před krok krátké zpoždění.
  3. 3Protokol: krok UDP musí být odeslán jako UDP a krok TCP jako TCP — porovnejte každý krok s knockd.conf.
  4. 4tcpflags = syn způsobí, že knockd ignoruje pakety TCP bez příznaku SYN. Bez něj se jako zásahy počítají i ostatní pakety připojení ke stejnému portu a mohou narušit sekvenci.

4. fwknop: klíče, hodiny a opakování

  1. 1Oba klíče musí odpovídat access.conf: klíč Rijndael i Klíč HMAC se stejným digestem (ve výchozím nastavení SHA-256).
  2. 2fwknopd odmítá pakety starší než MAX_SPA_PACKET_AGE (ve výchozím nastavení 120 sekund), takže při výrazně nepřesných hodinách zařízení vypadá každý paket jako starý.
  3. 3Každý paket SPA lze použít pouze jednou; fwknopd opakovaně přehrávaný paket záměrně zahodí.
  4. 4Pokud zaklepáváte přes HTTP, musí něco přijímat připojení TCP na daném portu, jinak se požadavek nikdy neodešle.

5. Dveře se otevřou, ale SSH stále selže

  1. 1Pořadí pravidel: pravidlo, které démon přidá, musí být před pravidlem zahazujícím port — iptables -A přidá pravidlo za existující DROP a nikdy se neshoduje.
  2. 2Okno: cmd_timeout nebo FW_ACCESS_TIMEOUT zavřel dveře dříve, než se SSH připojilo. Připojte se během tohoto okna; navázaná relace bude dál fungovat, pokud vaše brána firewall přijímá navázaná připojení.
  3. 3Kontrola portu v Secret Knock po zaklepání vám nezávisle na ověřování SSH sdělí, zda port vůbec odpověděl.

Všechny příklady na GitHubu → Každá konfigurace na této stránce připravená ke zkopírování: github.com/mobilcomm/secretknock-examples (public domain).

Otázky

Jak zjistím, co aplikace skutečně odeslala?

Historie dveří zobrazuje každé zaklepání s jeho časem, výsledkem a rodinou adres. Editor zobrazuje stejné zaklepání také jako příkaz pro terminál, který můžete spustit z počítače a porovnat.

Průvodci pro vaše nastavení