VPNSmith
self-host-vpnINFO

WireGuard + port knocking: VPN invisibile su Contabo 2026

Nascondi il tuo endpoint WireGuard da Shodan e dalle scansioni delle porte. Configurazione di knockd, sequenza sicura, fail2ban, script di distribuzione automatizzata su VPS Contabo.

Di Eric Gerard · Fondateur · VPNSmith — Spécialiste self-host VPN & VPS GDPR10 min letturaPhoto via Unsplash

Divulgazione affiliata — Questo articolo contiene link affiliati a Contabo. Se ordini un VPS tramite i nostri link, guadagniamo una commissione senza costi aggiuntivi per te. Ogni comando è testato sul nostro VPS di produzione.

Ospiti autonomamente WireGuard su Contabo. Tutto funziona. Tranne che la tua porta UDP 51820 è stata su Shodan per 3 giorni, il tuo VPS riceve migliaia di pacchetti di scansione all'ora e vedi handshake WireGuard rifiutati da botnet in journalctl. Se il tuo WireGuard è configurato correttamente (chiave pubblica forte, nessun PSK condiviso), non hai nulla da temere criptograficamente — ma il rumore inquina i log, spreca CPU e un giorno qualcuno potrebbe trovare una vulnerabilità.

Port knocking è una tecnica vecchia ma efficace per risolvere questo problema: il tuo endpoint WireGuard rimane chiuso per impostazione predefinita (UFW drop) e si apre solo dopo una "sequenza di knock" (una serie di tentativi di connessione TCP su porte specifiche in un ordine specifico). Il client esegue la sequenza, il firewall apre temporaneamente la porta WireGuard, la sessione viene stabilita, la porta si chiude. Per Shodan, il tuo VPS non espone nessuna porta UDP/51820 — sei invisibile.

Questa guida copre l'installazione di knockd su un VPS Contabo, la sequenza sicura, l'integrazione con fail2ban e uno script di distribuzione automatizzata per riprodurre la configurazione su più VPS.

Il principio: tre porte, una combinazione

Il port knocking funziona come un campanello codificato. Definisci una sequenza di porte (es. 7001 → 8002 → 9003) e un ordine. Il client invia un semplice tentativo TCP/SYN a ciascuna porta in ordine. Nessun servizio ascolta su quelle porte — il firewall LOGga i pacchetti e passa oltre.

Quando il demone knockd vede la sequenza valida da un singolo IP in meno di 30 secondi, esegue un comando: tipicamente iptables -A INPUT -s <ip> -p udp --dport 51820 -j ACCEPT. L'IP del client è temporaneamente consentito. Pochi secondi dopo, knockd chiude: iptables -D INPUT ....

