Servidor de VPN amb wireguard en un escenari muntat amb Docker
Introducció
En aquesta pràctica configurarem un escenari simil·lar a una infraestructura empresarial real. Tenim un parell d'empleats que treballen a distància i necesiten fer ús d'una VPN. Hem evaluat les opcions i, encara que en principi havíem pensat utilitzar OpenVPN, finalment ens hem decidit per Wireguard amb la possibilitat de, si en un futur tenim més teletreballadors, canviar a OpenVPN.
Simularem la nostra infraestructura íntegrament amb contenidors Docker i serà tal que així:
Els clients establiran un túnel xifrat amb el servidor de VPN a la DMZ a través del firewall i aquest servidor, redirigirà el tràfic ja descifrat a la LAN. El tràfic de tornada seguirà el camí invers.
El túnel s'establirà mitjançant UDP i utilitzant el port 51820 entre cada client i el servidor de VPN.
Tasques a realitzar
- Configurar la VPN per a que els dos clients puguen fer ús d'ella
- Configurar el servidor VPN per a que assigne IPs d'una subxarxa concreta
- Comprovar que una vegada establerta la VPN, el tràfic viatja xifrat a través de la WAN i sense xifrar cap a la LAN.
- Configurar el firewall (iptables) per a permetre les conexions al servidor web i al servidor SSH.
Arxiu docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
|
La vostra tasca serà completar les variables d'entorn de les línies resaltades del docker-compose.
Quan s'inicie l'escenari correctamente, podreu trobar les configuracions de la VPN autogenerades a partir de les variables d'ambient d'aquest docker-compose.yaml en el contenidor de wireguard, en el directori /config
.
La configuració del client està dins del directori /config/wg_configs
i la dels clients dins de /config/peerX
, on la X
és el número de client. Esta configuració haureu de copiar-la als respectius clients, dins del directori /etc/wireguard
amb el nom de wg0.conf
.
Enllaç al repositori
Trobareu tot el necessari per a construir l'escenari ací: https://github.com/raul-profesor/practica-wireguard-vpn
Vos cloneu el repositori amb git clone https://github.com/raul-profesor/practica-wireguard-vpn
i podeu començar a treballar.
Podeu consultar el significat de cada variable que heu d'omplir a la pàgina del contenidor de wireguard o qualsevol altre enllaç de les referèncios o Internet.
Nota
En l'arxiu .env
es troben guardades les variables que s'han utilitzat al docker-compose.yml. Podeu ficar les dades que falten al docker-compose de dues formes:
+ Posant directament el seu valor on pertoque
+ Assignar-li el valor a una variable en l'arxiu .env
i posant després la variable al docker-compose
Detalls de la VPN
La informació relativa a la configuració de la VPN és:
- Els clients establiran el túnel xifrat amb la VPN del servidor
- El port que faran servir és el 51820 UDP
- Hi hauran dos clients
- La subxarxa de la VPN serà la
192.168.10.0/24
- Les xarxes que s'han d'enrutar seran tant la LAN com la de la VPN
La VPN tindrá una subxarxa independent de les altres tres. No obstant, per a que siga funcional, farem que es puga comunicar amb la LAN.
A més, existeix un altre concepte que hem de conèixer, l'split tunnelling
Mentre estigam connectats a la VPN potser que no ens interese que tot el tràfic siga encaminat per la VPN, per unes o altres raons. Un cas molt típic es quan a través de la VPN només es vol donar accés al treballador a recursos interns però no a Internet, per tal de reduïr el consum d'ample de banda de la xarxa de la empresa. És a dir, que l'empleat puga accedir a recursos compartits en la xarxa de la empresa amb la VPN però que navegue per Internet amb la seua pròpia línea d'internet.
Un altre cas típic:
Aleshores, en les línees del docker-compose.yml
que heu d'emplenar, haureu d'indicar-le a la VPN que voleu encaminar pel túnel xifrat la pròpia subsarxa de la VPN i també la LAN, per a que puguen comunicar-se entre elles.
És molt important, principalment per a configurar les regles del firewall, que tingau en compte que el tràfic de la VPN segueix el seguent itinerari: client --> túnel xifrat des dels clients fins al servidor VPN --> servidor VPN fins al destí en la LAN. I la tornada del tràfic fa exactament el camí invers.
Realització de la pràctica
Així les coses, recordem les tasques a realitzar:
Tasca 1
Fer les configuracions pertinents amb les variables d'entorn del docker-compose.yml
per tal d'establir la conexió VPN.
Una vegada tingau les configuracions, per a establir el túnel, dins del contenidor dels clients podem fer en el terminal:
I comproveu que es crea una interfaz anomenada wg0
i que té assignada la IP que l'heu configurat.
Tip
Fixeu-vos que els contenidors del firewall, wireguard i clients tenen configurat uns volums. Això vol dir que les modificacions que fem en els arxius del directori local, es voran reflectides en els dels contenidors.
Tasca 2
Tots els contenidors tenen instal·lat tcpdump i ho podeu fer servir per a les tasques de troubleshooting.
- El que també heu de comprovar amb aquesta eina és que al accedir al servidor web amb
curl http://webserver
i al servidor SSH ambssh sad@sshserver
(contrasenya seguretat), amb la VPN sense conectar el tràfic viatja utilitzant el protocol TCP i/o sense xifrar. - Que quan repetiu l'operació amb la VPN establerta, el tràfic viatja per UDP y xifrat.
Adjunta captura de pantalles ón es vega clarament la comprovació.
Tasca 3
Una vegada estiga funcionant perfectament la VPN és el torn de configurar el firewall.
- Fiqueu un arxiu anomenat
iptables-rules.sh
en el volum del contenidor del firewall. Aquest arxiu contendrá, per ordre d'aparició:- Neteja de totes les posibles regles que puguen estar configurades previament
- Escriviu les regles adequades per a que la política per defecta siga denegar tot el tràfic.
- Afegiu regles per a permetre el tráfic pel túnel VPN cap a la subxarxa LAN i als ports necessaris per als servidors HTTP i SSH.
Atenció
Per una questió de seguretat, configureu les regles d'iptables especificant els noms de les interfaces d'entrada, d'eixida i subsarxa destí la LAN.
Comproveu, adjuntant captures de pantalla, que les regles funcionen perfectament accedint a tots dos servidors i que els contadors de tràfic de les regles aumenten quan les mostreu.
Tasca 4
Una vegada fet tot, prova de llevar de les xarxes que s'enruten per la VPN, la xarxa de la LAN i prova de conectar amb el servidor web i amb el servidor SSH. Què observes i per què?
Tasca 5
Com a tasca adicional, intenta configurar l'escenari per a poder accedir pel túnel VPN (interfaz wg0) al servidor Web però no al servidor SSH. A la mateixa vegada, s'ha de poder accedir per SSH des de l'interfaz WAN al servidor SSH però no al servidor web.
Contingut extra per a la recuperació de la pràctica
Per tal de completar la recuperació d'aquesta pràctica es demana, a més de tot lo anterior configurar un contenidor docker amb la imatge kylemanna/openvpn
:
- Utilitzeu una màquina Linux
- Com a métode d'autenticació s'utilitzaran certificats (podeu posar-le contrasenya o no)
- El Common Name pel certificat serà SAD
- La IP del servidor a la que ens conectarem serà la de la màquina
Atenció
- S'ha d'explicar i documentar detalladament cada pas que doneu.
- S'ha de fer la comprovació de que la VPN funciona:
- Conectant des d'un client
- Mostrant la interfaz creada per a la VPN
- ¿Tens accés a Internet des del client? Independenment de la teua resposta, justifica-la
Referències
Com saber les IP dels contenidors
How to get started with WireGuard VPN