VPN amb un RaspberryPi


Què és una VPN?

Una VPN (Virtual Private Network) crea una connexió de xarxa privada entre dispositius a través d'Internet. Les VPN s'utilitzen per transmetre dades de manera segura i anònima a través de xarxes públiques.



OpenVPN

És un programa gratuit per a VPN però el seu principal problema es que pot portar problemes a la hora de du a terme la instal·lació i gestionar-la, degut a que necesites un certificat SSL per encriptar les comunicacions y autentificació, també un CA (Autoritat Certificadora), també tenim que generar una clau TLS, generar les sol·licituds de certificat i firmarles per generar els certificats que s’envien als usuaris.

Però tot això ho podem fer més fàcilment amb PIVPN, que ho fa automàticament.

Requisits mínims

Raspberry Pi 3B+ o una Raspberry Pi 4B
És necessari un port ethernet que funcioni a uns 300Mbit/s mínim
IP fixa o un servell DNS dinamic



Instalació de OpenVPN

Primer de tot instal·lem el PIVPN amb la següent comanda
curl -L https://install.pivpn.io | bash





Els següents pasos seran donar-li a OK en dirà que necesita una IP estática dins de la xarxa, la podem assignar nosaltres mateixos o podem deixar que ho faci el servidor DHCP automàticament

Per continuar aquí ens pregunta si estem segurs de que volem que deixi la IP fixa o si la volem cambiar, nosaltres ho deixarem en Yes.





Aquí ens dona a escollir entre quin protocol volem, escollim el de OpenVPN.





Aquí ens pregunta sobre quin protocol utilitzar sobre OpenVPN, per defecte be el protocol UDP de PIVPN, així que li donem a NO.





Hem de dir-li quin port de UDP volem que s’utilitzi sobre OpenVPN, per defecte poden sortir uns quants nosaltres utilitzarem el 2194.





Un cop confirmat el port el següent serà seleccionar els DNS, per facilitat utilitzarem els DNS de Google, per exemple, encara que podem utilitzar un servidor DNS local.





Depèn que el nostre servei estigui disponible a través d'internet, si disposem d'IP pública fixa a la nostra xarxa podem utilitzar-la com a tal; si no, haurem de seleccionar DNS Entry i escriure el DNS, que prèviament tindrem configurat (Recordem a l'inici: DynDNS o NoIP són bons en això).





Un cop seleccionada la IP o DNS el pas següent és automàtic, i és la generació de la clau HMAC que s'utilitzarà per a l'autenticació TLS, així que acceptem i continuem.





Ens pregunta si volem fer actualitzacions de seguretat, el millor és dir que si





Ja està tot instal·lat, ara PiVPN ens indica com afegir nous usuaris a la nostra VPN, ho expliquem una mica més endavant. Li donem a Ok i es reiniciarà automaticament.





Configuració usuaris en PiVPN

Per crear el usuari farem pivpn add, aquí ens demana el nom i contrasenya que volem crear, automàticament en la rasberry tindrem un arxiu amb el (nom de l'usuari).ovpn i haurem de passar-lo al nostre ordinador per exemple per correu.









Conexió a la VPN

Assumim que ens conectar-hem desde Windows. Necessitar-hem descagran-se el client OpenVPN desde la web següent:

OpenVPN



Un cop instal·lat apareixerà la icona d'OpenVPN GUI al tray del sistema (a baix dreta, al costat de l'hora). Farem clic dret i només haurem de seleccionar Import files i seleccionar el fitxer .ovpn que hem portat del servidor.





Posem l’archiu descargat anteriorment i ens sortirà una pestanya en la qual ens demana la contrasenya per accedir i conectan-se al VPN i automàticament estarem conectats.





Perquè no ens va sortir

No ens va sortir perquè el programa de PIVPN no ens va programar be el usuari i llavors no podia fer bé l'arxiu .ovpn que necessitem (on hi han els certificats i claus), a part d’això el arxiu que ens ha de proporcionar ens el dona amb arxiu .conf i tindria que ser .ovpn

axriu que en teoria tindria que ser





Certificat SSL

El primer que hem de fer és crear una carpeta dins de /etc/apache2/ anomenada ssl

sudo mkdir /etc/apache2/ssl

Després crearem el certificat, vàlid per a 3 anys, amb la següent ordre:

sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key

Crearà la clau del certificat ia més ens farà diverses preguntes. Hi respondrem amb dades ficticis, menys a la part en què ens demana el «Common Name» on haurem de ficar el domini que tinguem (si en tenim un) o en el meu cas el domini que m'ofereix el meu servei de DNS dinàmic. No serveixen adreces IP!


Encara no reinicialitzarem Apache. Ara haurem d'instal·lar el servei SSL per a Apache:

sudo a2enmod ssl


Ara fem accessible el lloc ssl creant un enllaç simbòlic a la carpeta corresponent:

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf


I editem aquest fitxer de configuració ja sigui amb l'editor micro o nano o el que prefereixis:

sudo micro /etc/apache2/sites-enabled/000-default-ssl.conf


Afegirem aquestes dues línies per sobre de la línia VirtualHost

SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key



Ara ja si volem, reiniciem el servei d'Apache perquè tingui en compte aquestes modificacions:

sudo service apache2 restart


No hem d'oblidar, que hem de fer un port-forwarding als ports 80 i 443. Això ho faig al router de casa meva. On redirigeixo les peticions exteriors als ports 80 i al 443 (entre d'altres que també tinc configurats) que entrin, als ports 80 i 443 de l'adreça IP local del meu Raspberry Pi.