Vantaggio: per uno scanner esterno (Shodan, Censys, masscan), la tua porta 51820 NON risponde mai. Non è elencata. Limite: questo non è crittografia. Qualcuno che intercetta il tuo traffico può vedere i knock e ripeterli. Ecco perché lo combiniamo con WireGuard (che fornisce l'autenticazione crittografica forte).

Installazione su un VPS Contabo

Contabo VPS S (€4,99/mese, vedi offerta) su Ubuntu 24.04 LTS, WireGuard già installato e funzionante (se non ancora: vedi la nostra guida all'auto-hosting di WireGuard).

Passo 1 — Installa knockd

apt update && apt install -y knockd

Passo 2 — Chiudi WireGuard per impostazione predefinita

Prima, controlla il tuo firewall attuale:

ufw status verbose

Se UFW consente 51820/udp aperto, lo sostituiremo con "chiuso per impostazione predefinita + aperto da knockd". Modifica /etc/default/ufw o direttamente iptables:

ufw delete allow 51820/udp
# WireGuard è ora DROP per impostazione predefinita

Verifica: dall'esterno, nmap -sU -p 51820 your-ip dovrebbe restituire filtered o closed.

Passo 3 — Configura knockd

/etc/knockd.conf:

[options]
    UseSyslog
    Interface = eth0

[openWireGuard]
    sequence    = 7203,4581,6217
    seq_timeout = 15
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
    tcpflags    = syn

[closeWireGuard]
    sequence    = 6217,4581,7203
    seq_timeout = 15
    command     = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
    tcpflags    = syn

Campi chiave:

  • sequence: le tue porte di knock. Non sequenziali (non 1234,1235,1236), sceglile a caso tra 1024 e 65000.
  • seq_timeout: 15 secondi per completare la sequenza dallo stesso IP. Troppo corto, problemi di latenza mobile. Troppo lungo, la finestra di attacco brute-force si allarga.
  • command: cosa viene eseguito quando la sequenza è valida. %IP% è sostituito con l'IP di origine del knock.
  • tcpflags: syn per abbinare solo il pacchetto di connessione iniziale (evita falsi positivi).

Per la chiusura automatica dopo 60 secondi invece di un knock manuale, usa cmd_timeout:

[openWireGuard]
    sequence    = 7203,4581,6217
    seq_timeout = 15
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
    tcpflags    = syn
    cmd_timeout = 60
    stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT

Questo è più pulito: non c'è bisogno che il client invii un "knock di chiusura", knockd si chiude da solo dopo 60s. WireGuard ha stabilito la sua sessione UDP nel frattempo, che rimane attiva.

Passo 4 — Abilita knockd

/etc/default/knockd:

START_KNOCKD=1
KNOCKD_OPTS="-i eth0"
systemctl enable --now knockd
journalctl -u knockd -f

Knocker lato client

Linux / macOS: installa il pacchetto knockd (include anche il client knock):

apt install knockd      # Ubuntu/Debian
brew install knock      # macOS tramite Homebrew

Utilizzo:

knock your-vps-ip 7203 4581 6217

Attendi 1–2 secondi, quindi avvia WireGuard normalmente:

wg-quick up wg0

Hai 60 secondi per completare l'handshake UDP di WireGuard. Una volta che la sessione è attiva, knockd può chiudere il firewall: la connessione esistente non è influenzata dalle nuove regole INPUT.

Windows: nessuna porta knock.exe ufficialmente mantenuta. Soluzione pragmatica: uno script PowerShell che esegue 3 veloci Test-NetConnection:

$ip = "your-vps-ip"
$ports = 7203, 4581, 6217
foreach ($p in $ports) {
    Test-NetConnection -ComputerName $ip -Port $p -InformationLevel Quiet
    Start-Sleep -Milliseconds 200
}
Start-Sleep -Seconds 1
# Avvia qui l'app WireGuard

Android: app KnockOnD sul Play Store (gratuita). Configura IP + sequenza, tocca il pulsante, i knock vengono inviati. Combina con WireGuard Android: dopo il knock, avvia manualmente il tunnel.

iOS: PortKnock sull'AppStore (gratuita). Stesso principio.

Indurimento: evitare il replay dei knock

Un knock semplice ha una debolezza: se qualcuno intercetta il tuo traffico (Wi-Fi pubblico, ISP ostile, ecc.), può ripetere la sequenza dal proprio IP e aprire il firewall. Tre mitigazioni:

1. fail2ban su knock non validi

Banna gli IP che eseguono 5+ knock non validi (non completando la sequenza). Crea /etc/fail2ban/filter.d/knockd.conf:

[Definition]
failregex = ^.*knockd.*<HOST>:.*: Stage \d failed.*$
ignoreregex =

E /etc/fail2ban/jail.d/knockd.conf:

[knockd]
enabled = true
filter = knockd
logpath = /var/log/syslog
maxretry = 5
findtime = 60
bantime = 3600

Ricarica: systemctl reload fail2ban.

2. sequenze di knock monouso (knockd 0.8+)

Usa sequenze monouso tramite one_time_sequences:

[openWireGuard]
    one_time_sequences = /etc/knockd/sequences.list
    seq_timeout = 15
    command = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
    tcpflags = syn
    cmd_timeout = 60
    stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT

Il file /etc/knockd/sequences.list contiene una sequenza per riga. Una volta usata, viene rimossa. Pre-generi 100 sequenze, le distribuisci al client (file crittografato) e ogni connessione ne brucia una.

Questo è significativamente più sicuro contro il replay, a costo di una gestione più complessa.

3. Combina con una VPN di bootstrap

Approccio elegante: il tuo VPS espone solo un Shadowsocks o V2Ray su 443 (modalità camuffamento). I knock di WireGuard vengono inviati attraverso questo primo tunnel SS/V2Ray. L'intercettazione esterna vede solo TLS verso il tuo dominio, non i knock.

Questa è la configurazione "cintura e bretelle" per viaggi ultra-sensibili.

Script di distribuzione automatizzata

File di server in un data center
File di server in un data center

Per riprodurre questa configurazione su più VPS Contabo, ecco uno script che usiamo. Inseriscilo in /usr/local/bin/setup-knock-wg.sh:

#!/bin/bash
set -euo pipefail

if [[ $EUID -ne 0 ]]; then
    echo "Esegui questo script come root"
    exit 1
fi

# Genera 3 porte casuali tra 5000 e 60000
PORT1=$(( ( RANDOM % 55000 ) + 5000 ))
PORT2=$(( ( RANDOM % 55000 ) + 5000 ))
PORT3=$(( ( RANDOM % 55000 ) + 5000 ))

echo "Sequenza generata: $PORT1 -> $PORT2 -> $PORT3"

apt update && apt install -y knockd fail2ban

cat > /etc/knockd.conf <<EOF
[options]
    UseSyslog
    Interface = eth0

[openWireGuard]
    sequence    = ${PORT1},${PORT2},${PORT3}
    seq_timeout = 15
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
    tcpflags    = syn
    cmd_timeout = 60
    stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p udp --dport 51820 -j ACCEPT
EOF

sed -i 's/START_KNOCKD=0/START_KNOCKD=1/' /etc/default/knockd

# Chiudi WireGuard per impostazione predefinita
ufw delete allow 51820/udp 2>/dev/null || true

# Configurazione fail2ban
cat > /etc/fail2ban/filter.d/knockd.conf <<EOF
[Definition]
failregex = ^.*knockd.*<HOST>:.*: Stage \d failed.*\$
ignoreregex =
EOF

cat > /etc/fail2ban/jail.d/knockd.conf <<EOF
[knockd]
enabled = true
filter = knockd
logpath = /var/log/syslog
maxretry = 5
findtime = 60
bantime = 3600
EOF

systemctl enable --now knockd
systemctl reload fail2ban

echo ""
echo "Configurazione completata!"
echo "Client: knock $(curl -s ifconfig.me) ${PORT1} ${PORT2} ${PORT3}"
echo "Mantieni questa sequenza al sicuro — consigliato un gestore di password."

Rendi eseguibile e avvia:

chmod +x /usr/local/bin/setup-knock-wg.sh
/usr/local/bin/setup-knock-wg.sh

Ottieni la sequenza lato client come output. Salvala in Bitwarden / 1Password / KeePass — è un segreto proprio come la tua chiave SSH.

Validazione: verifica che funzioni

1. Dall'esterno (il tuo laptop, non il VPS) — conferma che 51820 sia chiusa:

nmap -sU -p 51820 your-vps-ip
# PORT      STATE    SERVICE
# 51820/udp filtered (o closed) — nessuna risposta

2. Sempre dall'esterno — knock + tentativo WireGuard:

knock your-vps-ip 7203 4581 6217
sleep 2
wg-quick up wg0
wg show wg0   # dovrebbe mostrare un handshake

3. Lato server — controlla il log:

journalctl -u knockd | tail -20
# Dovrebbe mostrare: openWireGuard: Stage 3 OK
#                    openWireGuard: OPEN SESAME
#                    openWireGuard: running command

4. Conferma che il firewall si chiuda dopo cmd_timeout:

# Sul server, attendi 60s poi:
iptables -L INPUT -n | grep 51820
# Nessuna regola per il tuo IP. La sessione WireGuard rimane attiva grazie a conntrack.

Casi d'uso tipici

1. Auto-hosting per te stesso, infastidito dal rumore di Shodan. Configurazione perfetta: 5 minuti di configurazione, non sei più su Shodan, i tuoi log sono puliti. Nessun cambiamento lato client per WireGuard mobile (solo un knock prima di ogni connessione).

2. Auto-hosting per pochi utenti avanzati. Distribuisci una sequenza monouso per utente. Ogni utente ha la propria sequenza individuale. Se una trapela, revoca quella sequenza senza influenzare gli altri.

3. Configurazione multi-VPS resiliente. Ogni VPS Contabo ha la sua sequenza casuale. Il client ha una lista di fallback: se VPS1 non risponde (knock fallito o IP giù), bussa a VPS2, ecc.

4. Honeypot invertito. Combinato con psad o crowdsec, gli IP che scansionano le tue porte di knock in modo non valido finiscono in una blacklist comunitaria. Diventi un sensore di intelligence sulle minacce.

Limiti e alternative

Il port knocking non è magia:

  • Se qualcuno ha accesso passivo al tuo traffico LAN (proxy aziendale che intercetta TLS), può vedere i knock e ripeterli.
  • Se il tuo client mobile è su una rete cellulare dove l'operatore registra tutto, lo stesso.
  • Se il tuo VPS è un po' lento, seq_timeout = 15s potrebbe essere troppo breve su 3G ai margini della copertura.

Alternative da considerare:

NecessitàSoluzione
Nascondi l'endpoint VPN dalle scansioniPort knocking (questa guida)
Nascondi E resisti all'intercettazioneCloak (vedi la nostra guida)
Bypass DPI nazionale (GFW, ecc.)V2Ray + REALITY (vedi la nostra guida)
Solo autenticazione crittografica forteWireGuard semplice, peering OK
Configurazione pro multi-utenteXray-core + dashboard x-ui

Il port knocking è complementare, non un sostituto. Puoi impilare: port knocking + Cloak + WireGuard, ottenendo una configurazione quasi invisibile. Al costo di una complessità operativa aumentata.

Quando una VPN commerciale è più semplice

Se non vuoi gestire knockd + fail2ban + UFW + WireGuard, una VPN commerciale ti risparmia tutto questo. NordVPN non ti dà il controllo a basso livello, ma i suoi server sono condivisi (quindi diluizione naturale delle scansioni). Non sei il bersaglio identificabile.

Molti dei nostri lettori combinano: auto-hosting con port knocking per l'uso quotidiano (prestazioni di picco, IP fisso), VPN commerciale come backup per i viaggi (nessuna manutenzione).

Ulteriori letture

Fonti tecniche:


Pubblicato il 2026-06-03. Configurazione testata su un VPS Contabo S a Norimberga + client residenziali in Europa, marzo–aprile 2026. Il port knocking è uno strato di difesa complementare, non una soluzione magica — combina sempre con una forte autenticazione WireGuard e fail2ban.

Promemoria legale: il port knocking e l'auto-hosting di WireGuard sono perfettamente legali nell'UE, negli Stati Uniti, in Canada. Controlla le normative locali prima di distribuire in giurisdizioni sensibili. VPNSmith pubblica questa guida a scopo educativo.

★ Datacenter GDPR di Norimberga · ✓ IPv4 dedicato incluso · 200+ Mbps garantiti

Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region