Installare Wireguard Server su Debian 12
Guida passo-passo per installare e configurare un server WireGuard su Debian 12: pacchetti, generazione chiavi, configurazione peer e firewall.

WireGuard è oggi uno dei protocolli VPN più apprezzati: veloce, sicuro e sorprendentemente semplice da configurare rispetto ai veterani come OpenVPN. In questa guida installiamo un server WireGuard su Debian 12 (Bookworm) usando wg-easy, un'interfaccia web che rende la gestione dei client semplicissima anche senza riga di comando. Al termine avrai una VPN personale funzionante, accessibile da qualsiasi dispositivo.
Cosa ti serve
- Un server Debian 12 funzionante (VPS, server dedicato o macchina locale)
- Accesso root o utente con privilegi sudo
- Un IP pubblico statico o un dominio che punti al server
- Le porte 51820/UDP (WireGuard) e 51821/TCP (interfaccia web wg-easy) aperte nel firewall
Se hai un VPS, verifica che il firewall del provider (non solo quello del sistema) permetta queste porte.
Passo 1: aggiorna il sistema
Prima di installare qualsiasi cosa, porta il sistema all'ultima versione:
sudo apt update && sudo apt upgrade -y
Riavvia se ci sono aggiornamenti del kernel:
sudo reboot
Passo 2: installa Docker
wg-easy gira dentro un container Docker, quindi dobbiamo installarlo prima:
sudo apt install -y docker.io docker-compose
Verifica che Docker sia attivo:
sudo systemctl enable --now docker
sudo docker --version
Passo 3: installa WireGuard e qrencode
Anche se wg-easy gestisce tutto via Docker, conviene avere i tool WireGuard nativi per debug:
sudo apt install -y wireguard wireguard-tools qrencode
Passo 4: genera l'hash della password per wg-easy
wg-easy richiede una password per l'interfaccia web. Per sicurezza non la salva in chiaro ma in formato hash bcrypt. Genera l'hash con questo comando (sostituisci latuapassword con la password che vuoi usare):
docker run --rm -it ghcr.io/wg-easy/wg-easy wgpwcp latuapassword
Il comando restituirà qualcosa del tipo:
$2b$12$abc123...xyz
Copia questo valore: ti servirà nel passo successivo.
Passo 5: crea la directory e il file docker-compose.yml
mkdir -p ~/wireguard && cd ~/wireguard
nano docker-compose.yml
Incolla questa configurazione, sostituendo i valori tra <angolari>:
version: "3.8"
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
environment:
- WG_HOST=<ip-o-dominio-del-server>
- PASSWORD_HASH=<hash-generato-nel-passo-4>
- WG_DEFAULT_DNS=1.1.1.1,8.8.8.8
- WG_ALLOWED_IPS=0.0.0.0/0,::/0
volumes:
- ~/.wg-easy:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1
restart: unless-stopped
Per WG_HOST usa l'indirizzo IP pubblico del server oppure il tuo dominio (es. vpn.miodominio.it). Per PASSWORD_HASH incolla l'hash generato prima — attenzione: se l'hash contiene $, devi racchiudere il valore tra apici singoli nel YAML.
Passo 6: avvia wg-easy
sudo docker compose up -d
Verifica che il container stia girando:
sudo docker ps
Dovresti vedere wg-easy nella lista con stato Up.
Passo 7: accedi all'interfaccia web
Apri il browser e vai su:
http://<ip-del-server>:51821
Inserisci la password che hai scelto nel passo 4 (non l'hash, la password originale).
Passo 8: aggiungi i tuoi client
Dall'interfaccia web:
- Clicca su "+ New"
- Assegna un nome al client (es. "iPhone Francesco", "Laptop lavoro")
- Clicca su "Create"
Il server genera automaticamente la coppia di chiavi e la configurazione. Hai due modi per configurare il client:
- QR code: scansionalo con l'app WireGuard su iOS o Android
- File .conf: scaricalo e importalo nel client WireGuard su PC (Windows, macOS, Linux)
Passo 9: configura il client
Smartphone (iOS / Android):
- Installa l'app WireGuard dall'App Store o Google Play
- Tocca il + e scegli "Scansiona QR code"
- Inquadra il QR code mostrato da wg-easy
PC (Windows / macOS / Linux):
- Scarica WireGuard da wireguard.com
- Importa il file
.confscaricato dall'interfaccia web - Attiva il tunnel
Passo 10: verifica la connessione
Una volta connesso, visita Il mio IP per verificare che l'indirizzo IP mostrato sia quello del tuo server VPN, non il tuo IP reale. Se è così, la VPN funziona correttamente.
Sicurezza: cose da fare dopo l'installazione
- Non esporre la porta 51821 a internet: considera di metterla dietro un reverse proxy con autenticazione (Nginx + HTTP Basic Auth) o di accederla solo tramite VPN stessa
- Aggiorna regolarmente:
sudo docker compose pull && sudo docker compose up -d - Backup delle chiavi: la directory
~/.wg-easycontiene la configurazione completa; backuppala in un posto sicuro - Firewall host: configura
ufwper limitare l'accesso alle sole porte necessarie
Domande frequenti
Quanti client posso aggiungere? Non c'è un limite tecnico imposto da wg-easy. Il limite pratico è la banda del server: ogni client che naviga attraverso la VPN usa la banda del server.
Cosa succede se il server si riavvia?
Il container ha restart: unless-stopped, quindi si riavvia automaticamente con Docker. Le configurazioni persistono nel volume montato su ~/.wg-easy.
Posso usare wg-easy con un dominio invece dell'IP?
Sì, anzi è consigliabile se il tuo IP è dinamico. Configura un record DNS A che punta al server e usa il dominio in WG_HOST. In caso di cambio IP, aggiorna solo il DNS.
← Tutti gli articoli
