Salt la conținut
Secret Knock

Port knocking explicat

Port knocking păstrează un serviciu invizibil până când cineva dovedește că știe un secret. Acest ghid explică modul de funcționare, cele două implementări frecvente — knockd și fwknop — și motivele pentru care bătăile eșuează în practică.

Cum funcționează port knocking

Firewallul respinge fiecare conexiune către portul protejat, astfel încât un scaner nu vede nimic. Un daemon mic urmărește traficul care ajunge la firewall. Când o adresă sursă produce modelul așteptat, daemonul adaugă o regulă de firewall care permite acea adresă, de obicei pentru scurt timp.

Modelul este bătaia. Cu knockd, este o secvență de tentative de conexiune către anumite porturi, într-o anumită ordine și într-o limită de timp. Cu fwknop, este un singur pachet criptat.

knockd: secvențe de bătăi

knockd ascultă pe o interfață și compară tentativele de conexiune cu secvențele din /etc/knockd.conf. O secvență poate combina porturi TCP și UDP. Când există o potrivire, knockd rulează o comandă — de obicei o regulă iptables sau nftables pentru adresa care bate (%IP%).

Acest exemplu deschide SSH pentru adresa care bate și îl închide din nou după 10 secunde. Sesiunile SSH existente continuă să funcționeze dacă firewallul acceptă conexiuni stabilite.

[options]
    UseSyslog

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout   = 10
    stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf — deschide SSH pentru 10 secunde

Alegeți propriile porturi; nu reutilizați niciodată porturi din exemple publicate. tcpflags = syn face ca knockd să numere numai pachetele cu fanionul SYN — primul pachet al unei tentative de conexiune.

fwknop: Single Packet Authorization

fwknop înlocuiește secvența cu un pachet UDP criptat (AES) și autentificat (HMAC). Serverul, fwknopd, îl capturează pasiv, îl verifică, verifică să nu fie o redare și deschide portul solicitat pentru adresa din pachet.

Generați chei cu fwknop --key-gen și introduceți-le în access.conf al serverului. Secret Knock importă partea clientului din .fwknoprc.

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          <output of fwknop --key-gen>
HMAC_KEY_BASE64     <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT   30
/etc/fwknop/access.conf — permite SSH cu o cheie SPA

Deoarece adresa permisă circulă în pachetul criptat, SPA poate deschide un port pentru o adresă diferită de cea care trimite pachetul — util când bateți de pe un telefon cu date mobile pentru un laptop aflat în alt loc.

De ce eșuează bătăile

  • IPv4 vs IPv6: bătaia a plecat printr-o familie de adrese, iar SSH se conectează prin cealaltă. Firewallul a deschis ușa pentru o adresă pe care nu o utilizați.
  • O adresă publică diferită: pe date mobile, în spatele unui NAT de operator sau al unui VPN, serverul vede un alt IP decât vă așteptați. Verificați adresa de la care bateți.
  • SYN retransmise: dacă o bătaie TCP nu primește răspuns, sistemul de operare al clientului trimite din nou același SYN. În testele noastre, knockd 0.8 reseta secvența la un astfel de SYN repetat, deci un client trebuie să trimită fiecare bătaie o singură dată și să oprească rapid tentativa.
  • Temporizare: bătăile care ajung în afara seq_timeout sau în ordine greșită reiau secvența de la început.
  • Echipamente intermediare: unele rețele blochează sau rescriu traficul către porturi neobișnuite, astfel încât o bătaie care funcționează acasă poate eșua într-o rețea de hotel sau birou.

Este sigur?

O secvență knockd este trimisă necriptat; oricine vă poate urmări traficul o poate reda. Folosiți-o pentru a ascunde un serviciu de scanere, în fața cheilor SSH — nu în locul lor. fwknop SPA elimină această problemă prin criptare, HMAC și protecție împotriva redării și este alegerea mai bună când traficul dvs. poate fi observat.

Bătăi de pe iPhone, Mac și Apple Watch

Secret Knock trimite secvențe knockd și pachete fwknop SPA de pe iPhone, iPad și Mac, verifică dacă portul răspunde și deschide aplicația SSH. Apple Watch bate prin iPhone-ul asociat, deoarece watchOS nu permite aplicațiilor să trimită pachete TCP sau UDP brute; departe de iPhone, poate trimite SPA prin HTTP către servere care permit acest lucru.

Ghiduri pentru configurarea ta

Păstrați ușa închisă. Purtați bătaia cu dvs.

Secret Knock vine în curând în App Store pentru iPhone, iPad, Mac și Apple Watch.

Secret Knock →