Vai al contenuto
Secret Knock

Il port knocking spiegato

Il port knocking mantiene invisibile un servizio finché qualcuno non dimostra di conoscere un segreto. Questa guida spiega come funziona, le due implementazioni comuni — knockd e fwknop — e perché le bussate non riescono nella pratica.

Come funziona il port knocking

Il firewall scarta ogni connessione alla porta protetta, quindi uno scanner non vede nulla. Un piccolo demone controlla il traffico che raggiunge il firewall. Quando un indirizzo sorgente produce lo schema previsto, il demone aggiunge una regola firewall che consente quell’indirizzo, di solito per poco tempo.

Lo schema è la bussata. Con knockd è una sequenza di tentativi di connessione a porte specifiche in un ordine specifico ed entro un limite di tempo. Con fwknop è un singolo pacchetto crittografato.

knockd: sequenze di bussate

knockd ascolta su un’interfaccia e confronta i tentativi di connessione con le sequenze in /etc/knockd.conf. Una sequenza può combinare porte TCP e UDP. Quando trova una corrispondenza, knockd esegue un comando — in genere una regola iptables o nftables per l’indirizzo che bussa (%IP%).

Questo esempio apre SSH per l’indirizzo che bussa e lo richiude dopo 10 secondi. Le sessioni SSH esistenti continuano a funzionare se il firewall accetta le connessioni 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 — apri SSH per 10 secondi

Scegli le tue porte; non riutilizzare mai porte di esempi pubblicati. tcpflags = syn fa sì che knockd conti solo i pacchetti con il flag SYN — il primo pacchetto di un tentativo di connessione.

fwknop: Single Packet Authorization

fwknop sostituisce la sequenza con un pacchetto UDP crittografato (AES) e autenticato (HMAC). Il server, fwknopd, lo acquisisce passivamente, lo verifica, controlla che non sia una riproduzione e apre la porta richiesta per l’indirizzo contenuto nel pacchetto.

Genera le chiavi con fwknop --key-gen e inseriscile nell’access.conf del server. Secret Knock importa la parte client dal tuo .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 — consenti SSH con una chiave SPA

Poiché l’indirizzo autorizzato viaggia all’interno del pacchetto crittografato, SPA può aprire una porta per un indirizzo diverso da quello che invia il pacchetto — utile quando bussi da un telefono con dati mobili per un laptop altrove.

Perché le bussate non riescono

  • IPv4 rispetto a IPv6: la bussata è uscita su una famiglia di indirizzi e SSH si connette sull’altra. Il firewall ha aperto la porta per un indirizzo che non stai usando.
  • Un indirizzo pubblico diverso: con dati mobili, dietro NAT del gestore o una VPN, il server vede un IP diverso da quello previsto. Verifica l’indirizzo da cui bussi.
  • SYN ritrasmessi: se una bussata TCP non riceve risposta, il sistema operativo del client invia di nuovo lo stesso SYN. Nei nostri test knockd 0.8 reimpostava la sequenza con un SYN ripetuto, quindi un client deve inviare ogni bussata una sola volta e interrompere rapidamente il tentativo.
  • Tempi: le bussate che arrivano oltre seq_timeout, o nell’ordine sbagliato, riavviano la sequenza.
  • Dispositivi intermedi: alcune reti bloccano o riscrivono il traffico verso porte insolite, quindi una bussata che funziona a casa può non riuscire su una rete di hotel o ufficio.

È sicuro?

Una sequenza knockd viene inviata senza crittografia; chiunque possa osservare il tuo traffico può riprodurla. Usala per nascondere un servizio agli scanner, davanti alle chiavi SSH — non al posto loro. SPA fwknop colma questa lacuna con crittografia, HMAC e protezione dalle riproduzioni, ed è la scelta migliore quando il tuo traffico può essere osservato.

Bussare da iPhone, Mac e Apple Watch

Secret Knock invia sequenze knockd e pacchetti SPA fwknop da iPhone, iPad e Mac, verifica che la porta risponda e apre l’app SSH. Apple Watch bussa tramite l’iPhone abbinato, perché watchOS non consente alle app di inviare pacchetti TCP o UDP grezzi; lontano da iPhone può inviare SPA tramite HTTP ai server che lo abilitano.

Guide per la tua configurazione

Tieni chiusa la porta. Porta con te la bussata.

Secret Knock è in arrivo sull’App Store per iPhone, iPad, Mac e Apple Watch.

Secret Knock →