Salt la conținut
Secret Knock

De ce o bătaie la port nu deschide ușa

O bătaie fie nu ajunge niciodată la server, ajunge într-o formă pe care daemonul nu o acceptă sau deschide ușa pentru o adresă pe care nu o utilizați. Parcurgeți lista de sus în jos — este ordonată după frecvența cu care apare fiecare cauză.

1. Ușa s-a deschis pentru altă adresă

Firewallul deschide portul pentru adresa sursă văzută de server. Dacă ați bătut prin IPv6, iar SSH se conectează apoi prin IPv4 — sau invers — ușa este deschisă pentru o adresă pe care nu o utilizați. Datele mobile, NAT-ul operatorului și VPN-urile pot schimba, de asemenea, adresa.

Comparați adresa afișată de Secret Knock pe ecranul principal („Bateți de la …”) cu adresa din jurnalul serverului și fixați IPv4 sau IPv6 pentru ușă dacă acestea diferă.

2. Pachetele nu ajung la server

Rețelele de hotel, birou și mobile blochează uneori porturile neobișnuite, iar un firewall cloud din fața serverului elimină pachetele înainte ca knockd sau fwknopd să le vadă. Monitorizați traficul pe server în timp ce bateți:

# 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
Pe server

3. Secvența ajunge într-o formă greșită

  1. 1SYN-uri retransmise: când o bătaie TCP nu primește răspuns, sistemul de operare al clientului retransmite același SYN. knockd 0.8 resetează secvența la o astfel de repetare. Secret Knock trimite fiecare bătaie TCP ca un singur SYN și oprește imediat încercarea; este posibil ca alți clienți să nu facă acest lucru.
  2. 2Temporizare: toate etapele trebuie să ajungă, în ordine, în intervalul seq_timeout. Adăugați o scurtă întârziere înaintea unei etape dacă un router intermediar reordonează pachetele.
  3. 3Protocol: o etapă UDP trebuie trimisă ca UDP, iar una TCP ca TCP — verificați fiecare etapă în knockd.conf.
  4. 4tcpflags = syn face ca knockd să ignore pachetele TCP fără fanionul SYN. Fără aceasta, și celelalte pachete ale unei conexiuni către același port sunt considerate detectări și pot întrerupe secvența.

4. fwknop: chei, ceasuri și atacuri de replay

  1. 1Ambele chei trebuie să corespundă cu access.conf: cheia Rijndael și cheia HMAC, cu același digest (SHA-256 în mod implicit).
  2. 2fwknopd respinge pachetele mai vechi decât MAX_SPA_PACKET_AGE (120 de secunde în mod implicit), astfel că un ceas al dispozitivului mult decalibrat face ca fiecare pachet să pară vechi.
  3. 3Fiecare pachet SPA poate fi utilizat o singură dată; fwknopd elimină intenționat un pachet reutilizat.
  4. 4Dacă bateți prin HTTP, ceva trebuie să accepte conexiuni TCP pe acel port, altfel solicitarea nu este trimisă niciodată.

5. Ușa se deschide, dar SSH tot eșuează

  1. 1Ordinea regulilor: regula adăugată de daemon trebuie să fie înaintea regulii care blochează traficul către port — iptables -A o adaugă după un DROP existent și nu se va potrivi niciodată.
  2. 2Fereastra: cmd_timeout sau FW_ACCESS_TIMEOUT a închis ușa înainte ca SSH să se conecteze. Conectați-vă în intervalul respectiv; sesiunile stabilite continuă să funcționeze dacă firewallul acceptă conexiunile stabilite.
  3. 3Verificarea portului realizată de Secret Knock după bătaie vă spune dacă portul a răspuns, separat de autentificarea SSH.

Toate exemplele pe GitHub → Fiecare configurație de pe această pagină, gata de copiat: github.com/mobilcomm/secretknock-examples (domeniu public).

Întrebări

Cum văd ce a trimis efectiv aplicația?

Istoricul ușii afișează fiecare bătaie cu ora, rezultatul și familia de adrese, iar editorul afișează aceeași bătaie ca o comandă de terminal pe care o puteți rula de pe un computer pentru comparație.

Ghiduri pentru configurarea ta