Amb això ja podríem accedir mitjançant https a la direcció del nostre domini. En accedir el navegador ens donarà una advertència, ja que el certificat no està signat per una agència certificadora (CA), ja que ens ho hem «autosignat».

Aceptamos y añadimos esa excepción cuando visitemos las páginas que sirve nuestro servidor.



Creant una CA (autoritat certificadora)


1. Creació de l'Estructura de Directoris


Per començar crearé un arbre de directoris per manejar els fitxers de la CA. Aquest arbre de directoris estarà basat en /root/ca:


2. Fitxer de configuració d'OpenSSL (openssl.conf)


A continuació prepararé el fitxer de configuració per a OpenSSL (/root/ca/openssl.conf). Les seccions i paràmetres del fitxer estan descrits a la pàgina de manual de l'ordre ca (man ca). A continuació aniré fent una dissecció de les diferents parts del fitxer:

La primera secció (ca) és obligatòria i, en aquest cas, la configuració instrueix OpenSSL a prendre els paràmetres de configuració de la secció CA_default.



La secció següent (CA_default) defineix paràmetres per defecte per a la CA (directoris, noms de fitxers, etc.). El directori arrel per a la CA és el que creem al principi del procés.



La secció següent (policy_strict) conté les regles que aplicarem a la CA arrel. El certificat de la CA arrel només s'usarà per signar certificats de CA's intermèdies.



Aplicarem la política policy_loose per signar certificats de client i servidor que poden tenir diferents procedències:



La secció següent (req) conté paràmetres que s'apliquen en la creació de certificats o sol·licituds de signatura de certificats (CSRs).



La secció req_distinguished_name declara la informació necessària que han d'incloure les sol·licituds de signatura de certificats. En aquesta secció es declaren també valors per defecte per a aquests paràmetres.



La secció v3_ca següent conté les extensions que s'aplicaran a la generació del certificat de la CA arrel.



La secció v3_ca_intermediate conté les extensions que cal aplicar a la creació dels certificats de CA intermèdies.



Les seccions següents, user_certs i server_certs, defineixen, respectivament, les extensions per a la creació de certificats d'autenticació d'usuaris i servidors:



L'extensió crl_ext s'aplica a la creació de llistes de revocació de certificats:



Finalment, l'extensió ocsp s'empra a la signatura del certificat per al protocol en línia d'estat de certificats (OCSP):



3. Creació de la clau arrel (ca.key.pem)



El següent pas és crear la clau arrel i mantenir-la sota la seguretat més estricta. Vaig a utilitzar una clau de 4096 bits per al certificat arrel i els certificats de CA intermèdia.



4. Creació del certificat arrel (ca.cert.pem)



Vaig a utilitzar la clau arrel generada al pas anterior per crear el certificat arrel.



Verifiquem el certificat generat:




5. Creació del parell intermedi



Crearé, a continuació, un parell intermedi (clau privada, certificat) per a una CA intermèdia. D'aquesta manera es protegeix la CA arrel ja que no es fa servir la clau per signar certificats sinó la clau de la CA intermèdia. En cas que la CA intermèdia fos compromesa, es revocarien tots els certificats signats i es generaria una nova CA intermèdia. El procés és molt similar al realitzat per a la generació del parell arrel (creació d'estructura de directoris, creació de clau i creació de certificats) així que no entraré en detalls excessius.



Copiem el fitxer de configuració openssl.cnf del directori pare al directori actual i l'editem modificant els cinc paràmetres que apareixen marcats a continuació:



A continuació creem la clau i el CSR per a la CA intermèdia:



i signem el CSR amb la clau arrel de la CA …



Verifiquem la cadena de confiança del certificat de la CA intermèdia i creem la cadena de certificats que permeti validar els certificats emesos per la CA intermèdia:



En aquest punt, ja estem a punt per signar certificats de servidor i de clients.