Apunts OpenVPN
Guia DIY

Table of Contents

1 Introducció a OpenVPN

Els serveis de VPN s'utilitzen tradicionalment per interconnectar dues o més xarxes LAN utilitzant com a transport una tercera xarxa, normalment WAN o MAN, com a mitjà de connexió.

Com que no es té control sobre aquesta xarxa WAN, s'utilitza un túnel xifrat per enviar les dades, autenticant de pas tant el client com el servidor amb certificats digitals.

Aquesta connexió permet gestionar com una sola LAN, dues LANs separades físicament, obrint la porta a la gestió centralitzada i telemàtica de diferents seus d'una empresa i eliminant la necessitat de duplicació de infraestructura d'administració i gestió de la mateixa.

La implementació en programari lliure de VPN més extensa és OpenVPN.

openvpn.png

NOTA: En aquests apunts, es realitza una instal·lació totalment a mà. El que es troba de forma comú a Internet és l'ús d'un script per generar tots els certificats i claus necessaris per la PKI, tanmateix s'ha descartat per qüestions pedagògiques.

2 Màquina Virtual (VirtualBox)

Les proves s'han realitzat amb dues VM amb les següents característiques, una per al servidor i un altre per al client:

Interfície de xarxa
Adaptador pont.
S.O.
Debian 10.
Serveis
Per comoditat a l'hora de treballar s'instal·la openssh-server per poder treballar des de la màquina host.

3 Instal·lació i configuració del servidor OpenVPN

3.1 Forwarding

ATENCIÓ: Això tan sols cal fer-ho, en principi, si volem que el servidor OpenVPN actuï com a porta d'entrada a la seva LAN, i per tant els clients puguin interactuar amb la resta de xarxa. Si volem que el clients tan sols interactuïn amb els equips connectats a la VPN no s'ha de fer!.

  1. Obrir i afegir l'opció d'activació del bit de forwarding al kernel del sistema.
nano /etc/sysctl.conf
  1. Des-comentar la línia:
net.ipv4.ip_forward=1
  1. Sortir i aplicar els canvis:
sysctl -p

3.2 Instal·lació

  1. Instal·lació de la paqueteria de OpenVPN:
apt update
apt install -y openvpn

3.2.1 Generació de certificats del servidor

OpenVPN treballa amb certificats digitals[1] per, tant autenticar clients i servidors com per xifrar el túnel VPN. Per tant cal que el nostre servidor també sigui servidor de PKI[2]. Utilitzarem easy-rsa per fer aquesta funció.

  1. Copiem EasyRSA al directori de /OpenVPN:
cp -r /usr/share/easy-rsa /etc/openvpn/
  1. Entrem al directori i copiem el arxiu de configuració d'exemple, finalment l'editem:
cd /etc/openvpn/easy-rsa
mv vars.example vars
nano vars
  1. Afegim les línies següents al final de tot, com veieu son configuracions típiques per al la generació del certificat digital.
export KEY_COUNTRY="SPAIN"
export KEY_PROVINCE="BCN"
export KEY_CITY="Manresa"
export KEY_ORG="INS Lacetania"
export KEY_EMAIL="raul.gimenez@lacetania.cat"
export KEY_OU="OpenVPN"

I guardem el document amb els canvis fets.

  1. Inicialitzem la PKI:
./easyrsa init-pki
  1. Creem la Autoritat Certificadora (CA), sense password per evitar que el servidor demani el password del certificat cada cop que el faci servir (a més, en un servidor no hi haurà ningú per entrar-lo cada cop que sigui necessari).
./easyrsa build-ca nopass

Ens demanarà el Common Name, en el cas d'exemple entrarem el valor de server.

  1. Crearem la clau del servidor OpenVPN, també sense password per el mateix motiu que l'anterior.
./easyrsa gen-req server nopass

I la signarem digitalment

./easyrsa sign-req server server
  1. Creem la clau d'intercanvi Difiie-Hellman:
./easyrsa gen-dh
  1. Generem una signatura HMAC [3]:
openvpn --genkey --secret ta.key
  1. Finalment copiem tots els certificats a la carpeta del servidor OpenVPN.
cp ta.key /etc/openvpn/
cp pki/ca.crt /etc/openvpn/
cp pki/private/server.key /etc/openvpn/
cp pki/issued/server.crt /etc/openvpn/
cp pki/dh.pem /etc/openvpn/

3.2.2 Generació dels certificats dels client

  1. Generació de certificat digital per a un client concret, per comoditat sense password.
