OpenVPN sobre Linux

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca

Enunciat

Configura un Ubuntu Server com a servidor OpenVPN perquè un client extern pugui accedir a un servidor de la xarxa interna darrere del servidor de VPN.

Situació inicial

L'esquema de xarxa serà semblant a aquest:

M11UF2EX2-1-1.png


Tal com ho he muntat jo, tindré servdor i client amb Ubuntu Server 18/Fedora 29 en xarxes separades amb un pfSense que enruti entre elles; de manera que el túnel el faré entre diferents xarxes (la interna de VirtualBox entre Fedora29 i PfSense i, per l'altra banda, la interna entre PfSense i Ubuntu Server. Fins i tot podríem col·locar un sniffer per veure que el trànsit entre aquells hosts està xifrat amb OpenVPN.

Aquesta documentació s'ha fet administrant el servidor via SSH des del host amfitrió amb usuari amb permisos d'administració usant sudo o bé el superusuari root. El servidor es troba a 172.16.70.101.

Procediment

Tinc dues màquines: una amb Ubuntu Server i l'altra amb Ubuntu Desktop (el client). Haurem de configurar primer el servidor perquè sigui una Entitat Certificadora (CA) perquè OpenVPN es basa en el xifrat amb SSL; pel que necessitarem una entitat que pugui emetre certificats. Una vegada el servidor tingui els certificats necessaris, instal·larem i configurarem el servidor OpenVPN i, finalment, el client es connectarà al servidor.

Servidor

Primer de tot actualitzarem la llista de repositoris i el programari instal·lat

sudo apt update
sudo apt upgrade

Instal·larem els paquets necessaris per al servidor OpenVPN i el paquet necessari per a crear claus públiques, privades i certificats RSA, a més a més de git que ens permetrà fer servir un script automàtic per a posar en marxa el servidor i afegir clients de manera ràpida i fàcil

sudo apt-get install openvpn easy-rsa git

Clonarem el repositori dins el directori /opt...

cd /opt
git clone https://github.com/Nyr/openvpn-install.git

Ens mourem dins el directori que hem clonat i farem executable l'script d'instal·lació

cd openvpn-install
chmod +x openvpn-install.sh

Ara executarem l'script

./openvpn.install.sh

Se'ns demanaran paràmetres com ara l'adreça d'escolta del servidor, l'adreça IP pública (si aquest es troba darrere un NAT), el protocol que volem fer servir per la xarxa virtual (UDP/TCP), el port d'escolta, els DNS que volem que configurin els clients (mantenir els que tinguin o bé usar els de Google, OpenDNS, etc...) i finalment el nom pel client que farà servir aquella connexió.

Welcome to this OpenVPN "road warrior" installer!

I need to ask you a few questions before starting the setup.
You can leave the default options and just press enter if you are ok with them.

First, provide the IPv4 address of the network interface you want OpenVPN
listening to.
IP address: 172.16.70.101

This server is behind NAT. What is the public IPv4 address or hostname?
Public IP address / hostname: 192.168.70.2

Which protocol do you want for OpenVPN connections?
   1) UDP (recommended)
   2) TCP
Protocol [1-2]: 1

What port do you want OpenVPN listening to?
Port: 1194

Which DNS do you want to use with the VPN?
   1) Current system resolvers
   2) 1.1.1.1
   3) Google
   4) OpenDNS
   5) Verisign
DNS [1-5]: 4

Finally, tell me your name for the client certificate.
Please, use one word only, no special characters.
Client name: fedora29

Okay, that was all I needed. We are ready to set up your OpenVPN server now.

Una vegada posats a punt els paràmetres, el procediment de l'script és instal·lar paquets necessaris per a crear certificats i finalment generar l'arxiu .ovpn que hem de fer arribar al client perquè es connecti. Si necessitessim donar accés a un nou client, tan sols hauríem d'executar l'script de nou amb els mateixos paràmetres i canviant el nom del client.

Using SSL: openssl OpenSSL 1.1.0g  2 Nov 2017

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki

Generating RSA private key, 2048 bit long modulus
....................................+++
................+++
e is 65537 (0x010001)

Using SSL: openssl OpenSSL 1.1.0g  2 Nov 2017
Generating a 2048 bit RSA private key
..........................................+++
.......+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/server.key.wWa8Opze92'
-----
Using configuration from ./safessl-easyrsa.cnf
Can't open /etc/openvpn/easy-rsa/pki/index.txt.attr for reading, No such file or directory
139781053428160:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:74:fopen('/etc/openvpn/easy-rsa/pki/index.txt.attr','r')
139781053428160:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:81:
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 Jan 18 09:41:59 2029 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Using SSL: openssl OpenSSL 1.1.0g  2 Nov 2017
Generating a 2048 bit RSA private key
..........+++
.......+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/fedora29.key.bZUBYtJO20'
-----
Using configuration from ./safessl-easyrsa.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'fedora29'
Certificate is to be certified until Jan 18 09:42:00 2029 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Using SSL: openssl OpenSSL 1.1.0g  2 Nov 2017
Using configuration from ./safessl-easyrsa.cnf

An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/pki/crl.pem

396

Finished!

Your client configuration is available at: /root/fedora29.ovpn
If you want to add more clients, you simply need to run this script again!

Un cop creat l'arxiu .ovpn per al client, el podem enviar per SCP

scp /root/fedora29.ovpn guillem@192.168.56.1:/dades/fedora29.ovpn

Client

Amb un client que tingui interfície gràfica podem buscar documentació per a aquella interfície gràfica. Si no disposem de GUI, podem fer servir l'ordre

 openvpn --config /dades/fedora29.ovpn

en el nostre cas. La idea és especificar un arxiu de configuració .ovpn per a connectar-se al servidor.


Firewall (pfSense)

Hem de tenir en compte que el Firewall del PfSense no té cap regla per permetre el trànsit; haurem d'afegir primer una regla NAT per a mapejar el port 1194/UDP de la WAN cap al 1194 de l servidor 172.16.70.101 i demanar que se'ns creï una norma al firewall per a permetre aquest trànsit.

Regles del Firewall


Regla NAT per redireccionament de ports