Marvin Pascale

[B.Log]

08 Giugno 2026

Dal Port Knocking allo Single Packet Authorization

da knockd a fwknopd

Qualche settimana fa ho pubblicato un video dedicato al Port Knocking utilizzando knockd, una tecnica tanto semplice quanto affascinante che permette di nascondere un servizio dietro una sequenza di connessioni prestabilita.

L’idea è elegante: il servizio rimane invisibile fino a quando qualcuno non “bussa” nel modo corretto. Una sorta di porta segreta per i nostri server.

Come spesso accade nel mondo della sicurezza informatica, però, una buona idea può essere migliorata. Ed è proprio qui che entra in gioco fwknop, un progetto open source che implementa il concetto di Single Packet Authorization (SPA).

In questo articolo vedremo perché SPA rappresenta l’evoluzione naturale del Port Knocking e come utilizzarlo per proteggere l’accesso SSH ai nostri sistemi Linux.

Un rapido ripasso del Port Knocking

Per chi non avesse visto il video, il Port Knocking è una tecnica che consente di mantenere chiusa una porta di servizio fino a quando un client non esegue una determinata sequenza di connessioni.

Immaginiamo di voler proteggere SSH.

Normalmente la porta 22 è visibile:

Internet
    |
    v
+-----------+
|  SSH :22  |
+-----------+

Con il Port Knocking, invece, la porta rimane chiusa e viene aperta soltanto dopo una sequenza prestabilita:

7000 -> 8000 -> 9000

Quando il demone knockd rileva la sequenza corretta, modifica temporaneamente le regole del firewall consentendo la connessione SSH.

Dal punto di vista pratico è una soluzione semplice, leggera e piuttosto efficace contro gli scanner automatici.

I limiti del Port Knocking

Nonostante il suo fascino, il Port Knocking presenta alcuni limiti strutturali.

Le sequenze sono osservabili

Un eventuale attaccante che abbia la possibilità di osservare il traffico di rete può individuare la sequenza utilizzata.

Ad esempio:

1234
4321
2222
8888

Una volta scoperta, la sequenza può essere riprodotta.

Replay attack

Se qualcuno intercetta i pacchetti utilizzati per il knocking può tentare di riutilizzarli successivamente.

Molte implementazioni moderne introducono contromisure, ma il problema rimane parte integrante dell’approccio.

Configurazioni sempre più complesse

Per aumentare la sicurezza si tende ad allungare le sequenze o a renderle più elaborate.

Il risultato è che la complessità cresce rapidamente senza offrire un miglioramento proporzionale della protezione.

Single Packet Authorization

Il concetto alla base di SPA è sorprendentemente semplice.

Invece di inviare una serie di pacchetti, il client invia un singolo pacchetto cifrato contenente tutte le informazioni necessarie per autorizzare l’accesso.

Client
   |
   | Pacchetto SPA cifrato
   |
   v
+---------+
| fwknopd |
+---------+
     |
     +--> apre SSH temporaneamente

Il server analizza il pacchetto, verifica che sia valido e, solo in quel caso, modifica dinamicamente le regole del firewall.

Dal punto di vista di un osservatore esterno il servizio continua a risultare completamente invisibile.

Perché fwknop è diverso

La differenza principale è che il pacchetto SPA è cifrato.

Questo significa che:

  • non esiste una sequenza osservabile;
  • non vengono esposte informazioni utili sulla rete;
  • il firewall rimane chiuso fino all’autorizzazione;
  • vengono utilizzati timestamp e meccanismi anti-replay;
  • l’autenticazione e l’autorizzazione avvengono in un unico passaggio.

In pratica si passa da:

“fammi vedere che conosci la sequenza”

a

“dimostrami immediatamente che sei autorizzato”

Un approccio decisamente più moderno.

Mani in pasta

Vediamo come configurare un semplice ambiente Debian.

Installazione

Sul server:

sudo apt update
sudo apt install fwknop-server

Sul client:

sudo apt install fwknop-client

Generazione delle chiavi

fwknop utilizza chiavi condivise per autenticare le richieste.

Possiamo generarne una con:

fwknop --key-gen

L’output sarà simile a:

KEY_BASE64: YWJjZGVmZ2hpamtsbW5vcA==

Conserviamo la chiave in modo sicuro: dovrà essere presente sia sul server sia sul client.

Configurazione del server

Il file principale è:

/etc/fwknop/access.conf

Una configurazione minimale potrebbe essere:

SOURCE      ANY
OPEN_PORTS  tcp/22
KEY_BASE64  YWJjZGVmZ2hpamtsbW5vcA==

In questo esempio autorizziamo l’apertura temporanea della porta SSH.

Dopo aver salvato la configurazione:

sudo systemctl enable fwknop-server
sudo systemctl restart fwknop-server

Verificare il firewall

Prima di utilizzare SPA la porta SSH dovrebbe risultare filtrata.

Da una macchina esterna:

nmap -p22 server.example.com

Output atteso:

22/tcp filtered ssh

Questo è il comportamento desiderato.

SSH esiste, ma non è raggiungibile.

Configurazione del client

Sul client possiamo utilizzare direttamente la riga di comando:

fwknop -A tcp/22 -D server.example.com

oppure configurare un profilo all’interno del file:

~/.fwknoprc

Esempio:

[myserver]
ALLOW_IP    resolve
ACCESS      tcp/22
KEY_BASE64  YWJjZGVmZ2hpamtsbW5vcA==
SPA_SERVER  server.example.com

A questo punto sarà sufficiente eseguire:

fwknop -n myserver

Test della connessione

Inviamo il pacchetto SPA:

fwknop -n myserver

Subito dopo:

La connessione verrà autorizzata per il tempo configurato sul server.

Terminata la finestra temporale, la porta tornerà automaticamente nascosta.

Quanto tempo rimane aperta la porta?

Una delle domande che sorgono spontanee quando si parla di Single Packet Authorization è: per quanto tempo rimane aperta la porta dopo l’autorizzazione?

La risposta è semplice: dipende dalla configurazione.

Quando fwknopd riceve un pacchetto SPA valido, crea dinamicamente una regola nel firewall che consente all’indirizzo IP del client di raggiungere il servizio richiesto. Questa autorizzazione non è permanente ma ha una durata limitata, definita dal parametro FW_ACCESS_TIMEOUT.

Ad esempio:

SOURCE            ANY
OPEN_PORTS        tcp/22
KEY_BASE64        YWJjZGVmZ2hpamtsbW5vcA==
FW_ACCESS_TIMEOUT 30

In questo caso il client autorizzato avrà 30 secondi di tempo per stabilire la connessione SSH.

Trascorso il timeout, fwknop rimuoverà automaticamente la regola dal firewall riportando il sistema allo stato iniziale.

Per la maggior parte degli scenari SSH, un valore compreso tra 30 e 60 secondi è più che sufficiente:

FW_ACCESS_TIMEOUT 60

Un aspetto interessante è che il timeout riguarda esclusivamente l’apertura della porta e non la durata della sessione. Una volta stabilita la connessione SSH, questa continuerà a funzionare normalmente anche dopo la rimozione della regola temporanea dal firewall.

In altre parole, il firewall concede una breve finestra temporale per l’avvio della connessione e successivamente torna immediatamente a nascondere il servizio.

È proprio questo uno dei vantaggi più interessanti rispetto alle configurazioni tradizionali: la porta SSH non rimane esposta inutilmente e la superficie di attacco viene ridotta al minimo indispensabile.

E nftables?

Molti esempi presenti online fanno ancora riferimento a iptables.

Fortunatamente le versioni moderne di fwknop supportano anche ambienti basati su nftables, ormai standard nelle distribuzioni Linux più recenti.

Se utilizzate Debian 12 o distribuzioni equivalenti vale la pena verificare la documentazione ufficiale del progetto e testare attentamente le regole generate nel vostro ambiente.

Negli ultimi anni il passaggio da iptables a nftables ha semplificato notevolmente la gestione dei firewall e rende fwknop ancora più interessante in contesti moderni.

Considerazioni finali

Il Port Knocking rimane una tecnica estremamente interessante dal punto di vista didattico.

Aiuta a comprendere come sia possibile ridurre la superficie di attacco senza intervenire direttamente sul servizio esposto e continua ad essere una soluzione valida in molti contesti domestici o di laboratorio.

Tuttavia, quando si parla di ambienti reali, Single Packet Authorization rappresenta un’evoluzione naturale del concetto. fwknop offre una soluzione più elegante, più sicura e più semplice da utilizzare una volta configurata correttamente.

In fondo l’idea non cambia: mantenere SSH invisibile fino a quando non serve davvero.

La differenza è che oggi non dobbiamo più bussare tre volte.

Basta presentare il lasciapassare giusto.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: