Etiqueta: vpn

Mi nube, mis reglas: Los 8 servicios que mantengo en mi propio servidor con Docker

Como ya sabéis de posts anteriores, tengo una regla inquebrantable a la hora de montar cualquier cosa en mis máquinas: o se despliega en un contenedor de Docker, o directamente no se instala. Instalar servicios a pelo en el sistema operativo es comprar papeletas para que tu server se enguarrine con dependencias que no necesitas, o con miles de versiones de las mismas que luego se quedan huerfanas, y que son un dolor de cabeza, el día que toque migrar o restaurar copias de seguridad.

Llevo bastante tiempo dándole caña a mi propio servidor (no concibo depender de servicios de terceros para cosas críticas de mi día a día), y al final, tener tu propio self-hosted stack no solo te olvidas de la vigilancia de las big tech, sino que te ahorra un pastizal en suscripciones.

Actualmente tengo 8 servicios clave funcionando 24/7 sin despeinarse.

1. Wireguard: La llave de entrada a toda una red

Si tienes servicios en casa o en un VPS y los expones a lo loco a Internet mediante puertos abiertos sin control, estás jugando a la ruleta rusa.

Para mí, Wireguard es indispensable. Me permite crear un túnel VPN con mi servidor. Si estoy fuera de casa o conectado a una Wi-Fi pública, lo activo, y santas pascuas.

En mi servidor lo uso simplemente para poder cambiar la ubicación y evitar algunos bloqueos de determinado señor que empieza por Te y acaba por bas, que está obsesionado con que le roban el furgol. Pero en mi casa, también tengo instalado un servidor de Wireguard, y ahí si que me es imprescindible para poder acceder a todo lo que tengo en mis propios cacharros.

2. Nextcloud: La alternativa a las nubes big tech

Tener tus archivos importantes y copias de seguridad, desperdigados por nubes ajenas no me suena nada bien (Aunque lo siga haciendo para determinados casos: Redundancia y la paranoia de los informáticos). Nextcloud es la nube personal: sincronización en tiempo real entre el móvil, el portátil y el NAS, control de versiones, copia automatizada de las fotos del móvil, etc… Consume algo más de recursos que otros servicios más ligeros, pero bien configurado vuela.

Le puedes meter edición de documentos online en tu propio server mediante Collabora u Onlyoffice, y así ya huyes del todo de Google Docs, Office 365 o todos los demás editores. Y no solo eso, tiene plugins como para parar un tren, solo hay que echarle un rato para ver qué necesitas.

3. Poste.io: Servidor de correo sin complicaciones

Montar un servidor de correo tradicional desde cero puede ser una pesadilla que nadie en su sano juicio quiere repetir dos veces.

Poste.io lo resuelve de una patada metiendo toda la infraestructura de correo en un único contenedor de Docker con interfaz web de administración, webmail integrado y soporte TLS automático. Una pasada para tener cuentas de correo bajo mis propios dominios sin depender de proveedores externos.

4. GitLab: Mi repositorio de código

Aunque uso GitHub para cosas públicas y proyectos abiertos, mis propios desarrollos, scripts de mantenimiento y arquitecturas privadas viven en mi propio GitLab.

Tener el control del versionado, los repositorios y poder montar pipelines de CI/CD locales (Soy un apasionado de las pipelines, no me juzguéis por ello) con varios runners, me da todo lo que necesito.

Tengo que reconocer que antes usaba el GitLab «cloud», pero teniendo el server infra utilizado, dije… pues qué leches, me monto el mío propio. Y si, GitLab puede ser muy pesado a nivel de recursos para una sola persona. He visto alternativas también open source como Forgejo, pero sinceramente, me parecio un juguete al lado de GitLab, y prefiero quedarme con potencia a sencillez. Ojo, que si alguno de vosotros, tiene una máquina un poco limitada y no queréis la navaja suiza de GitLab, Forgejo es una opción muy muy buena.

5. Cap: Tu propio captcha

¿Cuántos de vosotros, que hayáis montado alguna web, no habéis tenido que añadir un captcha para registros/login, con el típico de reCaptcha? Bien, pues con esto os olvidáis de Google de una vez.

