Installare e configurare OpenVPN su FreeBSD 12.0

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.
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
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/
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
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
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
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
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
Se tutto funziona, la VPN è attiva.
Playbook di deploy (SOP semplificato)
- Preparazione: backup configurazioni esistenti (/etc/pf.conf, /etc/rc.conf, /usr/local/etc/openvpn/).
- Installare pacchetti e dipendenze.
- Configurare easy-rsa e generare CA in ambiente isolato.
- Generare e firmare certificati server e client.
- Copiare certificati nelle directory server/client.
- Configurare openvpn.conf e testare in locale.
- Applicare regole pf e testare NAT.
- Abilitare forwarding e riavviare.
- Test end-to-end dal client.
- 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)
- Identificare il certificato compromesso (CN/name).
- Accedere alla CA in ambiente sicuro.
- Eseguire:
./easyrsa.real revoke
./easyrsa.real gen-crl
cp pki/crl.pem /usr/local/etc/openvpn/server/
service openvpn restart
- Distribuire la nuova CRL (se necessario) e aggiornare eventuali server o appliance che verificano la CRL.
- 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.
Materiali simili

Come trasmettere Netflix su Discord senza schermo nero

Disattivare notifiche 'Get Office' in Windows 10

Nessun audio dopo KB5015878 — Come risolvere

Operazioni sui segnali audio in Octave

Widget contatto sulla Home di Android
