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 7.6. E implementeremo l'autenticazione OpenVPN basata su certificato.
Prerequisiti
- CentOS 7.6
- 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
In questo tutorial, utilizzeremo l'ultima versione di centos server (7.5) e useremo OpenVPN 2.4 con easy-rsa 3. Prima di installare i pacchetti OpenVPN e easy-rsa, assicurati che il repository 'epel' è installato sul sistema. Se non ce l'hai, installa il repository epel usando il comando yum qui sotto.
yum install epel-release -y
Ora installa OpenVPN 2.4 con easy-rsa 3 sul sistema.
yum install openvpn easy-rsa -y
Al termine dell'installazione, controlla la versione openvpn e easy-rsa.
openvpn --version
ls -lah /usr/share/easy-rsa/
È stato installato OpenVPN 2.4 con easy-rsa 3.
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/' e copia lo script 'easy-rsa'.
cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/
Ora vai nella directory 'easy-rsa/3/' e crea un nuovo file vars usando vim.
cd /etc/openvpn/easy-rsa/3/
vim vars
Incolla la configurazione 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-1.0.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
Il file vars per l'impostazione Easy-RSA 3 è stato creato.
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/3'.
cd /etc/openvpn/easy-rsa/3/
Inizializzazione e build CA
Prima di creare qualsiasi chiave, è necessario inizializzare la directory PKI 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:
- nessun passaggio =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
Costruisci la chiave Diffie-Hellman
Questa azione richiederà molto tempo, a seconda della lunghezza della chiave che abbiamo scelto e dell'entropia disponibile sul server. Useremo la chiave di lunghezza che definiamo nel file 'vars'.
Genera la chiave Diffie-Hellman usando il comando seguente.
./easyrsa gen-dh
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 sul tuo server VPN e desideri revocare una chiave, devi solo revocare utilizzando il comando easy-rsa.
Se vuoi revocare una chiave, esegui il comando come di seguito.
./easyrsa revoke someone
E quindi genera la chiave CRL.
./easyrsa gen-crl
Il file CRL PEM è stato generato nella directory 'pki' - di seguito è riportato un esempio sul mio server.
Copia file certificati
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/
Passaggio 4 - Configura OpenVPN
In questo passaggio creeremo una nuova configurazione 'server.conf' per il server openvpn.
Vai alla directory '/etc/openvpn/' e crea un nuovo file di configurazione 'server.conf' usando vim.
cd /etc/openvpn/
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.10.1.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 client to connect with 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 comp-lzo yes daemon user nobody group nobody # OpenVPN Log log-append /var/log/openvpn.log verb 3
Salva ed esci.
La configurazione per OpenVPN è stata creata.
Passaggio 5:abilitare il port forwarding e configurare il firewall di routing
In questo passaggio, abiliteremo il modulo 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' al servizio elenco firewalld e aggiungi l'interfaccia 'tun0' alla zona attendibile firewalld.
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Abilita 'MASQUERADE' sul firewalld di zona 'fidato'.
firewall-cmd --permanent --zone=trusted --add-masquerade
Abilita NAT per l'indirizzo IP interno OpenVPN '10.10.1.0/24' all'indirizzo IP esterno 'SERVERIP'.
SERVERIP=$(ip route get 84.200.69.80 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
E ricarica firewalld.
firewall-cmd --reload
Il port forwarding e il routing Firewalld sono stati completati, ora avvia il servizio openvpn e abilitalo all'avvio automatico ogni volta all'avvio del sistema.
systemctl start [email protected]
systemctl enable [email protected]
Controllalo usando i comandi seguenti.
netstat -plntu
systemctl status [email protected]
Il server OpenVPN è attivo e funzionante sulla porta del protocollo udp '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 139.xx.xx.xx 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
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/*
scp [email protected]:/etc/openvpn/client01.tar.gz .
Passaggio 7:test di 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 la 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.