Cap es un captcha sencillito, con un interfaz de admin tambien bastante claro, y fácil de integrar.

Si os soy sincero, nunca pensé en tener un captcha autoalojado, hasta que me di de bruces con esto, y me alegro haberlo hecho.

6. Umami: Analítica web limpia y sin rastrear a nadie

Google Analytics es un monstruo pesado, intrusivo y un dolor de huevos en general.

Umami es todo lo contrario: una analítica web minimalista, de código abierto, respetuosa con la privacidad y ultraligera. Te da exactamente las métricas que necesitas saber (páginas vistas, dispositivos, procedencia) sin recopilar datos personales ni ralentizar la carga de las webs.

7. WordPress: El motor de publicaciones

No necesita mucha presentación. Aunque a veces sea criticado por su antigüedad, para un blog rápido y estructurado sigue siendo el estándar más fiable. Es más, si estás leyendo esto, spoiler: Esta página es un WordPress.

Te puedes crear un blog de dos patadas con Docker, y listo. Que lo dejes bonito y precioso, eso ya es otro cantar…

8. TeamSpeak: Comunicación por voz de baja latencia

Sí, existe Discord, pero para partidas online o charlas con amigos sin que una big tech monitorice canales ni meta publicidad, un servidor dedicado de TeamSpeak 3 (Las nuevas versiones tienen una licencia un poco rarurna, la v3 funciona a las mil maravillas) sigue siendo insuperable. Consume prácticamente cero recursos del servidor y ofrece un audio muy bueno con una latencia sorprendente (El servidor lo tengo en Alemania, y la latencia no se nota nada).

Epílogo: Un Nginx para gobernarlos a todos

Todo desplegado con docker precioso y muy bonito, pero… ¿Cómo leches accedes a todos estos servicios desplegados en la misma máquina, con distintos dominios? La respuesta es proxy inverso. Y al menos desde mi punto de vista Nginx es la elección.

Tengo metido Nginx y todos los servicios en la misma red de docker, exponiendo solo los puertos web en Nginx, y usándolo mediante reverse proxy a los distintos servicios de docker desplegados. Además con Nginx mantengo todos los certificados https mediante Let’s encrypt y no tengo que preocuparme de añadirlos a los propios servicios. Fácil, sencillo y para toda la familia.

Puede que no cuente como un servicio en sí mismo, pero es el anillo único en un despliegue de este tipo.

Conclusión

Mantener todos estos servicios funcionando a la vez no requiere data centers consumiendo luz y miles de bernabeus de agua (La medida estandar en Madrid para cantidades de agua), si se gestiona bien el servidor. Con una buena configuración en Docker, límites de memoria y copias de seguridad automáticas, tienes tu ecosistema digital completo, privado y bajo tu control.

Wireguard: VPN en casa en 10 minutos

Si tenemos un poco de interés en servidores de algún tipo, o queremos no depender de servicios de terceros, es casi seguro que tendremos algún equipo en casa, que nos haga de servidor, al que poder acceder una vez estamos conectados a la red de nuestra casa. Pero exponer estos servicios a Internet, muchas veces puede llegar a ser un peligro, ya que estamos dando acceso de alguna manera a equipos que tenemos en casa.

Para solucionar este problema, existen las llamadas VPNs, que durante el confinamiento por COVID19 tanto se están usando, para poder acceder a los servicios de las empresas (Aunque ya se usaban VPNs anteriormente para eso mismo, y poder navegar de forma anónima por Internet, con un proveedor de VPN).

Pero este servicio no tiene porque estar acotado a las empresas. Si como decía antes tenemos algún servicio en nuestra casa al que podamos acceder por conexión de red, montar una VPN en nuestra casa, para poder acceder a esos servicios una vez que estamos fuera, es probablemente la mejor opción.

En mi caso, tengo un NAS donde tengo todos mis datos importantes, backups, y más cosas, a los que puedo acceder una vez estoy conectado a la red de mi casa, pero muchas veces quiero poder acceder a esos archivos desde fuera. Podria exponer estos archivos hacia fuera mediante un servicio FTP por ejemplo, pero eso daría pie a ataques por parte de terceros para acceder a esos archivos, comprometiendo muchisimos datos privados.

