Come configurare OpenVPN per autenticarsi con LinOTP
Questo articolo spiega passo passo come integrare OpenVPN con LinOTP per ottenere autenticazione a due fattori (2FA) basata su OTP. Troverai istruzioni per installare il modulo PAM pam_py_linotp, configurare OpenVPN per usare PAM e controlli aggiuntivi su sicurezza, test e rollback.
Importante: questa guida presuppone conoscenze di base su Linux, PAM e OpenVPN. Testa sempre le modifiche in un ambiente di staging prima di applicarle in produzione.
Introduzione
Questa guida mostra come configurare OpenVPN per autenticare gli utenti contro il backend di autenticazione LinOTP. In questo modo puoi far funzionare la VPN con autenticazione a due fattori usando diversi tipi di token OTP. Se hai pochi utenti che usano solo lo smartphone come token potresti preferire soluzioni più semplici, ma per gestire molti utenti e token diversi LinOTP è più adatto.
Breve definizione: LinOTP è un server per la gestione di token OTP (One-Time Password) che si integra via Web API, RADIUS o PAM.
Prerequisiti
- Server Linux con OpenVPN già installato.
- LinOTP installato (stesso host o accessibile via rete).
- Accesso root o sudo.
- Certificati CA/cliente/Server per OpenVPN configurati.
Installare e preparare LinOTP
Puoi installare LinOTP usando pacchetti Debian/Ubuntu o pip dal Python Package Index per un rapido test. Per ambienti di produzione preferisci i pacchetti della tua distribuzione o una procedura di deployment ripetibile.
Suggerimento operativo: per semplicità amministrativa puoi installare LinOTP e OpenVPN sullo stesso server, riducendo la latenza e la complessità delle comunicazioni.
Configurare PAM per LinOTP
Ci sono varie modalità per autenticare contro LinOTP: Web API, RADIUS o PAM. Per evitare di compilare moduli C useremo pam_py_linotp, un modulo PAM scritto in Python.
Procedura di installazione di pam_py_linotp (esempi):
Esempio manuale:
tar -ztf pam_py_linotp-0.1.tar.gz
cd pam_py_linotp-0.1/
sudo python setup.py install
Installazione rapida con pip:
sudo pip install pam_py_linotp
Copia singolo modulo (alternativa):
cd pam_py_linotp-0.1/
cp src/ pam_linotp.py /lib/security
Per usare il modulo Python installa anche libpam-python:
sudo apt-get install libpam-python
oppure
yum install libpam-python
Creiamo un file PAM riutilizzabile (stackable) chiamato common-linotp per facilitare l’uso con più servizi:
auth [success=1 default=ignore] pam_python.so /lib/security/pam_linotp.py \
debug url=https://localhost/validate/check
auth requisite pam_deny.so
auth required pam_permit.so
Note:
- Il primo argomento dopo pam_python.so è il modulo Python (pam_linotp.py).
- La chiave url= indica dove risiede il servizio LinOTP (https o http, porta inclusa se non standard).
- Usa “localhost” se LinOTP è sulla stessa macchina; altrimenti sostituisci con l’IP o hostname.
Configurare OpenVPN per usare PAM
Esempio di file client.ovpn (configurazione client):
client
dev tun
proto udp
remote your.server.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
auth-user-pass
Adatta servername e nomi dei certificati.
Esempio di server.conf (OpenVPN server):
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 192.168.42.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn
Adatta i nomi dei certificati e il pool IP.
Infine, crea o modifica /etc/pam.d/openvpn per includere la nostra configurazione PAM:
@include common-linotp
session sufficient pam_permit.so
account sufficient pam_permit.so
Spiegazione rapida:
- L’include invoca la logica definita in common-linotp.
- Le direttive session/account con pam_permit.so evitano di dover creare account locali per ogni utente VPN.
Quando l’utente inserisce il corretto OTP (ed eventuale PIN), la connessione VPN viene stabilita.
Verifica e test
Test base:
- Avvia OpenVPN server in modalità verbosa (verb 3 o superiore).
- Tenta connessioni client e verifica i log di /var/log/syslog o openvpn-status.log.
- Verifica che richieste errate (OTP sbagliato) rifiutino l’accesso e non lascino sessioni aperte.
Casi di test consigliati (accettazione):
- Utente valido + certificato valido + OTP valido => connessione riuscita.
- Utente valido + certificato valido + OTP errato => rifiuto.
- Certificato mancante o non valido => rifiuto anche con OTP valido.
- Test di carico minimo: più sessioni concorrenti per verificare stabilità.
Alternative e modelli decisionali
Alternative possibili:
- Usare LinOTP via RADIUS invece di PAM (utile se hai già un RADIUS centrale).
- Usare la Web API direttamente da un plugin custom se hai esigenze particolari.
- Soluzioni cloud 2FA alternative (es. Duo, Google Authenticator con plugin RADIUS) per scenari gestiti.
Modello decisionale rapido:
- Vuoi integrazione centralizzata con altri servizi => preferisci RADIUS.
- Vuoi semplicità e controllo locale => PAM con pam_py_linotp.
- Necessiti di alta disponibilità per LinOTP => distribuisci LinOTP su più nodi e bilancia.
Sicurezza e hardening
Azioni consigliate:
- Esegui LinOTP dietro HTTPS (certificato valido).
- Limita l’accesso alla porta di management LinOTP tramite firewall (solo OpenVPN server).
- HSM o protezione dei certificati OpenVPN su filesystem sicuro.
- Monitora i tentativi di autenticazione falliti e imposta alert.
Risk matrix (qualitativa):
Rischio | Impatto | Probabilità | Mitigazione |
---|---|---|---|
Compromissione del server LinOTP | Alto | Medio | Isolare LinOTP, backup, logging, patching |
Attacco brute-force OTP | Medio | Medio | Rate-limit, alerting, lockout temporanei |
Certificato cliente rubato | Alto | Basso | CRL/OCSP, revoca rapida |
Playbook di emergenza e rollback
Brevi passi per rollback se si rompe l’autenticazione:
- Ripristina /etc/pam.d/openvpn a una copia funzionante.
- Disabilita includere common-linotp temporaneamente e lascia autenticazione tramite certificato client soltanto.
- Ripristina LinOTP da snapshot o avvia istanza di standby.
- Notifica gli utenti e applica indagine forense.
Checklist per ruoli
Amministratore OpenVPN:
- Verificare che plugin openvpn-auth-pam.so sia presente.
- Testare connessioni client con log verbose.
Amministratore LinOTP:
- Verificare disponibilità API https://localhost/validate/check.
- Controllare sincronizzazione token e registry utenti.
Operatore sicurezza:
- Monitorare tentativi falliti e metriche SLI (es. % autenticazioni riuscite).
- Verificare policy di rotazione dei token/PIN.
Decisione rapida (diagramma)
flowchart TD
A[Inizio: devo integrare 2FA con OpenVPN?] --> B{Ho RADIUS centrale?}
B -- Sì --> C[Integrare LinOTP con RADIUS]
B -- No --> D{Preferisco gestire tutto localmente?}
D -- Sì --> E[Usare PAM 'pam_py_linotp']
D -- No --> F[Usare Web API o plugin custom]
C --> G[Configurare RADIUS client in OpenVPN]
E --> G[Configurare PAM in /etc/pam.d/openvpn]
F --> G[Implementare flusso di autenticazione nel plugin]
Compatibilità e migrazione
- pam_py_linotp richiede libpam-python; alcune distribuzioni moderne (es. recenti Ubuntu) potrebbero aver cambiato i pacchetti: verificare repository ufficiali.
- Se migrando da un’implementazione RADIUS, mappa attributi e politiche token su LinOTP.
Domande frequenti
Q: Posso usare solo certificati client senza OTP?
A: Sì, ma la forza dell’approccio è il doppio fattore; puoi configurare PAM per permettere la sola autenticazione certificata temporaneamente.
Q: LinOTP supporta smartphone come token?
A: Sì, supporta app TOTP come Google Authenticator o token hardware e altre varianti.
Q: Posso mettere LinOTP e OpenVPN su host separati?
A: Sì. Assicurati che OpenVPN server possa raggiungere l’endpoint LinOTP via HTTPS e aggiorna la URL in common-linotp.
Glossario rapido
- OTP: One-Time Password, password valida una sola volta.
- PAM: Pluggable Authentication Modules, sistema di autenticazione modulare di Linux.
- LinOTP: Server per la gestione e validazione di token OTP.
Conclusione
Abbiamo configurato OpenVPN per autenticare gli utenti con token OTP gestiti da LinOTP usando il modulo PAM pam_py_linotp. L’approccio combina autenticazione basata su certificati client e OTP utente, garantendo che sia la macchina sia l’utente siano autorizzati.
Riepilogo delle azioni pratiche:
- Installare LinOTP e pam_py_linotp.
- Creare common-linotp con URL corretto verso LinOTP.
- Configurare OpenVPN per usare openvpn-auth-pam.so e aggiornare /etc/pam.d/openvpn.
- Testare e predisporre procedure di rollback.
Annuncio breve (100–200 parole)
Abbiamo rilasciato una guida completa per integrare OpenVPN con LinOTP e abilitare l’autenticazione a due fattori tramite OTP. La procedura usa il modulo PAM pam_py_linotp per connettere OpenVPN al backend LinOTP: è adatta sia per ambienti con gestione centralizzata di token sia per scenari in cui LinOTP e OpenVPN convivono sullo stesso host. La guida include esempi di configurazione, checklist per ruoli, test di accettazione e un playbook di emergenza per rollback rapido. Implementando questa integrazione, ottieni un livello di sicurezza superiore perché la VPN richiede sia il certificato del dispositivo sia l’OTP dell’utente.
Materiali simili
Account Facebook violato: come recuperarlo

Correggere l'errore 0x80070718 in Windows 10

Come usare CoinDCX per comprare e vendere crypto

Vedere i post a cui hai messo Mi piace su Instagram
OpenVPN con autenticazione LinOTP
