Configura il server OpenVPN su Rocky Linux 8
Installa il repository EPEL
Gli ultimi pacchetti OpenVPN sono forniti dai repository EPEL su Rocky Linux 8 e altri derivati simili. EPEL può essere installato su Rocky Linux 8 eseguendo il comando seguente;
dnf install epel-release -y
Installa OpenVPN su Rocky Linux 8
Una volta che i repository EPEL sono a posto, ora puoi installare il pacchetto OpenVPN su Rocky Linux 8 eseguendo il comando seguente;
dnf install openvpn
Installa Easy-RSA CA Utility su Rocky Linux 8
Il pacchetto Easy-RSA è un'utilità CA basata su shell utilizzata per generare coppie di chiavi SSL utilizzate per proteggere le connessioni VPN.
dnf install easy-rsa
Crea un'infrastruttura a chiave pubblica OpenVPN
Il primo passaggio nella configurazione di un server OpenVPN consiste nel creare una PKI che consiste in chiavi pubbliche e private per il server OpenVPN e i client di connessione e un certificato dell'autorità di certificazione principale e una chiave privata per la firma del server OpenVPN e dei certificati client. Se possibile, dovresti creare la PKI su un server separato che esegue OpenVPN per motivi di sicurezza.
Inizializza la PKI
Easy-RSA viene utilizzato per la gestione delle PKI. Gli script Easy-RSA sono installati in /usr/share/easy-rsa
directory.
Per garantire che Easy-RSA qualsiasi configurazione effettuata non venga sovrascritta in caso di aggiornamento, copiare gli script in una directory diversa, preferibilmente in /etc
directory.
mkdir /etc/easy-rsa
cp -air /usr/share/easy-rsa/3/* /etc/easy-rsa/
Una volta che gli script sono a posto, vai alla directory e inizializza la PKI.
cd /etc/easy-rsa/
./easyrsa init-pki
Esempio di output del comando;
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/easy-rsa/pki
Genera il certificato e la chiave dell'autorità di certificazione (CA)
Quindi, genera il certificato CA e la chiave che verranno utilizzati per firmare i certificati eseguendo i comandi seguenti all'interno della directory Easy-RSA sopra.
./easyrsa build-ca
Verrà richiesta la passphrase della chiave della CA e il nome comune del server.
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: Generating RSA private key, 2048 bit long modulus (2 primes) ........................................+++++ ....................................................+++++ e is 65537 (0x010001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Kifarunix-demo CA CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/easy-rsa/pki/ca.crt
Il file CA è /etc/easy-rsa/pki/ca.crt
.
Genera parametri Diffie Hellman
Nella stessa directory Easy-RSA di cui sopra, eseguire il comando seguente per generare il file chiave Diffie-Hellman che può essere utilizzato per lo scambio di chiavi durante l'handshake TLS con i client in connessione.
./easyrsa gen-dh
Il completamento del comando richiederà del tempo. Quindi memorizza i parametri DH su /etc/easy-rsa/pki/dh.pem
file.
Genera certificato e chiave server OpenVPN
Per generare un certificato e una chiave privata per il server OpenVPN, esegui il comando seguente;
cd /etc/easy-rsa
./easyrsa build-server-full server nopass
Quando il comando viene eseguito, ti verrà chiesto di inserire la passphrase della chiave CA creata sopra.
nopass
disabilita l'uso della passphrase nei certificati.
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Generating a RSA private key .....+++++ ...............................+++++ writing new private key to '/etc/easy-rsa/pki/easy-rsa-10170.VLZsfK/tmp.4TRoOP' ----- Using configuration from /etc/easy-rsa/pki/easy-rsa-10170.VLZsfK/tmp.jTJJ7f Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Oct 3 18:03:20 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated
Genera chiave HMAC (Message Authentication Code) basata su hash
Per generare una chiave di autenticazione precondivisa TLS/SSL che verrà utilizzata per aggiungere una firma HMAC aggiuntiva a tutti i pacchetti di handshake SSL/TLS, per evitare attacchi DoS e inondazioni di porte UDP, eseguire il comando seguente;
openvpn --genkey --secret /etc/easy-rsa/pki/ta.key
Genera un certificato di revoca
Per invalidare un certificato precedentemente firmato, devi generare un certificato di revoca.
./easyrsa gen-crl
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Using configuration from /etc/easy-rsa/pki/easy-rsa-10284.mSzk9F/tmp.qdix0A Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: An updated CRL has been created. CRL file: /etc/easy-rsa/pki/crl.pe
Il certificato di revoca è archiviato come /etc/easy-rsa/pki/crl.pem
.
Copia certificati e chiavi del server nella directory del server
Quindi, copia tutti i certificati/le chiavi generati nella directory di configurazione del server OpenVPN.
cp -rp /etc/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem,issued,private} /etc/openvpn/server/
Genera certificato e chiave client OpenVPN
Per generare il certificato dei client OpenVPN e la chiave privata, esegui il comando seguente;
cd /etc/easy-rsa
./easyrsa build-client-full gentoo nopass
Esempio di output;
Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Generating a RSA private key ........................+++++ .........................................................................................+++++ writing new private key to '/etc/easy-rsa/pki/easy-rsa-10316.rcXRdS/tmp.tauo7u' ----- Using configuration from /etc/easy-rsa/pki/easy-rsa-10316.rcXRdS/tmp.RxlTaw Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'gentoo' Certificate is to be certified until Oct 3 18:05:23 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated
dove gento è il nome del client per il quale vengono generati il certificato e le chiavi. Usa sempre un nome comune univoco per ogni client per il quale stai generando il certificato e le chiavi.
Per generare per il secondo client,
./easyrsa build-client-full johndoe nopass
Copia certificati e chiavi client nella directory client
Crea una directory per ogni client nella directory del client OpenVPN
mkdir /etc/openvpn/client/{gentoo,johndoe}
Quindi, copia tutti i certificati/chiavi generati dal client e il certificato CA nella directory di configurazione del client OpenVPN. Puoi
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/gentoo.crt,private/gentoo.key} /etc/openvpn/client/gentoo
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/johndoe.crt,private/johndoe.key} /etc/openvpn/client/johndoe/
Configura il server OpenVPN su Rocky Linux 8
OpenVPN viene fornito con un file di configurazione di esempio all'interno della sua directory della documentazione. Copia il file in /etc/openvpn/server/
e modificalo in base alle tue esigenze.
cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
Apri la configurazione per la modifica.
vim /etc/openvpn/server/server.conf
Il file è molto commentato. Leggi i commenti per ogni opzione di configurazione.
Nella forma più semplice, di seguito sono riportate le nostre opzioni di configurazione, senza commenti.
port 1194 proto udp4 dev tun ca ca.crt cert issued/server.crt key private/server.key # This file should be kept secret dh dh.pem topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 192.168.10.3" client-to-client keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC comp-lzo user nobody group nobody persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1 auth SHA512
Salva ed esci dalla configurazione una volta terminata la modifica.
Vuoi assegnare indirizzi IP fissi/statici ai tuoi client OpenVPN? Segui la guida qui sotto;
Assegna indirizzi IP statici ai client OpenVPN
Crea directory di registro;
mkdir /var/log/openvpn/
Esplora la configurazione ed esegui ulteriori perfezionamenti in base alle tue esigenze.
Configura il routing del server OpenVPN
Per garantire che il traffico dal client venga instradato attraverso l'indirizzo IP del server (aiuta a mascherare l'indirizzo IP del client), è necessario abilitare l'inoltro IP sul server OpenVPN;
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
Esegui il comando seguente per apportare le modifiche senza riavviare il server.
sysctl --system
Consenti la porta del servizio OpenVPN tramite il firewall
firewall-cmd --add-port=1194/udp --permanent
Attiva IP Masquerading
firewall-cmd --add-masquerade --permanent
Inoltra il traffico ricevuto sulla sottorete OpenVPN specificata, ad esempio la 10.8.0.0/24 nel nostro caso, a un'interfaccia tramite la quale verranno inviati i pacchetti.
Per trovare l'interfaccia attraverso la quale vengono inviati i pacchetti eseguendo il comando seguente;
ip route get 8.8.8.8
8.8.8.8 via 10.0.2.2 dev enp0s3 src 10.0.2.15 uid 0
cache
Il nome dell'interfaccia e la sottorete definiti potrebbero essere diversi per il tuo caso. Sostituiscili di conseguenza.
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s3 -j MASQUERADE
Ricarica firewalld per rendere effettive le modifiche.
firewall-cmd --reload
Avvia e imposta OpenVPN eseguito all'avvio del sistema.
systemctl enable --now [email protected]
Quando il servizio OpenVPN viene eseguito, creerà un'interfaccia di tunneling, tun0;
ip add s
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::afd7:17a6:57ee:7f3b/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Controllo dei log;
tail /var/log/openvpn/openvpn.log
/sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255 Socket Buffers: R=[212992->212992] S=[212992->212992] UDPv4 link local (bound): [AF_INET][undef]:1194 UDPv4 link remote: [AF_UNSPEC] GID set to nobody UID set to nobody MULTI: multi_init called, r=256 v=256 IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=0 IFCONFIG POOL LIST Initialization Sequence Completed
Il tuo server OpenVPN è ora attivo e funzionante. Questo ci porta alla fine della nostra guida su come installare e configurare OpenVPN Server su Rocky Linux 8.
Ora puoi procedere con la configurazione dei client OpenVPN e interconnetterli tramite il server VPN.
Installa e configura il client OpenVPN su Rocky Linux 8
Altri tutorial
Assegna indirizzi IP statici ai client OpenVPN
Configura l'autenticazione basata su LDAP OpenVPN