OpenVPN è un'applicazione open source che ti consente di creare una rete privata sicura su Internet pubblico. OpenVPN implementa una rete privata virtuale (VPN) per creare una connessione sicura. OpenVPN Utilizza la libreria OpenSSL per fornire la crittografia e fornisce diversi meccanismi di autenticazione, come chiavi precondivise basate su certificati e autenticazione nome utente/password.
In questo tutorial, ti mostreremo come installare e configurare passo dopo passo OpenVPN su CentOS 8 Server. E implementeremo l'autenticazione OpenVPN basata su certificato.
Prerequisiti
- Server CentOS 8
- Privilegi di root
Cosa faremo?
- Installa OpenVPN e Easy-RSA
- Configura Easy-RSA 3 Vars
- Crea chiavi OpenVPN
- Configura il server OpenVPN
- Configura Firewalld e abilita Port Forwarding
- Configurazione client
- Test
Passaggio 1:installa OpenVPN e Easy-RSA
Innanzitutto, aggiungeremo il repository EPEL (Extra Package for Enterprise Linux), installeremo l'ultimo pacchetto OpenVPN e scaricheremo lo script easy-rsa sul sistema CentOS 8.
Installa il repository EPEL utilizzando il comando dnf di seguito.
dnf install epel-release
Successivamente, installa l'ultimo pacchetto OpenVPN 2.4.7.
dnf install openvpn
Una volta completata l'installazione, vai su '/etc/openvpn' e scarica lo script easy-rsa usando il comando wget qui sotto.
cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
Ora estrai il file 'EasyRSA-unix-v3.0.6.tgz' e rinomina la directory in 'easy-rsa'.
tar -xf EasyRSA-unix-v3.0.6.tgz
mv EasyRSA-v3.0.6/ easy-rsa/; rm -f EasyRSA-unix-v3.0.6.tgz
Il pacchetto OpenVPN e lo script easy-rsa sono stati installati sul sistema CentOS 8.
Passaggio 2 - Configura Easy-RSA 3
In questo passaggio configureremo easy-rsa 3 creando un nuovo file 'vars'. Il file 'vars' contiene le impostazioni di Easy-RSA 3.
Vai alla directory '/etc/openvpn/easy-rsa/' e crea un nuovo script vars usando l'editor vim.
cd /etc/openvpn/easy-rsa/
vim vars
Incolla le configurazioni di vars easy-rsa 3 di seguito.
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "ID"
set_var EASYRSA_REQ_PROVINCE "Jakarta"
set_var EASYRSA_REQ_CITY "Jakarta"
set_var EASYRSA_REQ_ORG "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST "sha256"
Salva ed esci.
Nota:
- Cambia i valori delle variabili di cui hai bisogno.
- Aumenta "EASYRSA_KEY_SIZE" per una maggiore sicurezza.
- Cambia 'EASYRSA_CA_EXPIRE' e 'EASYRSA_CERT_EXPIRE'.
Ora rendi eseguibile il file 'vars' modificando i permessi del file.
chmod +x vars
La configurazione di easy-rsa 3 è stata completata.
Passaggio 3:crea chiavi OpenVPN
In questo passaggio, creeremo le chiavi OpenVPN in base al file 'vars' di easy-rsa 3 che abbiamo creato. Creeremo la chiave CA, le chiavi del server e del client, il file PEM DH e CRL.
Costruiremo tutte quelle chiavi usando la riga di comando 'easyrsa'. Vai alla directory '/etc/openvpn/easy-rsa/'.
cd /etc/openvpn/easy-rsa/3/
- Inizializzazione e build CA
Prima di creare la chiave server e client, è necessario inizializzare la directory PKI (Public Key Infrastructure) e creare la chiave CA.
Avvia la directory PKI e crea la chiave CA utilizzando il comando seguente.
./easyrsa init-pki
./easyrsa build-ca
Ora digita la password per la tua chiave CA e otterrai i tuoi file 'ca.crt' e 'ca.key' nella directory 'pki'.
- Crea chiave server
Ora vogliamo creare la chiave del server e costruiremo la chiave del server denominata 'hakase-server'.
Crea la chiave del server 'hakase-server' usando il comando seguente.
./easyrsa gen-req hakase-server nopass
Nota:
- nopass =opzione per disabilitare la password per la chiave 'hakase-server'.
E firma la chiave 'hakase-server' utilizzando il nostro certificato CA.
./easyrsa sign-req server hakase-server
Ti verrà richiesta la password 'CA', digita la password e premi Invio. E otterrai il file del certificato 'hakase-server.crt' nella directory 'pki/issued/'.
Verifica il file del certificato utilizzando il comando OpenSSL e assicurati che non ci siano errori.
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
Tutte le chiavi del certificato del server sono state create. La chiave privata del server si trova in "pki/private/hakase-server.key" e il certificato del server in "pki/issued/hakase-server.crt".
- Crea chiave client
Ora dobbiamo creare chiavi per il client. Genereremo una nuova chiave client denominata 'client01'.
Genera la chiave 'client01' usando il comando seguente.
./easyrsa gen-req client01 nopass
Ora firma la chiave "client01" usando il nostro certificato CA come di seguito.
./easyrsa sign-req client client01
Digita "yes" per confermare la richiesta del certificato client, quindi digita la password della CA.
Il certificato client denominato 'client01' è stato generato, verifica il certificato client utilizzando il comando openssl.
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
Assicurati che non ci siano errori.
- Costruisci la chiave Diffie-Hellman
La chiave Diffie-Hellman è necessaria per una maggiore sicurezza. E genereremo la chiave DH "2048" in base al file di configurazione "vars" creato in alto.
Genera la chiave Diffie-Hellman usando il comando seguente.
./easyrsa gen-dh
E la chiave DH è stata generata, situata nella directory 'pki'.
- Facoltativo:genera la chiave CRL
La chiave CRL (Certificate Revoking List) verrà utilizzata per revocare la chiave client. Se hai più certificati client di client sul tuo server VPN e desideri rimuovere la chiave di qualcuno, devi solo revocare utilizzando il comando easy-rsa.
Se vuoi revocare una chiave, esegui il comando seguente.
./easyrsa revoke someone
E quindi genera la chiave CRL.
./easyrsa gen-crl
Il file CRL PEM è stato generato nella directory 'pki':quello che segue è un esempio sul mio server.
- Copia i file del certificato
Tutti i certificati sono stati generati, ora copia i file del certificato e i file PEM.
Copia la chiave e il certificato del server.
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/
Copia la chiave e il certificato client01.
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
Copia la chiave DH e CRL.
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
Tutti i certificati per server e client sono stati copiati in ciascuna directory.
Passaggio 4 - Configura OpenVPN
In questo passaggio creeremo una nuova configurazione 'server.conf' per il server OpenVPN.
Vai alla directory '/etc/openvpn/server/' e crea un nuovo file di configurazione 'server.conf' usando vim.
cd /etc/openvpn/server/
vim server.conf
Incolla lì la seguente configurazione del server OpenVPN.
# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun
# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/hakase-server.crt
key /etc/openvpn/server/hakase-server.key
#DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem
# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.0.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
persist-key
persist-tun
compress lz4
daemon
user nobody
group nobody
# OpenVPN Log
log-append /var/log/openvpn.log
verb 3
Salva ed esci.
Ed è stata creata la configurazione del server OpenVPN.
Passaggio 5:abilitare il port forwarding e configurare il routing in Firewalld
In questo passaggio, abiliteremo il modulo del kernel di port forwarding e configureremo il routing "Firewalld" per OpenVPN.
Abilita il modulo del kernel di port forwarding eseguendo i seguenti comandi.
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
Quindi, configura il routing utilizzando Firewalld per OpenVPN.
Aggiungi il servizio OpenVPN alla zona firewall "pubblica" e "fidabile".
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-service=openvpn
Successivamente, aggiungi "tun0" alla zona "fidabile".
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Ora abilita "MASQUERADE" sul firewalld di zona "pubblico" predefinito.
firewall-cmd --permanent --add-masquerade
Abilita NAT per l'indirizzo IP interno OpenVPN '10.5.0.0/24' all'indirizzo IP esterno 'SERVERIP'.
SERVERIP=$(ip route get 1.1.1.1 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.5.0.0/24 -o $SERVERIP -j MASQUERADE
E ricarica firewalld.
firewall-cmd --reload
La configurazione del port forwarding e del routing Firewalld è stata completata, avvia il servizio OpenVPN e abilitalo all'avvio automatico ogni volta all'avvio del sistema.
systemctl start ope[email protected]
systemctl enable [email protected]
Successivamente, controlla il servizio OpenVPN utilizzando i comandi seguenti.
netstat -plntu
systemctl status [email protected]
E otterrai il risultato come di seguito.
Di conseguenza, il servizio OpenVPN è attivo e funzionante sul protocollo UDP con la porta predefinita "1194".
Passaggio 6 - Configurazione del client OpenVPN
Vai alla directory '/etc/openvpn/client' e crea un nuovo file di configurazione del client openvpn 'client01.ovpn' usando vim.
cd /etc/openvpn/client
vim client01.ovpn
Incolla lì la seguente configurazione del client OpenVPN.
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 lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
Salva ed esci.
Ora comprimi la directory '/etc/openvpn/client' nel file 'zip' o 'tar.gz' e scarica il file compresso usando SCP dal tuo computer locale.
Comprimi la directory '/etc/openvpn/client' nel file 'client01.tar.gz'.
cd /etc/openvpn/
tar -czvf client01.tar.gz client/*
Ora puoi scaricare il file compresso OpenVPN utilizzando il server FTP o il comando scp come di seguito.
scp [email protected]:/etc/openvpn/client01.tar.gz .
Passaggio 7:connessione a OpenVPN
Test sui Clienti.
- Su Linux
Installa il pacchetto OpenVPN e, se desideri una configurazione della GUI, installa il gestore di rete OpenVPN.
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y
Se desideri connetterti utilizzando una shell di terminale, esegui il comando OpenVPN di seguito.
openvpn --config client01.ovpn
Quando sei connesso a OpenVPN, apri una nuova scheda del terminale e controlla la connessione usando il comando curl.
curl ifconfig.io
E otterrai l'indirizzo IP del server OpenVPN.
- Su Mac OS
Scarica Tunnelblick e installalo.
Estrarre il file 'client01.tar.gz' e rinominare la directory 'client' in 'client01.tblk'.
tar -xzvf client01.tar.gz
mv client client01.tblk
Fare doppio clic su 'client01.tblk' e Tunnelblick rileverà automaticamente la configurazione di OpenVPN e quindi importerà.
Ora connettiti tramite Tunnelblick sulla barra in alto.
- Su Windows
Scarica il client openvpn per Windows e importa la configurazione.