Com configurar un servidor OpenVPN a Ubuntu 20.04

Guia definitiva per configurar un servidor OpenVPN segur a Ubuntu 20.04

Una xarxa privada virtual (VPN) us permet connectar-vos de manera segura i privada a una xarxa privada remota, per exemple, a la vostra xarxa d'oficina o a Internet de manera com si estigués connectat directament a una xarxa privada.

VPN funciona en una arquitectura servidor-client. Un servidor VPN es desplega en una màquina i és accessible públicament a través d'Internet. El servidor VPN es pot configurar per permetre la connexió a una LAN privada, com ara una xarxa d'oficina, o permetre connexions a Internet. L'usuari es connecta al servidor VPN mitjançant un client VPN a la seva màquina local. La comunicació entre el servidor VPN i el client es realitza mitjançant un protocol de túnel segur. A Internet, sembla com si la destinació del trànsit fos el servidor VPN; tanmateix, el trànsit passa al client a través del servidor.

La VPN té molts usos a la vida diària, com ara connectar-se de manera segura a una xarxa Wi-Fi pública, que sovint es veu compromesa o eludir les restriccions geogràfiques en determinats llocs web connectant-se a una VPN basada en un país que permet el lloc web.

OpenVPN és una implementació VPN àmpliament utilitzada que permet una àmplia gamma de configuracions i opcions. Utilitza el protocol Secure Sockets Layer (SSL) per al xifratge de les dades i claus precompartides, nom d'usuari/contrasenya o certificats per a l'autenticació del client VPN. En aquest article, veurem com configurar un servidor VPN i un client VPN a Ubuntu 20.04.

Instal·lació

OpenVPN està disponible als dipòsits oficials d'Ubuntu del paquet openvpn. Aquest paquet instal·la tant el servidor OpenVPN com el client.

sudo apt install openvpn

Com s'ha esmentat anteriorment, OpenVPN utilitza certificats SSL per xifrar dades entre el servidor i el client. Hem de configurar la nostra pròpia autoritat de certificació (CA) per emetre certificats per a la VPN. Tingueu en compte que això s'hauria de configurar en una màquina diferent a la on està configurat OpenVPN; el motiu és que si es troba al mateix servidor i si es veu compromès, un atacant pot accedir a la clau privada i així atacar la connexió VPN.

Utilitzarem una eina anomenada "Easy-RSA" per configurar l'autoritat de certificació. Per instal·lar-lo, executeu el següent a la màquina CA, la màquina del servidor OpenVPN i la màquina client, ja que la configuració és necessària en tots tres per configurar la CA.

sudo apt install easy-rsa

Ara configurarem primer l'autoritat de certificació a la màquina CA i realitzarem alguns passos de configuració necessaris per a la mateixa a la màquina del servidor Open VPN.

Configuració de l'autoritat de certificació

Configuració inicial a la màquina CA

Ara, aquest paquet instal·la una ordre anomenada fer-cadir que s'utilitza per crear una carpeta per a la configuració de l'autoritat de certificació. Creem una carpeta amb això i entrem a la carpeta.

make-cadir cert_authority && cd cert_authority

Obriu el fitxer anomenat vars creat en aquest directori. Aquest fitxer conté algunes variables de configuració que hem de modificar. Els valors que cal modificar es troben a les línies 91-96, després del comentari Àmbits organitzatius que descriu aquests camps. Descomenteu les línies i ompliu els valors adequats en lloc dels valors de mostra.

Desa i surt del fitxer. Si utilitzeu l'editor vim, premeu Esc, tipus :wq i premeu Entra per guardar i sortir.

A continuació, executem el easyrsa programa al directori per configurar la infraestructura de clau pública (PKI), que s'utilitzarà per generar la clau pública i els certificats.

./easyrsa init-pki

El següent pas generarà la clau i el certificat CA. Quan l'ordre demani una contrasenya, introduïu una contrasenya per a la clau CA. A més, introduïu un nom comú quan se us demani. Si ho deixeu en blanc, s'utilitzarà el nom predeterminat Nom Easy-RSA CA.

./easyrsa build-ca

