Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
openvpn-install — Configura il tuo server OpenVPN su Debian, Ubuntu, Fedora, CentOS, Arch Linux e altro ancora. | Kitploit
Strumenti/GitHubGitHub/angristan/openvpn-install
Strumenti di Crittografia/DecrittografiaScripting e AutomazioneSicurezza di RetePrivacy
GitHubangristan/openvpn-install

openvpn-install

Configura il tuo server OpenVPN su Debian, Ubuntu, Fedora, CentOS, Arch Linux e altro ancora.

Vedi Repository
16.1k3.3k12 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

openvpn-install

Say Thanks!

Installatore OpenVPN per Debian, Ubuntu, Fedora, openSUSE, CentOS, Amazon Linux, Arch Linux, Oracle Linux, Rocky Linux e AlmaLinux.

Questo script ti permetterà di configurare e gestire il tuo server VPN sicuro in pochi secondi.

Cos'è?

Questo script è pensato per essere eseguito sul tuo server, che sia un VPS, un server dedicato o anche un computer a casa.

Una volta configurato, potrai generare file di configurazione client per ogni dispositivo che desideri connettere.

Ogni client potrà instradare il proprio traffico internet attraverso il server, completamente crittografato.```mermaid graph LR A[Phone] -->|Encrypted| VPN B[Laptop] -->|Encrypted| VPN C[Computer] -->|Encrypted| VPN

VPN[OpenVPN Server]

VPN --> I[Internet]

root@kitploit:~
## Perché OpenVPN?

OpenVPN era lo standard de facto per le VPN open-source quando questo script è stato creato. WireGuard è arrivato dopo ed è più semplice e veloce per la maggior parte dei casi d'uso. Dai un'occhiata a [wireguard-install](https://github.com/angristan/wireguard-install).

Detto questo, OpenVPN ha ancora senso quando hai bisogno di:

- **Supporto TCP**: funziona in ambienti restrittivi dove UDP è bloccato (reti aziendali, aeroporti, hotel, ecc.)
- **Chiavi private protette da password**: le configurazioni WireGuard memorizzano la chiave privata in testo semplice
- **Compatibilità legacy**: esistono client per praticamente ogni piattaforma, inclusi sistemi più vecchi

## Caratteristiche

- Installa e configura un server OpenVPN pronto all'uso
- Interfaccia CLI per automazione e scripting (modalità non interattiva con output JSON)
- Rinnovo dei certificati sia per il client che per il server
- Elenca e monitora i client connessi
- Disconnessione immediata del client alla revoca del certificato (tramite interfaccia di gestione)
- Utilizza i [repository ufficiali OpenVPN](https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos) quando possibile per le ultime versioni stabili
- Regole del firewall e forwarding gestiti senza problemi (supporto nativo per firewalld e nftables, fallback iptables)
- Sottoreti VPN configurabili (IPv4: default `10.8.0.0/24`, IPv6: default `fd42:42:42:42::/112`)
- MTU del tunnel configurabile (default: `1500`)
- Se necessario, lo script può rimuovere pulitamente OpenVPN, inclusa la configurazione e le regole del firewall
- Impostazioni di crittografia personalizzabili, impostazioni predefinite migliorate (vedi [Sicurezza e Crittografia](#security-and-encryption) sotto)
- Utilizza le ultime funzionalità di OpenVPN quando disponibili (vedi [Sicurezza e Crittografia](#security-and-encryption) sotto)
- Varietà di resolver DNS da inviare ai client
- Scelta di utilizzare un resolver self-hosted con Unbound (supporta installazioni Unbound già esistenti)
- Scelta tra TCP e UDP
- Supporto flessibile IPv4/IPv6:
  - Endpoint server IPv4 o IPv6 (come i client si connettono)
  - Client solo IPv4, solo IPv6 o dual-stack (indirizzamento VPN e accesso a Internet)
  - Tutte le combinazioni supportate: 4→4, 4→4/6, 4→6, 6→4, 6→6, 6→4/6
  - Prevenzione automatica delle perdite: blocca il protocollo indesiderato in modalità single-stack
- Modalità non privilegiata: esegue come `nobody`/`nogroup`
- Blocca le perdite DNS su Windows 10
- Nome del certificato del server randomizzato
- Scelta di proteggere i client con una password (crittografia della chiave privata)
- Opzione per permettere a più dispositivi di utilizzare lo stesso profilo client simultaneamente (disabilita indirizzi IP persistenti)
- **Autenticazione tramite impronta digitale del peer** (OpenVPN 2.6+): Autenticazione semplificata simile a WireGuard senza una CA
- Molte altre piccole cose!

## Compatibilità

Lo script supporta queste distribuzioni Linux:

|                     | Supporto |
| ------------------- | ------- |
| AlmaLinux >= 8      | ✅ 🤖   |
| Amazon Linux 2023   | ✅ 🤖   |
| Arch Linux          | ✅ 🤖   |
| CentOS Stream >= 8  | ✅ 🤖   |
| Debian >= 11        | ✅ 🤖   |
| Fedora >= 40        | ✅ 🤖   |
| openSUSE Leap >= 16 | ✅ 🤖   |
| openSUSE Tumbleweed | ✅ 🤖   |
| Oracle Linux >= 8   | ✅ 🤖   |
| Rocky Linux >= 8    | ✅ 🤖   |
| Ubuntu >= 18.04     | ✅ 🤖   |

Da notare:

- Lo script è regolarmente testato solo sulle distribuzioni contrassegnate con 🤖.
  - È testato solo su architettura `amd64`.
- Lo script richiede `systemd`.

### Fornitori consigliati

- [Vultr](https://umami.stanislas.cloud/q/1HH9Thp8i): Località in tutto il mondo, supporto IPv6, a partire da \$2.5/mese
- [Hetzner](https://umami.stanislas.cloud/q/HdzaOJWq7): Località in tutto il mondo, IPv6, 20 TB di traffico, a partire da €3.59/mese
- [Digital Ocean](https://umami.stanislas.cloud/q/sEVh1l79B): Località in tutto il mondo, supporto IPv6, a partire da \$4/mese

## Utilizzo

Per prima cosa, scarica lo script sul tuo server e rendilo eseguibile:```bash
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh

Devi eseguire lo script come root e avere il modulo TUN abilitato.

Modalità Interattiva

Il modo più semplice per iniziare è il menu interattivo:```bash ./openvpn-install.sh interactive

root@kitploit:~
Questo ti guiderà attraverso l'installazione e la gestione dei client.

Nella tua home directory, avrai file `.ovpn`. Questi sono i file di configurazione del client. Scaricali dal tuo server (usando `scp` per esempio) e connettiti utilizzando il tuo client OpenVPN preferito.

Se hai domande, consulta prima le [FAQ](#faq). E se hai bisogno di aiuto, puoi aprire una [discussione](https://github.com/angristan/openvpn-install/discussions). Per favore, cerca prima tra gli issue e le discussioni esistenti.

### Modalità CLI

> [!WARNING]
> La compatibilità delle API non è garantita. Potrebbero verificarsi modifiche sostanziali tra le versioni. Se si utilizza questo script in modo programmatico (ad esempio, in automazione o CI/CD), bloccare un commit specifico anziché utilizzare il branch master.

Per automazione e scripting, usa l'interfaccia CLI:```bash
# Install with defaults
./openvpn-install.sh install

# Add a client
./openvpn-install.sh client add alice

# List clients
./openvpn-install.sh client list

# Revoke a client (immediately disconnects if connected)
./openvpn-install.sh client revoke alice

Comandi```text

openvpn-install [options]

Commands: install Install and configure OpenVPN server uninstall Remove OpenVPN server client Manage client certificates server Server management interactive Launch interactive menu

Global Options: --verbose Show detailed output --log Log file path (default: openvpn-install.log) --no-log Disable file logging --no-color Disable colored output -h, --help Show help

root@kitploit:~
Esegui `./openvpn-install.sh <command> --help` per le opzioni specifiche del comando.

#### Gestione client```bash
# Add a new client
./openvpn-install.sh client add alice

# Add a password-protected client
./openvpn-install.sh client add bob --password

# Revoke a client
./openvpn-install.sh client revoke alice

# Renew a client certificate
./openvpn-install.sh client renew bob --cert-days 365

Elenca tutti i clienti:```text $ ./openvpn-install.sh client list ══ Client Certificates ══ [INFO] Found 3 client certificate(s)

Name Status Expiry Remaining


alice Valid 2035-01-15 3650 days bob Valid 2035-01-15 3650 days charlie Revoked 2035-01-15 unknown

root@kitploit:~
Output JSON per scripting:

```json```text
$ ./openvpn-install.sh client list --format json | jq
{
  "clients": [
    {
      "name": "alice",
      "status": "valid",
      "expiry": "2035-01-15",
      "days_remaining": 3650
    },
    {
      "name": "bob",
      "status": "valid",
      "expiry": "2035-01-15",
      "days_remaining": 3650
    },
    {
      "name": "charlie",
      "status": "revoked",
      "expiry": "2035-01-15",
      "days_remaining": null
    }
  ]
}

Gestione del server```bash

