Guida alle tecnologie

Installare e configurare OpenVPN su FreeBSD 12.0

8 min read Reti Aggiornato 17 Oct 2025
OpenVPN su FreeBSD 12.0 – Guida completa
OpenVPN su FreeBSD 12.0 – Guida completa

Questa guida spiega passo dopo passo come installare e configurare un server OpenVPN basato su certificati su FreeBSD 12.0. Copre installazione, generazione dei certificati con easy-rsa, configurazione di OpenVPN, regole pf, inoltro dei pacchetti, configurazione client, test e procedure operative e di emergenza.

Perché leggere questa guida

Imparerai a implementare una VPN sicura basata su certificati, a proteggere il traffico con cifrature moderne, a configurare il firewall pf e a predisporre procedure di test e incident response.

Sommario

  • Requisiti
  • Installazione di OpenVPN
  • Preparare variabili easy-rsa
  • Generare certificati (CA, server, client, DH, CRL)
  • Configurare OpenVPN (server e client)
  • Regole pf e NAT
  • Abilitare forwarding su FreeBSD
  • Test e verifica
  • Playbook di deploy e runbook di emergenza
  • Checklist per ruoli e criteri di accettazione
  • Note di sicurezza e privacy

Requisiti

  • FreeBSD 12.0 aggiornato
  • Minimo 512 MB RAM e 1 CPU
  • Privilegi root
  • pacchetto pf abilitato e funzionante
  • Connettività verso internet per scaricare pacchetti

Importante: questa guida imposta l’autenticazione basata su certificati (PKI) con easy-rsa. Se preferisci username/password o OTP, vedi la sezione Alternative.

Cosa faremo

  • Installare OpenVPN su FreeBSD 12.0
  • Configurare easy-rsa e le variabili dei certificati
  • Generare CA, server, client, DH e CRL
  • Copiare i certificati nelle cartelle corrette
  • Configurare openvpn.conf (server) e client01.ovpn (client)
  • Configurare pf per NAT e apertura porta UDP 1194
  • Abilitare ip forwarding e testare la connessione

Step 1 - Installare OpenVPN

Aggiorna il repository dei pacchetti e installa OpenVPN con i comandi pkg.

pkg update  
pkg install openvpn

Dopo l’installazione, abilita il servizio OpenVPN all’avvio e definisci l’interfaccia tunnel ‘tun’:

sysrc openvpn_enable="YES"  
sysrc openvpn_if="tun"

Ora il pacchetto OpenVPN è installato sul sistema FreeBSD 12.0.

Schermata installazione OpenVPN

Step 2 - Preparare le variabili per i certificati

Imposteremo easy-rsa per generare la PKI. Creiamo la directory di lavoro e copiamo easy-rsa:

mkdir -p /usr/local/etc/openvpn/  
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/

Posizionati nella directory easy-rsa e apri il file vars con l’editor:

cd /usr/local/etc/openvpn/easy-rsa/  
vim vars

Sostituisci i dettagli con quelli della tua organizzazione. Nel file vars si trovano variabili come paese, città, organizzazione, dimensione chiave, algoritmo e durata dei certificati. Dopo la modifica rendi eseguibile il file vars:

chmod +x vars

Preparazione variabili easy-rsa

Note: mantenere le passphrase in un password manager sicuro. Se lavori in ambiente di produzione, considera chiavi da 4096 bit e periodi di scadenza più lunghi o un processo di rotazione pianificata.

Step 3 - Generare i certificati

Inizializza la PKI e genera CA, server, client, DH e CRL.

cd /usr/local/etc/openvpn/easy-rsa/  
./easyrsa.real init-pki

Genera la CA:

./easyrsa.real build-ca

Ti verrà chiesto di inserire (o creare) la passphrase della CA. Dopo la generazione, crea la richiesta del certificato server e firmala:

./easyrsa.real gen-req openvpn-bsd nopass
./easyrsa.real sign-req server openvpn-bsd

