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

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/