Renew server certificate

./openvpn-install.sh server renew

Uninstall OpenVPN

./openvpn-install.sh uninstall

root@kitploit:~
Mostra i client connessi (i dati si aggiornano ogni 60 secondi):```text
$ ./openvpn-install.sh server status
══ Connected Clients ══
[INFO] Found 2 connected client(s)

   Name    Real Address          VPN IP      Connected Since   Transfer
   ----    ------------          ------      ---------------   --------
   alice   203.0.113.45:52341    10.8.0.2    2025-01-15 14:32  ↓1.2M ↑500K
   bob     198.51.100.22:41892   10.8.0.3    2025-01-15 09:15  ↓800K ↑200K

[INFO] Note: Data refreshes every 60 seconds.

Opzioni di Installazione

Il comando install supporta molte opzioni per la personalizzazione:```bash

Custom port and protocol

./openvpn-install.sh install --port 443 --protocol tcp

Custom DNS provider

./openvpn-install.sh install --dns quad9

Custom encryption settings

./openvpn-install.sh install --cipher AES-256-GCM --cert-type rsa --rsa-bits 4096

Custom VPN subnet

./openvpn-install.sh install --subnet-ipv4 10.9.0.0

Enable dual-stack (IPv4 + IPv6) for clients

./openvpn-install.sh install --client-ipv4 --client-ipv6

IPv6-only clients (no IPv4)

./openvpn-install.sh install --no-client-ipv4 --client-ipv6

IPv6 endpoint (server listens on IPv6, clients connect via IPv6)

./openvpn-install.sh install --endpoint-type 6 --endpoint 2001:db8::1

Custom IPv6 subnet for dual-stack setup

./openvpn-install.sh install --client-ipv6 --subnet-ipv6 fd00🔢5678::

Skip initial client creation

./openvpn-install.sh install --no-client

Full example with multiple options

./openvpn-install.sh install
--port 443
--protocol tcp
--dns cloudflare
--cipher AES-256-GCM
--client mydevice
--client-cert-days 365

root@kitploit:~
**Network Options:**

- `--endpoint <host>` - IP pubblico o hostname per i client (default: rilevamento automatico)
- `--endpoint-type <4|6>` - Versione IP dell'endpoint (default: `4`)
- `--ip <addr>` - IP di ascolto del server (default: rilevamento automatico)
- `--client-ipv4` - Abilita IPv4 per i client VPN (default: abilitato)
- `--no-client-ipv4` - Disabilita IPv4 per i client VPN
- `--client-ipv6` - Abilita IPv6 per i client VPN (default: disabilitato)
- `--no-client-ipv6` - Disabilita IPv6 per i client VPN
- `--subnet-ipv4 <x.x.x.0>` - Sottorete VPN IPv4 (default: `10.8.0.0`)
- `--subnet-ipv6 <prefix>` - Sottorete VPN IPv6 (default: `fd42:42:42:42::`)
- `--port <num>` - Porta OpenVPN (default: `1194`)
- `--port-random` - Usa una porta casuale (49152-65535)
- `--protocol <udp|tcp>` - Protocollo (default: `udp`)
- `--mtu <size>` - MTU del tunnel (default: `1500`)

**DNS Options:**

- `--dns <provider>` - Provider DNS (default: `cloudflare`). Opzioni: `system`, `unbound`, `cloudflare`, `quad9`, `quad9-uncensored`, `fdn`, `dnswatch`, `opendns`, `google`, `yandex`, `adguard`, `nextdns`, `custom`
- `--dns-primary <ip>` - DNS primario personalizzato (richiede `--dns custom`)
- `--dns-secondary <ip>` - DNS secondario personalizzato (richiede `--dns custom`)

**Security Options:**