Verifica il certificato server:

openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt

Genera e firma il certificato client:

./easyrsa.real gen-req client01 nopass
./easyrsa.real sign-req client client01

Genera CRL e DH:

./easyrsa.real gen-crl  
./easyrsa.real gen-dh

Copia i certificati nella struttura OpenVPN:

mkdir -p /usr/local/etc/openvpn/{server,client}
cp pki/ca.crt /usr/local/etc/openvpn/server/  
cp pki/issued/openvpn-bsd.crt /usr/local/etc/openvpn/server/  
cp pki/private/openvpn-bsd.key /usr/local/etc/openvpn/server/
cp pki/ca.crt /usr/local/etc/openvpn/client/  
cp pki/issued/client01.crt /usr/local/etc/openvpn/client/  
cp pki/private/client01.key /usr/local/etc/openvpn/client/
cp pki/dh.pem /usr/local/etc/openvpn/server/  
cp pki/crl.pem /usr/local/etc/openvpn/server/

Certificati generati

Copia certificati

Importante: CRL permette di revocare certificati compromessi. Conserva la chiave privata della CA offline e con accesso ristretto.

Step 4 - Configurare OpenVPN (server)

Crea il file di configurazione server:

cd /usr/local/etc/openvpn/  
vim openvpn.conf

Incolla la configurazione server. Esempio usato in questa guida:

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/openvpn-bsd.crt
key /usr/local/etc/openvpn/server/openvpn-bsd.key

#DH and CRL key
dh /usr/local/etc/openvpn/server/dh.pem
crl-verify /usr/local/etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.5.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
explicit-exit-notify 1
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Avvia il servizio e verifica lo stato:

service openvpn start  
service openvpn status

Controlla la porta con sockstat:

sockstat -l4

OpenVPN in ascolto

Nota: valuta di rimuovere “duplicate-cn” in produzione per garantire che ogni client abbia un certificato unico.

Step 5 - Configurare pf (firewall)

Edita /usr/local/etc/pf.conf e definisci variabili VPN e regole NAT.

cd /usr/local/etc/  
vim pf.conf

Esempio di frammenti da inserire (modifica secondo la tua topologia):

# vpn interface  
vpn_if="tun0"  
vpn_net = "10.5.5.0/24"

# reassemble all fragmented packets before filtering them  
scrub in on $ext_if all fragment reassemble

# route traffic from VPN interface out to the internet  
nat on ! $vpn_if from $vpn_net to any -> $ext_ip

# Allow Connection to VPN Server  
pass in on $ext_if proto udp from any to ($ext_if) port 1194 keep state  
  
# Pass all connection on the VPN Interface  
pass in on $vpn_if from any to any

Verifica e ricarica pf:

service pf check  
service pf reload

Controlla le regole con pfctl:

pfctl -sr  
pfctl -sn

pf rules

Suggerimento: limita le regole in ingresso all’IP/porta pubblica nota del client se possibile.

Step 6 - Abilitare inoltro pacchetti

Abilita forwarding IPv4/IPv6 in /etc/sysctl.conf:

vim /etc/sysctl.conf

Aggiungi:

net.inet.ip.forwarding=1  
net.inet6.ip6.forwarding=1

Rendi persistente la funzione gateway:

sysrc gateway_enable="YES"

Poi riavvia il server:

reboot

Abilitare forwarding

Step 7 - Configurare il client

Crea client01.ovpn nella cartella client e inserisci le referenze e i percorsi ai certificati:

cd /usr/local/etc/openvpn/client/  
vim client01.ovpn

Esempio di file client:

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Scarica i file ca.crt, client01.crt, client01.key e client01.ovpn sul computer client e connettiti:

openvpn --config client01.ovpn

Client config

Step 8 - Testing

Dopo la connessione dal client, controlla l’interfaccia tun0:

ifconfig tun0

Ping verso il server interno:

ping -c3 10.5.5.1

Verifica l’IP pubblico (il traffico dovrebbe uscire dall’IP del server se hai usato redirect-gateway):

curl ipinfo.io

Test connessione

Se tutto funziona, la VPN è attiva.


Playbook di deploy (SOP semplificato)

  1. Preparazione: backup configurazioni esistenti (/etc/pf.conf, /etc/rc.conf, /usr/local/etc/openvpn/).
  2. Installare pacchetti e dipendenze.
  3. Configurare easy-rsa e generare CA in ambiente isolato.
  4. Generare e firmare certificati server e client.
  5. Copiare certificati nelle directory server/client.
  6. Configurare openvpn.conf e testare in locale.
  7. Applicare regole pf e testare NAT.
  8. Abilitare forwarding e riavviare.
  9. Test end-to-end dal client.
  10. Documentare e consegnare file client sicuri.

Prerequisito operativo: mantieni la chiave CA offline e limita accessi alla directory /usr/local/etc/openvpn/server.

Runbook di emergenza (revoca di certificato compromesso)

  1. Identificare il certificato compromesso (CN/name).
  2. Accedere alla CA in ambiente sicuro.
  3. Eseguire:
./easyrsa.real revoke 
./easyrsa.real gen-crl
cp pki/crl.pem /usr/local/etc/openvpn/server/
service openvpn restart
  1. Distribuire la nuova CRL (se necessario) e aggiornare eventuali server o appliance che verificano la CRL.
  2. Verificare che il client revocato non possa più stabilire la connessione.

Checklist per ruoli

Sysadmin:

  • Backup rc.conf, pf.conf, openvpn.conf
  • Verificare PKI e protezione chiavi
  • Testare avvio automatico del servizio

Network Engineer:

  • Verificare NAT e route
  • Controllare MTU e frammentazione (scrub)
  • Testare throughput e latenza

Security Officer:

  • Controllare cifrature e TLS version minimum
  • Assicurare rotazione chiavi e procedura di revoca
  • Audit accesso alle chiavi

Helpdesk:

  • Procedure per distribuire file client sicuri
  • Rimuovere client compromessi dalla CRL
  • Fornire supporto per errori comuni (connessione, DNS, routing)

Criteri di accettazione

  • Il servizio OpenVPN si avvia automaticamente all’avvio.
  • I client autenticati ottengono un IP interno 10.5.5.x e raggiungono 10.5.5.1.
  • Il traffico del client può uscire su Internet con l’IP pubblico del server (se richiesto).
  • La CRL revoca correttamente i certificati compromessi.

Test case e casi d’accettazione

  • Connessione client con certificato valido -> PASS
  • Connessione client con certificato revocato -> FAIL (nessuna connessione)
  • Verifica DNS push -> il client usa i DNS configurati
  • Controllo NAT -> traffico Internet usa IP del server

Alternative e quando questa soluzione non è la migliore

  • Authentication username/password: se hai molti utenti o integrazione con LDAP/Radius, considera OpenVPN con auth via PAM/RADIUS.
  • WireGuard: per casi in cui serve connessione leggera, latenza ridotta e gestione chiavi semplice. WireGuard non usa PKI tradizionale e non ha CRL builtin.
  • IPsec: se l’infrastruttura richiede interoperabilità con dispositivi VPN hardware.

Modello mentale e regole pratiche

  • “Minimizza l’attacco alla CA”: tieni la CA offline quando non usata.
  • “Least privilege”: directory e chiavi accessibili solo agli account che ne hanno bisogno.
  • “Segregazione dei ruoli”: generare e firmare certificati in ambiente separato.

Maturità operativa (livelli)

  • Livello 1 (Proof of Concept): deploy rapido, duplicate-cn abilitato per semplicità.
  • Livello 2 (Produzione): CN univoci, logging centralizzato, CRL automatica.
  • Livello 3 (Enterprise): HSM per chiavi CA, rotazione programmata, SSO/RADIUS per accesso utente.

