CyberScan
Vulnerability assessment e pentest automatizzato. Asset discovery continuo, AI risk prioritization, NIS2 compliance manager integrato.
Scopri CyberScan →
Cyber Security
Consulenza CISO-as-a-service: postura, roadmap di remediation, supporto continuativo.
Scopri →Una VPN riscritta da zero
Le VPN più diffuse al 2020 — IPsec (anni ‘90) e OpenVPN (2001) — sono robuste ma complesse. OpenVPN ha circa 100.000 righe di codice, IPsec è una galassia di RFC, cipher, modalità. Entrambe hanno superfici di attacco ampie e configurazioni prolisse.
WireGuard, progetto di Jason A. Donenfeld, nasce con un’ambizione opposta: riscrivere VPN da zero con criteri di semplicità, auditabilità, performance. Il primo paper accademico è del 2017 (“WireGuard: Next Generation Kernel Network Tunnel”). Dopo anni di sviluppo e revisione, WireGuard viene integrato nel kernel Linux mainline 5.6 il 29 marzo 2020 — traguardo significativo per un protocollo VPN.
Licenza: GPL v2 (componente kernel) + UNLICENCE/BSD per userland tools.
Caratteristiche tecniche
- ~4000 righe di codice per il core kernel — due ordini di grandezza sotto OpenVPN
- Cifratura fissata — nessuna negoziazione. Algoritmi: Curve25519 per key exchange, ChaCha20-Poly1305 per AEAD, BLAKE2s per hashing, HKDF per key derivation. Nessun algoritmo deprecato, nessuna cipher suite negotiation, nessun downgrade possibile
- Noise Protocol Framework come handshake — design matematicamente analizzato (Trevor Perrin)
- Stateless design — il server risponde solo a peer autenticati; non mantiene session state prima dell’autenticazione (mitigation contro DoS)
- Peer model — simmetria concettuale client/server; ogni peer ha chiave pubblica + IP consentiti
- Roaming — gli endpoint possono cambiare IP (mobile, dual-homed) senza drop della sessione
Configurazione
Una configurazione WireGuard tipica è un file .conf di 10-20 righe:
[Interface]
PrivateKey = ...
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = ...
AllowedIPs = 10.0.0.2/32
Endpoint = peer.example.com:51820
Confronto con OpenVPN (config tipica di centinaia di righe) o IPsec (strongSwan, libreswan, con configurazioni anche più articolate).
Prima di Linux 5.6
Prima dell’integrazione in mainline, WireGuard era disponibile come modulo kernel out-of-tree (DKMS) e userspace (wireguard-go in Go; boringtun in Rust da Cloudflare). L’inclusione in mainline è stata attesa e ha richiesto due revisioni (la dipendenza da una propria libreria crittografica zinc è stata sostituita dall’uso di quella esistente del kernel).
WireGuard è poi stato portato su FreeBSD (13.0), OpenBSD, macOS (via app ufficiale + estensione kernel), Windows (NDIS driver), iOS, Android.
Adozione
Post-inclusione 5.6, l’adozione è rapida:
- Distribuzioni Linux (Ubuntu 20.04, Debian 11, Fedora, Arch) includono WireGuard out-of-the-box
- VPN commerciali (Mullvad, ProtonVPN, NordLynx) adottano WireGuard come protocollo primario
- Cloud providers — AWS Client VPN integration, Google Cloud, Azure supportano peer
- Home router / NAS (OpenWrt, pfSense, OPNsense, Synology, QNAP) integrano WireGuard
Limiti e caveat
- IP-based access control — ogni peer è legato a una chiave pubblica + IP consentiti. L’autenticazione utente/ruolo non è nativa; orchestrazione richiede tooling esterno (Headscale, Tailscale, Netmaker)
- Nessuna cifra scelta — chi ha policy specifiche (FIPS strict, HSM) deve valutare compliance
- NAT traversal — meno sofisticato di OpenVPN UDP o IPsec NAT-T; lavora bene con NAT simmetrico minimo
- Logging minimo — design scelta; strumentazione aggiuntiva va costruita
Nel contesto italiano
Al 2020 l’adozione italiana di WireGuard si diffonde tra:
- PMI che cercano VPN semplice per accesso remoto smart-working (spinta da pandemia)
- MSP e ISP che offrono VPN gestita
- PA — sperimentazioni in enti più innovativi
- Ricercatori e sysadmin individuali — come soluzione personale
Riferimenti: WireGuard in Linux kernel 5.6 (29 marzo 2020). Jason A. Donenfeld come autore/progetto lead. Licenze: GPLv2 (kernel), UNLICENCE (userland). Noise Protocol Framework (Trevor Perrin). Curve25519 (DJB), ChaCha20-Poly1305, BLAKE2s. Porting: FreeBSD 13.0, OpenBSD, Windows, macOS, iOS, Android.