- `--cipher <cipher>` - Cifrario dei dati (default: `AES-128-GCM`). Opzioni: `AES-128-GCM`, `AES-192-GCM`, `AES-256-GCM`, `AES-128-CBC`, `AES-192-CBC`, `AES-256-CBC`, `CHACHA20-POLY1305`
- `--cert-type <ecdsa|rsa>` - Tipo di certificato (default: `ecdsa`)
- `--cert-curve <curve>` - Curva ECDSA (default: `prime256v1`). Opzioni: `prime256v1`, `secp384r1`, `secp521r1`
- `--rsa-bits <2048|3072|4096>` - Dimensione chiave RSA (default: `2048`)
- `--hmac <alg>` - Algoritmo HMAC (default: `SHA256`). Opzioni: `SHA256`, `SHA384`, `SHA512`
- `--tls-sig <mode>` - Modalità TLS (default: `crypt-v2`). Opzioni: `crypt-v2`, `crypt`, `auth`
- `--auth-mode <mode>` - Modalità di autenticazione (default: `pki`). Opzioni: `pki` (basato su CA), `fingerprint` (impronta del peer, richiede OpenVPN 2.6+)
- `--tls-version-min <1.2|1.3>` - Versione minima TLS (default: `1.2`)
- `--tls-ciphersuites <list>` - Suite di cifratura TLS 1.3, separate da due punti (default: `TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256`)
- `--tls-groups <list>` - Gruppi di scambio chiave, separati da due punti (default: `X25519:prime256v1:secp384r1:secp521r1`)
- `--server-cert-days <n>` - Validità del certificato server in giorni (default: `3650`)

**Client Options:**

- `--client <name>` - Nome iniziale del client (default: `client`)
- `--client-password [pass]` - Proteggi la chiave del client con password (default: nessuna password)
- `--client-cert-days <n>` - Validità del certificato client in giorni (default: `3650`)
- `--no-client` - Salta la creazione iniziale del client

**Other Options:**

- `--multi-client` - Permetti lo stesso certificato su più dispositivi (default: disabilitato)

#### Esempi di automazione

**Creazione batch di client:**```bash
#!/bin/bash
for user in alice bob charlie; do
  ./openvpn-install.sh client add "$user"
done

Crea client da un file:```bash #!/bin/bash while read -r user; do ./openvpn-install.sh client add "$user" done < users.txt