./easyrsa gen-req client nopass

I el signem digitalment també

./easyrsa sign-req client client
  1. Copiem tots els certificats cap als directoris de configuració de OpenVPN:
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client.crt /etc/openvpn/client/
cp pki/private/client.key /etc/openvpn/client/

3.3 Configuració

L'arxiu de configuració a remenar és:

nano /etc/openvpn/server.conf

I el contingut a afegir el següent:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 1.1.1.1"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1

Algunes puntualitzacions sobre els paràmetres utilitzats:

dev tun
defineix el prefix a utilitzar per crear les interfícies de xarxa de la VPN, en aquest cas s'anomenaràn tun0, tun1, etc.
server 10.8.0.0 255.255.255.0
Rang de IPs que utilitzarà per crear les connexions punt a punt. Notar que les connexions o interfícies tindràn IP dins d'aquest rang i màscara /32 (punt a punt).
user nobody i group nobody
Usuari i grup que llançarà el dimoni de OpenVPN. Al utilitzar nobody s'utilitza un usuari sense permissos, d'aquesta manera s'intenta aconseguir que si el servei és hackejat el hacker no pugui fer res en el sistema.
verb 3
Nivell de "verbositat", és a dir, nivell de missatges generats i guardats a logs.

Finalment iniciem el servei i verifiquem el seu estat:

systemctl start openvpn@server
systemctl status openvpn@server

4 Instal·lació i configuració del client OpenVPN

  1. Instal·lem el client de OpenVPN:
apt update
apt install -y openvpn
  1. Modifiquem les opcions com a client OpenVPN:
nano /etc/openvpn/client.conf

I definim les dades de connexió:

client
dev tun
proto udp
remote IP_PUBLICA_SERVIDOR 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
  1. Ara cal copiar tots els certificats referents al client i el certificat públic del servidor al client:
scp root@srvOpenVPN:/etc/openvpn/client/ca.crt /etc/openvpn/
scp root@srvOpenVPN:/etc/openvpn/client/client.crt /etc/openvpn/
scp root@srvOpenVPN:/etc/openvpn/client/client.key /etc/openvpn/
scp root@srvOpenVPN:/etc/openvpn/ta.key /etc/openvpn/

ATENCIÓ: La comanda scp us pot fallar si prèviament no heu confgurat el servidor openssh-server per a que accepti connexions de root.

  1. Finalment iniciem el client:
systemctl start openvpn@client
systemctl status openvpn@client

5 Verificacions

Tant el client com el servidor han de tenir una nova interfície anomenada tun0 amb una IP del rang de la 10.8.0.0/24. Per part del servidor podem verificar els logs de OpenVPN:

tail -f /var/log/openvpn/openvpn.log

6 Glossari

Certificat Digital [1]
bla bla bla.
PKI [2]
bla bla blue.

7 Bibliografia

  • howtoforge.com: How to install and configure OpenVPN Server on Debian 10.

8 [6/11] Millores

  • [X] Analitzar les opcions dels arxius de configuració tant del servidor com del client.
  • [ ] Crear les entrades al glossari dels termes "menys utilitzats".
  • [ ] Fora interessant veure com generar arxius .ovpn per a simplicar la connexió dels clients i el seu desplegament.
  • [X] Passar corrector ortogràfic.
  • [ ] Veure si podem utilitzar túnels amb protocol tcp i per què el fan amb udp.
  • [X] Mirar el usuari i grup utilitzats (nobody) i esbrinar per què ho fan així.
  • [X] Explicar IPs de túnel /32.
  • [X] Explicar error en comanda scp.
  • [X] Explicar pq es generen certificats al servidor amb opció nopass.
  • [ ] Explicar pq apareix a les interfícies de tun0 IPs en format <IP> peer <IP2> i no es fa ping a la <IP2>.
  • [ ] Veure si ampliar pràctica per incloure rutes estàtiques per comunicar les dues sub-xarxes LAN completament.

9 Bitàcola

9.1 <2019-12-17 dt.>

Iniciem el projecte, en unes tres hores ha estat enllestit.

9.2 <2019-12-19 dj.>

Millora del format del document i corrector ortogràfic.

9.3 <2020-01-08 dc.>

Noves aportacions fetes a classe, dubtes, aclariments, etc. incorporats a la documentació.

Date: 17/12/2019

Author: Raul Gimenez Herrada

Created: 2020-01-09 dj. 08:58

Validate