Para evitar esto, me he instalado un servidor de VPN al que obviamente, si que he dado acceso hacia el exterior mediante el mapeo del correspondiente puerto en el router, y consiguiendo el acceso seguro a todos los datos de mi casa.

Además este acceso por VPN sería una capa de seguridad muy buena, si estáis de viaje y os tenéis que conectar desde una red WiFi pública, desde las cuales jamás deberías usar ningún servicio importante, debido a la posibilidad que hay de que se intercepten las comunicaciones, y que al conectarte a la VPN de tu casa, quedaría resulto sin ningún problema.

Normalmente se usaría en estos casos una VPN de tipo OpenVPN que es probablemente el servicio más extendido. Investigando un poco más encontré un servicio muy actual para VPN que usa algoritmos de criptografía modernos, y con una velocidad asombrosa, llamado Wireguard.

Esta VPN se puede configurar en cualquier servidor que tengas en casa (En mi caso una Raspberry Pi 4), y su configuración gracias a Docker (Como ya os dije, no instalo ya de forma tradicional ningún servicio. Absolutamente todo con Docker, o sino no se usa), resulta ser de lo más sencillo.

Antes de nada, deberéis tener un nombre de dominio asociado a vuestra IP de casa. Para ello con algún tipo de DNS dinámico, os valdría perfectamente.

Os dejo por aquí el docker-compose que uso para poder crear el servicio de Wireguard

version: "3"

services:
  wireguard:
    image: linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
      - SERVERURL=midominio.decasa.com #optional
      - SERVERPORT=51821 #optional
      - PEERS=2 #optional
      - PEERDNS=8.8.8.8 #optional
      - INTERNAL_SUBNET=10.13.13.0/24 #optional
    volumes:
      - /home/misuuario/wireguard:/config
      - /lib/modules:/lib/modules
    ports:
      - 51821:51820/udp
    restart: unless-stopped

Lo imporante de este archivo son los siguientes puntos:

  • SERVERURL: Este debe ser el dominio que tiene que apuntar a vuestra casa.
  • SERVERPORT: Por defecto se pone a 51820, pero si a su vez quereis desde vuestra casa, poder conectar como cliente a otras VPN Wireguard, os recomiendo poner el 51821
  • /home/misuuario/wireguard: Este será el directorio donde se guarde toda vuestra configuración de la VPN
  • 51821:51820/udp Hay que asegurarse de que el puerto interno del contenedor 51820 queda mapeado al externo en el 51821, y por supuesto, mapear en vuestro router el puerto 51821 hacia vuestro servidor.

Una vez arrancado el servidor, si vemos los logs con

docker logs -f wireguard

se nos mostrarán dos códigos QR correspondientes a los dos clientes creados para la VPN. Estos códigos QR deben ser escaneados con las aplicaciones correspondientes de móviles (Android e IOS) para poder acceder a la VPN de forma sencilla desde nuestro dispositivo.

Si queremos poder acceder desde un PC, desde Windows o Mac no hace falta más que instalar su cliente desde https://www.wireguard.com/install/

En Linux, Wireguard ya va integrado en el Kernel, por lo cual solo hay que seguir las instrucciones que se dan en la misma página para poder configurarlo.

Para encontrar el archivo de configuración que se debe importar en estos clientes, solo haría falta ir al directorio /home/misuuario/wireguard y entrar a los sub-directorios de los clientes generados (peer1 y peer2), y en ellos se encontrarán los ficheros peerX.conf, que al importarlos en el cliente de Wireguard te deja la configuración lista para activarse. También en estos directorios encontrareis los ficheros de imagen del código QR por si queréis volver a configurarlos en dispositivos móviles.

El proceso de instalación no os llevará más de diez minutos, entre la configuración del fichero docker-compose, el mapeado del puerto correspondiente en el router, y la configuración de un cliente para tener listo un acceso privado a vuestra casa.