Blog del Podcast
podcast      GitHub      Twitter   Telegram

Docker: Letsencript. Accediendo a todos mis servicios, desde cualquier lugar, sin VPN

Tiempo estimado de lectura: 8 minutos. 884 palabras. servidor

Este fin de semana, con la ayuda de Carlos del Blog de Lazaro, a quien agradezco todo el tiempo dedicado a responder todas mis preguntas, he montado por fin el Docker de Let's Encrypt de la comunidad Linux Server, que no solo te permite generar un certificado automáticamente y totalmente gratuito, para acceder a un servicio fuera de tu red local, si no que ademas permite crear un servidor de Proxy Inverso, permitiendo gracias a los subdominios de Duck DNS, poder acceder a mas de un servicio, teniendo solo un puerto abierto.

Esto nos permitirá poder acceder a muchos de los servicios que os he hablado durante más de dos años de Podcast, desde cualquier lugar, dispositivo, sin necesidad de utilizar una VPN y disfrutando de la totalidad de características disponibles en estos servicios.

También podremos dar acceso a otros usuarios, amigos, familiares, etc… Ya que nosotros como administradores del servicio, tenemos el control total del mismo.

Servicios como Nextcloud, Jellyfin, tt-rss, Dokuwiki, Wordpress, etc… Los podremos utilizar en cualquier lugar, teniéndolos en nuestra Raspberry o Servidor y manteniendo el control total de todos nuestros datos.

Recuerda que gracias al certificado de Let's Encrypt, todos los datos entre servidor y cliente, irán totalmente cifrados.

Yo os voy a explicar como montarlo en Raspbian o cualquier servidor Linux, pero si eres de los que utilizan Open Media Vault, en breve Carlos publicará un Post paso a paso de como hacerlo.

Subdominio de Duck DNS

Accediendo a https://www.duckdns.org/, podremos dar de alta hasta cinco subdominios totalmente gratuitos. Dalos de alta y apunta el TOKEN que será necesario para el montaje del contenedor.

Montar el Docker

Este es un ejemplo de lo que tenemos que introducir en la terminal para la montaje del Docker de Proxy inverso, donde debes de sustituir los siguiente valores:

docker create \
  --name=letsencrypt \
  --cap-add=NET_ADMIN \
  --restart unless-stopped \
  -e ONLY_SUBDOMAINS=true \
  -e PUID=1000 \
  -e PGID=100 \
  -e TZ=Europe/Madrid \
  -e URL=duckdns.org \
  -e SUBDOMAINS=subdominio-uno,subdominio-dos,subdominio-tres \
  -e VALIDATION=http \
  -e DUCKDNSTOKEN=41fc1578-7fev7-4fb9-b20d-6d8vgemj6a9359 \
  -e EMAIL=ugeekpodcast@gmail.com \
  -e DHLEVEL=2048 \
  -p 443:443 \
  -p 80:80 \
  -v $HOME/docker/letsencript:/config \
  linuxserver/letsencrypt

En el caso de la Raspberry, yo he utilizado estas misma líneas de terminal y me ha funcionado perfectamente sin problemas

Archivos de Configuración

Ya tenemos creado nuestro Docker. Ahora accederemos a la carpeta donde están los archivos de configuración de muestra (Hay muchos servicios de ejemplo) y vamos a modificar el archivo, añadiendo nuestra IP y puerto del servicio que queramos añadir en el Proxy Inverso.

~/docker/letsencript/nginx/proxy-confs

Recuerda renombrar el archivo, dejando que acabe en .conf, para que el servidor interprete que es un archivo de configuración válido.

Ejemplo de archivo

Vamos a crear un archivo para Nextcloud, pero en realidad puedes hacer lo mismo para cualquier servicio.

Creamos el nuevo archivo de configuración para Nexcloud.

nano ~/docker/letsencript/nginx/proxy-confs/nextcloud.subdomain.conf

Sustituye las siguientes líneas y pon tus datos. Dominio, ip, puerto.

Nextcloud lo tengo montado con letsencript, por eso la ruta del servidor es https. Si tu servicio utiliza http, ponlo así.

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name mi_dominio.duckdns.org;
    include /config/nginx/ssl.conf;
    client_max_body_size 0;

    # enable for ldap auth, fill in ldap details in ldap.conf                                                                                                                                                                                                
    #include /config/nginx/ldap.conf;                                                                                                                                                                                                                        

    location / {
        # enable the next two lines for http auth                                                                                                                                                                                                            
        #auth_basic "Restricted";                                                                                                                                                                                                                            
        #auth_basic_user_file /config/nginx/.htpasswd;                                                                                                                                                                                                       

        # enable the next two lines for ldap auth                                                                                                                                                                                                            
        #auth_request /auth;                                                                                                                                                                                                                                 
        #error_page 401 =200 /login;                                                                                                                                                                                                                         

        include /config/nginx/proxy.conf;
        resolver 127.0.0.11 valid=30s;
        set $upstream_nextcloud nextcloud;
        proxy_pass https://192.168.1.100:81;
    }    
}

Indexado de buscadores

Para que los buscadores como Google no indexen el servicio que tienes expuesto en el docker de Letsencrypt, añade al archivo de configuración las siguientes lineas:

add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
add_header X-Robots-Tag "none";

Iniciar, detener, reiniciar el Docker

Iniciar, reiniciar o detener el contenedor, no va a ser diferente a cualquier Docker que tengamos corriendo en nuestro servidor:

Iniciar

docker start letsencrypt

Detener

docker stop letsencrypt

Reiniciar

docker restart letsencrypt

Comprobar que todo vaya bien

Es recomendable la primera vez que iniciamos el Docker, comprobar que todo funciona correctamente y no hay ningún error en algún archivo de configuración.

Si lo hubiera, el log nos mostrará donde está este error.

docker logs -f letsencrypt

Conclusión

Os puedo garantizar que el poder acceder desde el exterior de tu red local, a todos estos servicios de un modo seguro y teniendo el control de tus datos tu, es una sensación muy agradable. Montar el Docker no lleva mas de 5 minutos, así que te recomiendo el probarlo y que me cuentes tu experiencia.


Publicado por Angel el Wednesday 15 May del 2019 y actualizado el Friday 13 September del 2019



También te puede interesar:




Powered by org-bash-blog

Written in OrgMode with Emacs and converted to HTML with Pandoc

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.