root@kitploit:~
**Output JSON per lo scripting:**```bash
# Get client list as JSON
./openvpn-install.sh client list --format json | jq '.clients[] | select(.status == "valid")'

# Get connected clients as JSON
./openvpn-install.sh server status --format json

Fork

Questo script è basato sull'ottimo lavoro di Nyr e dei suoi contributori.

Dal 2016, i due script hanno preso direzioni diverse e non sono più simili, specialmente internamente. L'obiettivo principale dello script era una sicurezza potenziata. Ma da allora, lo script è stato completamente riscritto e sono state aggiunte molte funzionalità. Lo script è comunque compatibile solo con distribuzioni recenti, quindi se hai bisogno di utilizzare un server o client molto vecchio, ti consiglio di usare lo script di Nyr.

FAQ

Altre domande e risposte in FAQ.md.

D: Quale provider consigli?

R: Consiglio questi:

  • Vultr: Posizioni in tutto il mondo, supporto IPv6, a partire da $2.5/mese
  • Hetzner: Posizioni in tutto il mondo, IPv6, 20 TB di traffico, a partire da €3.59/mese
  • Digital Ocean: Posizioni in tutto il mondo, supporto IPv6, a partire da $4/mese

D: Quale client OpenVPN consigli?

R: Se possibile, un client OpenVPN 2.4 ufficiale.

  • Windows: Il client ufficiale della community OpenVPN.
  • Linux: Il pacchetto openvpn dalla tua distribuzione. Esiste un repository APT ufficiale per distribuzioni basate su Debian/Ubuntu.
  • macOS: Tunnelblick, Viscosity, OpenVPN per Mac.
  • Android: OpenVPN per Android.
  • iOS: Il client ufficiale OpenVPN Connect.

D: Sono al sicuro dalla NSA usando il tuo script?

R: Per favore, esamina i tuoi modelli di minaccia. Anche se questo script tiene conto della sicurezza e utilizza crittografia all'avanguardia, non dovresti usare una VPN se vuoi nasconderti dalla NSA.


D: Esiste una documentazione di OpenVPN?

R: Sì, consulta il Manuale OpenVPN, che elenca tutte le opzioni.


Altre domande e risposte in FAQ.md.

Contribuire

Discutere le modifiche

Per favore apri una issue prima di inviare una PR se vuoi discutere una modifica, specialmente se è grande.

Sicurezza e Crittografia

[!NOTE] Questo script è stato creato nel 2016 quando le impostazioni predefinite di OpenVPN erano piuttosto deboli. Allora, personalizzare le impostazioni di crittografia era essenziale per una configurazione sicura. Da allora, OpenVPN ha migliorato significativamente le sue impostazioni predefinite, ma lo script offre ancora opzioni di personalizzazione.

OpenVPN 2.3 e precedenti erano forniti con impostazioni predefinite obsolete come Blowfish (BF-CBC), TLS 1.0 e SHA1. Ogni versione principale successiva ha portato miglioramenti significativi:

  • OpenVPN 2.4 (2016): Aggiunti ECDSA, ECDH, AES-GCM, NCP (negoziazione cifrario) e tls-crypt
  • OpenVPN 2.5 (2020): Cifrario predefinito cambiato da BF-CBC a AES-256-GCM:AES-128-GCM, aggiunti ChaCha20-Poly1305, tls-crypt-v2 e supporto TLS 1.3
  • OpenVPN 2.6 (2023): TLS 1.2 minimo per impostazione predefinita, compressione bloccata per impostazione predefinita, --peer-fingerprint per configurazioni senza PKI e accelerazione kernel DCO

Se vuoi maggiori informazioni su un'opzione menzionata di seguito, consulta il manuale OpenVPN. È molto completo.

La gestione dei certificati e della PKI è gestita da Easy-RSA. I parametri predefiniti sono nel file vars.example.

Compressione

Questo script supportava in precedenza gli algoritmi di compressione LZ4 e LZO, ma ne sconsigliava l'uso a causa della vulnerabilità VORACLE attack.

OpenVPN 2.6+ imposta --allow-compression su no per impostazione predefinita, bloccando anche la compressione inviata dal server. Ora che OpenVPN sta rimuovendo completamente il supporto alla compressione, questo script non la supporta più.

Versione TLS

[!NOTE] OpenVPN 2.6+ utilizza TLS 1.2 minimo per impostazione predefinita. Le versioni precedenti accettavano TLS 1.0 per impostazione predefinita.

OpenVPN 2.5 e versioni precedenti accettavano TLS 1.0 per impostazione predefinita, che ha quasi 20 anni.

Questo script imposta tls-version-min 1.2 come predefinito per la compatibilità con tutti i client OpenVPN 2.4+. Puoi opzionalmente impostare tls-version-min 1.3 per ambienti in cui tutti i client supportano TLS 1.3.

Il supporto TLS 1.3 è stato aggiunto in OpenVPN 2.5 e richiede OpenSSL 1.1.1+. TLS 1.3 offre maggiore sicurezza e prestazioni con un handshake semplificato.

Lo script configura le suite di cifratura TLS 1.3 tramite --tls-ciphersuites (separato dall'opzione TLS 1.2 --tls-cipher). Le suite di cifratura TLS 1.3 predefinite sono:

  • TLS_AES_256_GCM_SHA384
  • TLS_AES_128_GCM_SHA256
  • TLS_CHACHA20_POLY1305_SHA256

TLS 1.2 è supportato da OpenVPN 2.3.3. TLS 1.3 è supportato da OpenVPN 2.5.

Certificato

OpenVPN utilizza un certificato RSA con una chiave a 2048 bit per impostazione predefinita.

OpenVPN 2.4 ha aggiunto il supporto per ECDSA. La crittografia a curve ellittiche è più veloce, più leggera e più sicura.

Questo script fornisce:

  • ECDSA: curve prime256v1/secp384r1/secp521r1
  • RSA: chiavi 2048/3072/4096 bit

Di default sceglie ECDSA con prime256v1.

OpenVPN utilizza SHA-256 come hash di firma per impostazione predefinita, e così fa lo script. Al momento non offre altre scelte.

Modalità di Autenticazione

Lo script supporta due modalità di autenticazione:

Modalità PKI (predefinita)

Autenticazione tradizionale basata su Autorità di Certificazione (CA). Il server e tutti i client hanno certificati firmati dalla stessa CA. La revoca dei client è gestita tramite Liste di Revoca dei Certificati (CRL).

Questa è la modalità consigliata per distribuzioni più grandi dove hai bisogno di:

  • Gestione centralizzata dei certificati
  • Revoca basata su CRL standard
  • Compatibilità con tutte le versioni di OpenVPN

Modalità Impronta Peer (Peer Fingerprint) (OpenVPN 2.6+)

Un modello di autenticazione semplificato simile a WireGuard che utilizza impronte digitali SHA256 dei certificati invece di una catena di CA. Ogni peer (server e client) ha un certificato auto-firmato e i peer si autenticano reciprocamente verificando le impronte digitali.```bash