Com podem veure a la sortida s'han generat el certificat i la clau. Aquesta clau s'utilitzarà per signar els certificats de client i servidor, per tant, no s'ha de tocar ni modificar mai.

Ara tenim la configuració de PKI. El següent pas és crear una clau de servidor i un certificat a la màquina que farem servir com a servidor OpenVPN. Aquest certificat serà signat posteriorment per la màquina CA.

Generació de clau i certificat del servidor a la màquina del servidor

Ja hem instal·lat Easy RSA a la màquina servidor. Ara realitzeu els tres passos a la màquina servidor, que hem fet anteriorment a la màquina CA, és a dir. creant un directori CA utilitzant fer-cadir i entrant-hi, modificant les variables del vars fitxer i generant PKI utilitzant ./easyrsa init-pki comandament.

A continuació, hem d'executar l'ordre per generar una sol·licitud i una clau de certificat de servidor.

./easyrsa gen-req server nopass

Tingueu en compte que hem passat l'opció nopass de manera que l'ordre no ens demani que introduïm una contrasenya per a la clau del servidor. Encara us demanarà un nom comú per al servidor, que podeu introduir qualsevol cosa, o deixar-lo buit per al nom predeterminat (servidor) per ser utilitzat.

Mou el fitxer de claus generat dins del fitxer /etc/openvpn directori.

sudo mv pki/private/server.key /etc/openvpn

Envieu la sol·licitud de certificat a la màquina CA. Farem servir l'ordre scp per a aquest propòsit.

scp pki/reqs/server.req usuari@CA_MACHINE_HOSTNAME:/directori

A la captura de pantalla anterior, l'amfitrió 45.79.125.41 és la màquina CA. Hem copiat el certificat al directori /root.

Ara, el certificat del servidor s'ha copiat a la màquina CA. El següent pas és tornar a la màquina CA i signar aquest certificat.

Signant el certificat del servidor a la CA

Primer, verifiquem si el fitxer de sol·licitud de certificat del servidor s'ha copiat a la màquina CA. Aneu al directori on hem copiat el fitxer (/root en el meu exemple) i executeu ls.

:~# cd /root && ls cert_authority server.req

Com podem veure, l'arxiu server.req està present. A continuació, aneu al directori CA i importeu aquesta sol·licitud.

cd autoritat_certificació ./easyrsa import-req /root/server.req server

Per signar aquesta sol·licitud, executeu l'ordre següent.

Servidor del servidor ./easyrsa sign-req

Aquí el primer argument és el tipus de sol·licitud, és a dir, servidor, i el segon argument és el nom comú de la màquina servidor, per a la qual abans hem utilitzat el valor per defecte, és a dir, servidor.

Introduïu la frase sí, i la contrasenya per a la clau CA quan se li demani.

Ara podem eliminar el fitxer de sol·licitud de certificat i copiar el certificat generat per al servidor, així com el certificat públic CA de nou a la màquina del servidor.

rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root

A continuació, hem de realitzar uns quants passos més per garantir una connexió segura de la VPN.

Generació de paràmetres DH

L'intercanvi de claus DH (Diffie-Hellman) és un algorisme per garantir un intercanvi segur de claus criptogràfiques a través d'un canal insegur. Primer, movem el certificat rebut i el certificat públic CA a /etc/openvpn.

mv /root/ca.crt /root/server.crt /etc/openvpn

Aneu a la carpeta CA de la màquina servidor i executeu l'ordre següent per generar els paràmetres DH. Pot ser que trigui molt de temps a generar-se.

./easyrsa gen-dh

Ara, moveu el fitxer generat a /etc/openvpn.

mv /root/cert_authority/pki/dh.pem /etc/openvpn

Generació de claus TA

OpenVPN utilitza una altra mesura de seguretat addicional mitjançant la clau d'autenticació TLS. Per generar la clau d'autenticació TLS, executeu:

openvpn --genkey --secret tls_auth.key

I mou la clau a /etc/openvpn.

mv tls_auth.key /etc/openvpn

La configuració de la clau del servidor i la configuració de l'autoritat de certificació ja s'han fet. Passem ara a la configuració real del servidor VPN.

Configuració del servidor OpenVPN