Sicurezza e hardening consigliati

  • Disabilitare “duplicate-cn” in produzione.
  • Considerare TLS 1.3 (se supportato dalla versione OpenVPN) oppure tls-version-min 1.2.
  • Valutare cipher più moderni (AES-GCM) o ECDHE per PFS.
  • Conservare la CA offline e limitare accesso alla chiave privata.
  • Abilitare log auditing e centralizzarli (syslog remoto) se possibile.

Privacy e GDPR (note operative)

  • I certificati contengono identificatori (CN, email); trattali come dati personali se riconducibili a persone.
  • Conserva i file client e le chiavi private in modo cifrato e limitato.
  • Documenta la finalità del trattamento e il periodo di conservazione delle credenziali.

Compatibilità e migrazione

  • Verifica la versione di easy-rsa e OpenVPN disponibile nei repository FreeBSD. Alcune opzioni TLS/cipher possono variare con le versioni.
  • Per migrare da altre soluzioni (es. OpenVPN su Linux), controlla percorsi e permessi dei file e le differenze di naming delle interfacce (vtnet0 vs em0 ecc.).

Piccola metodologia per la gestione certificati

  • Fase 1: generazione CA e backup offline.
  • Fase 2: emettere certificati server e client.
  • Fase 3: distribuire client in canale sicuro.
  • Fase 4: monitoraggio e revoca tramite CRL.
  • Fase 5: rotazione pianificata delle chiavi.

Esempi di errori comuni e risoluzioni rapide

  • Error: “TLS handshake failed”: controlla orari di sistema, certificati e CRL.
  • Error: “Peer not authenticated”: verifica ca.crt corrispondente e che il server utilizzi la stessa CA.
  • Nessuna connettività dopo connessione: verifica le regole NAT, route e push “redirect-gateway”.

Piccola galleria di edge-case

  • Client dietro NAT double-NAT: impostare “resolv-retry infinite” e controllare MTU.
  • Più server OpenVPN su stessa macchina: usare porte diverse o indirizzi IP virtuali.

Glossario (1 linea ciascuno)

  • CA: Certificate Authority che firma certificati.
  • CRL: Certificate Revocation List, lista certificati revocati.
  • DH: Diffie-Hellman parameters per scambio chiavi sicuro.
  • PKI: Public Key Infrastructure.

Social preview e annuncio breve

OG title: OpenVPN su FreeBSD 12.0 – Guida completa

OG description: Guida completa per installare, configurare e testare OpenVPN con certificati su FreeBSD 12.0, incluse procedure operative e runbook di emergenza.

Annuncio (breve): Implementata una VPN sicura su FreeBSD 12.0 usando OpenVPN e certificati. Guida passo passo include configurazione, firewall pf, CRL e procedure di revoca.


Riferimenti

Riepilogo finale

Questa guida copre l’intero ciclo di vita di una installazione OpenVPN su FreeBSD 12.0: dall’installazione al deploy, dalle regole di firewall alla gestione dei certificati e alla risposta agli incidenti. Segui le checklist e il runbook per mantenere sicura e gestibile la tua VPN.

Autore
Redazione

Materiali simili

Come trasmettere Netflix su Discord senza schermo nero
Streaming

Come trasmettere Netflix su Discord senza schermo nero

Disattivare notifiche 'Get Office' in Windows 10
Windows 10

Disattivare notifiche 'Get Office' in Windows 10

Nessun audio dopo KB5015878 — Come risolvere
Windows Audio

Nessun audio dopo KB5015878 — Come risolvere

Operazioni sui segnali audio in Octave
Elaborazione audio

Operazioni sui segnali audio in Octave

Widget contatto sulla Home di Android
Android

Widget contatto sulla Home di Android

Disinstallare o disattivare OneDrive in Windows
Windows

Disinstallare o disattivare OneDrive in Windows