Install with fingerprint mode

./openvpn-install.sh install --auth-mode fingerprint

root@kitploit:~
Vantaggi:

- Configurazione più semplice: nessuna infrastruttura CA necessaria
- Più facile da capire: simile al modello `known_hosts` di SSH
- Ideale per configurazioni piccole: reti domestiche, laboratori, team ridotti

Come funziona:

1. Il server genera un certificato auto-firmato e memorizza la sua impronta digitale
2. Ogni client genera un certificato auto-firmato
3. Le impronte digitali dei client vengono aggiunte al blocco `<peer-fingerprint>` del server
4. I client verificano il server usando l'impronta digitale del server
5. La revoca rimuove l'impronta digitale dalla configurazione del server (nessun CRL necessario)

Compromesso: revocare un client richiede il ricaricamento di OpenVPN (le impronte digitali sono in server.conf). In modalità PKI, il file CRL viene riletto automaticamente sulle nuove connessioni.

### Canale dati

> [!NOTE]
> Il cifrario predefinito del canale dati è cambiato in OpenVPN 2.5. Le versioni precedenti utilizzavano come default `BF-CBC`, mentre OpenVPN 2.5+ utilizza come default `AES-256-GCM:AES-128-GCM`. OpenVPN 2.6+ include anche `CHACHA20-POLY1305` nell'elenco dei cifrari predefiniti quando disponibile.

Per impostazione predefinita, OpenVPN 2.4 e versioni precedenti utilizzavano `BF-CBC` come cifrario del canale dati. Blowfish è un algoritmo vecchio (1993) e debole. Persino la documentazione ufficiale di OpenVPN lo ammette.

> Il default è BF-CBC, un'abbreviazione per Blowfish in modalità Cipher Block Chaining.
>
> L'uso di BF-CBC non è più raccomandato a causa della sua dimensione del blocco di 64 bit. Questa piccola dimensione del blocco consente attacchi basati su collisioni, come dimostrato da SWEET32. Vedi <https://community.openvpn.net/openvpn/wiki/SWEET32> per i dettagli.
> Ricercatori di sicurezza presso INRIA hanno pubblicato un attacco sui cifrari a blocchi a 64 bit, come 3DES e Blowfish. Mostrano di essere in grado di recuperare il testo in chiaro quando gli stessi dati vengono inviati abbastanza spesso, e mostrano come possono utilizzare vulnerabilità di cross-site scripting per inviare dati di interesse abbastanza spesso. Questo funziona su HTTPS, ma funziona anche per HTTP-over-OpenVPN. Vedi <https://sweet32.info/> per una spiegazione molto migliore e più dettagliata.
>
> Il cifrario predefinito di OpenVPN, BF-CBC, è affetto da questo attacco.