El fitxer de configuració del servidor OpenVPN no es crea automàticament, però podem utilitzar un fitxer de configuració de plantilla des de openvpn paquet.

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz

Obriu el fitxer amb vim o qualsevol editor que vulgueu.

cd /etc/openvpn vim server.conf

Hem d'introduir els noms comuns de claus i certificats que hem generat anteriorment. Aneu a la línia núm. 78. Com que hem utilitzat tots els noms per defecte, els mantenim sense canvis. A continuació, comproveu el nom del fitxer de paràmetres DH a la línia 85. Hem utilitzat el nom dh.pem, així que anem a canviar-lo.

A continuació, modifiquem els privilegis del servidor OpenVPN. Aneu a la línia 274 i 275 i traieu l'inici ; per descommentar-ho.

De la mateixa manera, aneu a la línia 192 i traieu el punt i coma. Aquesta directiva permet que el trànsit de tots els clients passi per la VPN.

Desa i surt del fitxer.

Canvieu la propietat de la carpeta /etc/openvpn a root.

sudo chown -R root:root /etc/openvpn

Configuració de xarxes i tallafoc

Hem de permetre el reenviament IP al servidor per permetre que els paquets es reenviïn des i cap al client VPN. Descomenteu la línia 28 /etc/sysctl.conf:

Desa i surt del fitxer.

Reinicia systemctl perquè aquests canvis es produeixin.

sudo sysctl -p

Hem de configurar la traducció d'adreces de xarxa (NAT) al servidor mitjançant un tallafoc UFW per permetre que el client VPN accedeixi a Internet mitjançant l'adreça IP del servidor VPN. Primer, activem el reenviament de paquets a la configuració del tallafoc. Obert /etc/default/ufw i canvieu la variable de la línia 19 per ACEPTAR.

Desa i surt del fitxer.

Ara afegiu les regles següents al fitxer /etc/ufw/before.rules Abans de filtre línia al fitxer.

*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT

Introduïu la vostra interfície de xarxa en lloc de . Podeu veure la vostra interfície de xarxa amb l'ordre ifconfig.

Permet el trànsit per al servei OpenVPN al tallafoc i permet el port 1194.

sudo ufw allow openvpn && sudo ufw allow 1194

Torneu a carregar el servei del tallafoc.

sudo ufw reload

Ara podem reiniciar el dimoni del servidor Open VPN executant:

Reiniciar el servei sudo openvpn

Activeu-lo perquè s'iniciï en el moment de l'arrencada executant:

sudo systemctl activa openvpn

El servidor OpenVPN s'ha configurat i s'ha iniciat. Passem ara a la sol·licitud de certificat del client i a la generació de claus i altres configuracions.

Configuració del client OpenVPN

Hem de generar una clau i una sol·licitud de certificat per al client. El procediment per fer-ho és el mateix que el del servidor.

Tot i que es pot crear una clau de client i una sol·licitud de certificat a la màquina client i després transferir-la a la màquina CA, es recomana crear-la a la màquina servidor. L'avantatge de fer-ho al servidor és que podeu crear un script per realitzar tots els passos necessaris al servidor, cosa que facilita que un nou client s'uneixi a la VPN.

Aneu a la carpeta CA del servidor i executeu el següent:

cd ~/cert_authority ./easyrsa gen-req client nopass

De la mateixa manera que s'ha fet anteriorment, introduïu un nom comú quan se us demani o deixeu-lo buit per utilitzar el nom comú predeterminat, és a dir, client.

Ara copiem la sol·licitud de certificat de client generada a la màquina CA.

scp pki/reqs/client.req [email protected]:/root

Importem aquesta sol·licitud a la màquina CA:

./easyrsa import-req /root/client.req client

I ara signem-ho:

Client client ./easyrsa sign-req

Entra quan se li demana que continuï. Introduïu la contrasenya per a la clau CA quan se us demani.

Ara podem eliminar el fitxer sol·licitat per al client i copiar la sol·licitud de nou a la màquina del servidor VPN.

rm /root/client.req scp pki/issued/client.crt [email protected]:/root

Creem una carpeta anomenada client per mantenir tots els fitxers relacionats amb el client al servidor VPN. Mourem la clau del client i el certificat a aquesta carpeta.

mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client

Ara, anem a crear un fitxer de configuració a partir d'una plantilla disponible, de manera similar a com vam crear el fitxer de configuració del servidor.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client

Obriu el fitxer client.conf. A la línia 42, introduïu el nom d'amfitrió o l'adreça IP de la vostra màquina servidor en lloc de el meu-servidor-1.

Descomenteu les línies 61 i 62 eliminant el punt i coma inicial, per rebaixar els privilegis del fitxer.

A continuació, comenta les línies 88-90 i la línia 108. El motiu és que volem afegir el contingut dels fitxers esmentats manualment en lloc d'utilitzar les ubicacions dels fitxers. El propòsit de fer-ho és que el fitxer de configuració del client es transfereixi més tard al client, on en realitat no tindrem la clau del client i els fitxers de certificat; per tant, copiem el contingut dels mateixos al fitxer de configuració.

Afegiu el següent al fitxer de configuració del client. Introduïu el contingut del fitxer dels fitxers respectius dins de les etiquetes donades.

 # Enganxeu el contingut del fitxer ca.crt aquí # Enganxeu el contingut del fitxer client.crt aquí # Enganxeu el contingut del fitxer client.key aquí la direcció de la clau 1 # Enganxeu el contingut del fitxer tls_auth.key aquí 

Desa i surt del fitxer. Canvia el nom d'aquest fitxer des de client.conf a client.ovpn, ja que aquesta última és l'extensió necessària per als fitxers de configuració que es poden importar com a configuracions de xarxa.

Ara, transfereix el fitxer client.ovpn al client, és a dir, a la màquina local.

Correr scp a la vostra màquina client per transferir fitxers de la màquina servidor a la vostra màquina local.

scp usuari@ip_servidor:/path_to_file local_destination_path

Finalment, hem d'utilitzar aquest fitxer de configuració per connectar-nos al servidor VPN. Això es pot fer tant a través de la línia d'ordres com de la GUI.

Per iniciar el client VPN des de la línia d'ordres, executeu:

sudo openvpn --config client.ovpn

I aquesta és l'única ordre que necessiteu executar per iniciar el client VPN.

Per iniciar el client VPN mitjançant GUI, seguiu els passos següents.

Aneu a Configuració » Xarxa a la vostra màquina client.

Feu clic a + botó a la secció VPN i trieu "Importa des del fitxer..." entre les opcions.

Feu clic a "Afegeix" per començar a utilitzar la VPN.

Tingueu en compte que a "Gateway", és l'adreça IP del servidor.

Finalment, activeu el botó "VPN del client" per habilitar la VPN a la màquina.

Pot ser que triguin uns segons a establir una connexió VPN. Un nou logotip de progrés per a VPN apareixerà a l'extrem superior esquerre de la pantalla mentre s'està configurant, i canviarà a un logotip de VPN un cop estigui configurat.

Per verificar si la VPN funciona correctament, executeu el següent:

curl //ipinfo.io/ip

Hauria de retornar l'adreça IP de la vostra màquina servidor. O també podeu comprovar la vostra adreça IP simplement cercant "La meva IP" a Google. Hauria de mostrar l'adreça IP del vostre servidor VPN si la nostra configuració VPN funciona correctament.

Conclusió

En aquest article, vam veure com configurar un servidor OpenVPN, una autoritat de certificació i un client OpenVPN. Per afegir més clients a la VPN, ara hem de seguir el procediment per generar i signar un certificat per al client i utilitzar el mateix fitxer de configuració creat aquí, amb només la clau del client i els valors del certificat canviats.

En el cas de connexions a Internet més lentes, és possible que si s'utilitza UDP per a la comunicació, hi hagi una pèrdua considerable de paquets. L'usuari pot canviar a TCP descommentant la línia proto tcp i comentant la línia proto udp al fitxer de configuració del servidor.

A més, en cas que hi hagi altres errors, podeu establir el nivell de registre amb el verb directiva tant als fitxers de configuració del servidor com del client. Podeu introduir valors entre 0 i 9. Com més alt sigui el valor d'aquesta directiva, més detallat serà el registre.