speedtest.it
← Blog
Guide & Tutorial

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.

Installare Wireguard Server su Debian 12

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:

  1. Clicca su "+ New"
  2. Assegna un nome al client (es. "iPhone Francesco", "Laptop lavoro")
  3. 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):

  1. Installa l'app WireGuard dall'App Store o Google Play
  2. Tocca il + e scegli "Scansiona QR code"
  3. Inquadra il QR code mostrato da wg-easy

PC (Windows / macOS / Linux):

  1. Scarica WireGuard da wireguard.com
  2. Importa il file .conf scaricato dall'interfaccia web
  3. 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-easy contiene la configurazione completa; backuppala in un posto sicuro
  • Firewall host: configura ufw per 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