In effetti, AES è lo standard odierno. È il cifrario più veloce e sicuro disponibile oggi. [SEED](https://en.wikipedia.org/wiki/SEED) e [Camellia](https://github.com/angristan/openvpn-install/blob/HEAD/%3Chttps:/en.wikipedia.org/wiki/Camellia_(cipher)>) non sono ancora vulnerabili ma sono più lenti di AES e relativamente meno affidabili.

> Dei cifrari attualmente supportati, OpenVPN raccomanda attualmente l'uso di AES-256-CBC o AES-128-CBC. OpenVPN 2.4 e successivi supporteranno anche GCM. Per 2.4+, raccomandiamo l'uso di AES-256-GCM o AES-128-GCM.

AES-256 è il 40% più lento di AES-128, e non c'è una reale ragione per usare una chiave a 256 bit rispetto a una chiave a 128 bit con AES. (Fonte: [1](http://security.stackexchange.com/questions/14068/why-most-people-use-256-bit-encryption-instead-of-128-bit),[2](http://security.stackexchange.com/questions/6141/amount-of-simple-operations-that-is-safely-out-of-reach-for-all-humanity/6149#6149)). Inoltre, AES-256 è più vulnerabile a [Timing attacks](https://en.wikipedia.org/wiki/Timing_attack).

AES-GCM è un [cifrario AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption) il che significa che fornisce simultaneamente garanzie di riservatezza, integrità e autenticità sui dati.

ChaCha20-Poly1305 è un altro cifrario AEAD che fornisce una sicurezza simile a AES-GCM. È particolarmente utile su dispositivi senza accelerazione hardware AES (AES-NI), come CPU più vecchie e molti dispositivi basati su ARM, dove può essere significativamente più veloce di AES.

Lo script supporta i seguenti cifrari:

- `AES-128-GCM`
- `AES-192-GCM`
- `AES-256-GCM`
- `AES-128-CBC`
- `AES-192-CBC`
- `AES-256-CBC`
- `CHACHA20-POLY1305` (richiede OpenVPN 2.5+)

E di default utilizza `AES-128-GCM`.

OpenVPN 2.4 ha aggiunto una funzionalità chiamata "NCP": _Negotiable Crypto Parameters_. Significa che puoi fornire una suite di cifrari come con HTTPS. È impostato su `AES-256-GCM:AES-128-GCM` di default e sovrascrive il parametro `--cipher` quando utilizzato con un client OpenVPN 2.4. Per semplicità, lo script imposta `--cipher` (fallback per client non NCP), `--data-ciphers` (nomenclatura moderna OpenVPN 2.5+), e `--ncp-ciphers` (alias legacy per compatibilità OpenVPN 2.4) al cifrario scelto sopra.

### Canale di controllo

OpenVPN 2.4 negozierà il miglior cifrario disponibile di default (ad es. ECDHE+AES-256-GCM)

#### Cifrari TLS 1.2 (`--tls-cipher`)

Lo script propone le seguenti opzioni, a seconda del certificato:

- ECDSA:
  - `TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256`
  - `TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384`
  - `TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256` (richiede OpenVPN 2.5+)
- RSA:
  - `TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256`
  - `TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384`
  - `TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256` (richiede OpenVPN 2.5+)

Di default utilizza `TLS-ECDHE-*-WITH-AES-128-GCM-SHA256`.

#### Cifrari TLS 1.3 (`--tls-ciphersuites`)

Quando viene negoziato TLS 1.3, viene utilizzato un insieme separato di suite di cifratura. Queste sono configurate tramite `--tls-ciphersuites` e usano le convenzioni di nomenclatura OpenSSL:

- `TLS_AES_256_GCM_SHA384`
- `TLS_AES_128_GCM_SHA256`
- `TLS_CHACHA20_POLY1305_SHA256`

Per impostazione predefinita, tutte e tre le suite di cifratura sono abilitate. Le suite di cifratura TLS 1.3 sono più semplici perché non includono l'algoritmo di scambio chiave (che viene negoziato separatamente tramite key shares).

### Scambio di chiavi

OpenVPN storicamente utilizzava come default parametri DH a 2048 bit per lo scambio di chiavi. Questo script offriva sia DH (con dimensioni di chiave configurabili) che ECDH come alternative.

OpenVPN 2.4 ha aggiunto il supporto ECDH, e OpenVPN 2.7 ha reso `dh none` (ECDH) il default, dato che il DH su campi finiti è stato deprecato. Poiché ECDH è ora universalmente supportato e preferito, questo script non offre più DH tradizionale.

Lo script configura `tls-groups` con il seguente elenco di preferenze:```
X25519:prime256v1:secp384r1:secp521r1
  • X25519: Veloce, curva moderna (Curve25519), ampiamente supportata
  • prime256v1: NIST P-256, la più compatibile
  • secp384r1: NIST P-384, sicurezza superiore
  • secp521r1: NIST P-521, massima sicurezza

Puoi personalizzare questo con --tls-groups.

Algoritmo digest HMAC

Dal wiki di OpenVPN, su --auth:

Autentica i pacchetti del canale dati e (se abilitati) i pacchetti del canale di controllo tls-auth con HMAC utilizzando l'algoritmo di digest del messaggio alg. (Il valore predefinito è SHA1). HMAC è un algoritmo di autenticazione dei messaggi (MAC) comunemente utilizzato che impiega una stringa di dati, un algoritmo di hash sicuro e una chiave per produrre una firma digitale.

Se viene scelta una modalità di cifratura AEAD (ad es. GCM), l'algoritmo --auth specificato viene ignorato per il canale dati e al suo posto viene utilizzato il metodo di autenticazione della cifratura AEAD. Nota che alg specifica ancora il digest utilizzato per tls-auth.

Lo script offre le seguenti scelte:

  • SHA256
  • SHA384
  • SHA512

Il valore predefinito è SHA256.

tls-auth, tls-crypt e tls-crypt-v2

Dal wiki di OpenVPN, su tls-auth:

Aggiunge un ulteriore livello di autenticazione HMAC sopra il canale di controllo TLS per mitigare attacchi DoS e attacchi allo stack TLS.

In poche parole, --tls-auth abilita una sorta di "firewall HMAC" sulla porta TCP/UDP di OpenVPN, dove i pacchetti del canale di controllo TLS con una firma HMAC errata possono essere immediatamente scartati senza risposta.

Su tls-crypt:

Cifra e autentica tutti i pacchetti del canale di controllo con la chiave dal file keyfile. (Vedi --tls-auth per maggiori informazioni.)

Cifrare (e autenticare) i pacchetti del canale di controllo:

  • offre maggiore privacy nascondendo il certificato utilizzato per la connessione TLS,
  • rende più difficile identificare il traffico OpenVPN come tale,
  • fornisce una sicurezza "post-quantistica da poveri", contro attaccanti che non conosceranno mai la chiave pre-condivisa (cioè nessuna segretezza perfetta).

Quindi entrambi forniscono un ulteriore livello di sicurezza e mitigano gli attacchi DoS. Non sono utilizzati per impostazione predefinita da OpenVPN.

tls-crypt è una funzionalità di OpenVPN 2.4 che fornisce crittografia oltre all'autenticazione (a differenza di tls-auth). È più rispettosa della privacy.

tls-crypt-v2 è una funzionalità di OpenVPN 2.5 che si basa su tls-crypt utilizzando chiavi per cliente invece di una chiave condivisa. Ogni client riceve una chiave univoca derivata da una chiave del server. Questo fornisce:

  • Migliore sicurezza: Se una chiave client viene compromessa, gli altri client non vengono influenzati
  • Gestione delle chiavi più semplice: Le chiavi client possono essere revocate individualmente senza rigenerare la chiave del server
  • Scalabilità: Più adatta per distribuzioni su larga scala con molti client

Lo script supporta tutte e tre le opzioni:

  • tls-crypt-v2 (predefinito): Chiavi per cliente per una maggiore sicurezza
  • tls-crypt: Chiave condivisa per tutti i client, compatibile con OpenVPN 2.4+
  • tls-auth: Solo autenticazione HMAC (nessuna crittografia), compatibile con client più vecchi

Verifica del tipo di certificato (remote-cert-tls)

Il server è configurato con remote-cert-tls client, che richiede che i peer in connessione abbiano un certificato con l'uso esteso della chiave "TLS Web Client Authentication". Ciò impedisce che un certificato server venga utilizzato per impersonare un client.

Allo stesso modo, i client sono configurati con remote-cert-tls server per assicurarsi di connettersi solo a server che presentano certificati server validi. Questo protegge da un attaccante con un certificato client valido che configura un server rogue.

Data Channel Offload (DCO)

Data Channel Offload (DCO) è una funzionalità di accelerazione del kernel che migliora significativamente le prestazioni di OpenVPN mantenendo la crittografia/decrittografia del canale dati nello spazio kernel, eliminando i costosi cambi di contesto tra spazio utente e kernel per ogni pacchetto.

DCO è stato integrato nel kernel Linux 6.16 (aprile 2025).

Requisiti:

  • OpenVPN 2.6.0 o successivo
  • kernel Linux 6.16+ (integrato) o modulo kernel ovpn-dco
  • protocollo UDP (TCP non supportato)
  • cifratura AEAD (AES-128-GCM, AES-256-GCM o CHACHA20-POLY1305)

Le impostazioni predefinite dello script (AES-128-GCM, UDP) sono compatibili con DCO. Quando DCO è disponibile e la configurazione è compatibile, OpenVPN lo utilizzerà automaticamente per migliorare le prestazioni.

Nota: DCO deve essere supportato sia sul server che sul client per una piena accelerazione. Il supporto client è disponibile in OpenVPN 2.6+ (Linux, Windows, FreeBSD) e OpenVPN Connect 3.4+ (Windows). macOS attualmente non supporta DCO, ma i client possono comunque connettersi a server con DCO abilitato, con benefici parziali delle prestazioni lato server.

Lo script mostrerà lo stato di disponibilità di DCO durante l'installazione.

Dì grazie

Puoi dire grazie se vuoi!

Crediti e Licenza

Un grande ringraziamento ai contributori e al lavoro originale di Nyr.

Questo progetto è sotto la Licenza MIT

Storia delle Stelle

Star History Chart

Scarica lo strumento