Files
docudjeex/content/fr/3.serveex/4.monitoring/5.upsnap.md
T

9.5 KiB

title, description
title description
UpSnap Installer UpSnap pour réveiller à distance les machines de votre réseau local via Wake-on-LAN, exposé avec SWAG.

:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

UpSnap est un conteneur qui permet d'allumer, d'éteindre ou de mettre en veille vos machines à distance. Il utilise principalement le Wake-On-Lan (WoL) sur le réseau et propose des fonctions avancées.

Beszel

Installation

::file-tree

tree: /: - srv: - docker: - upsnap: - compose.yaml - .env - data/

::

::steps{level="3"}

Déployer la stack

Ouvrez Dockge, cliquez sur compose, nommez la stack upsnap, puis copiez-collez ce qui suit :

---
services:
  upsnap:
    container_name: upsnap
    image: ghcr.io/seriousm4x/upsnap:5
    network_mode: host
    restart: unless-stopped
    volumes:
      - /srv/docker/upsnap/data:/app/pb_data
    environment:
      - TZ=Europe/Paris
      - UPSNAP_SCAN_RANGE=${SCAN_RANGE}
      - UPSNAP_SCAN_TIMEOUT=500ms
      - UPSNAP_PING_PRIVILEGED=true
    dns:
      - ${DNS}
    entrypoint: /bin/sh -c "./upsnap serve --http 0.0.0.0:8095"
    healthcheck:
      test: curl -fs "http://localhost:8095/api/health" || exit 1
      interval: 10s

::tip{icon=""} Astuce : ajoutez le label watchtower à chaque conteneur pour automatiser les mises à jour

```yaml [compose.yaml]
services:
  upsnap:
    #...
    labels:

      - com.centurylinklabs.watchtower.enable=true
```

::

Renseigner vos variables d'environnement

Remplissez le .env, par exemple :

RANGE=192.168.1.0/24 # scanne tous les appareils du réseau local ayant une IP entre 192.168.0.1 et 192.168.1.255
DNS=192.168.1.1 # IP du DNS pour résoudre les noms de domaine, typiquement l'IP de votre box

Déployez le conteneur et allez sur http://ipdevotreserveur:8095. Suivez simplement les étapes pour créer votre compte !

Terminé !

::

::caution

Si ça ne marche pas : vérifiez les règles de votre pare-feu. ::

Exposer UpSnap avec Swag

::warning

UpSnap ne gère pas l'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines connectées. Ne le faites que si vous utilisez un système d'authentification multifacteur comme TinyAuth ou Authentik. Sinon, évitez de l'exposer avec SWAG et utilisez plutôt un VPN comme Wireguard. ::

Vous voudrez peut-être y accéder à distance depuis tous vos appareils. Pour cela, nous allons exposer UpSnap via Swag.

::note{icon=""} 📋 Au préalable :

Nous partons du principe que vous avez créé un sous-domaine dans votre zone DNS, du type upsnap.mondomaine.fr avec un CNAME vers mondomaine.fr. Par ailleurs, à moins d'utiliser Cloudflare Zero Trust, vous devriez déjà avoir redirigé le port 443 de votre box vers le port 443 de votre serveur dans vos règles NAT. ::

::steps{level="3"}

Ajouter le réseau d'UpSnap à SWAG

Allez dans Dockge et modifiez le compose de SWAG en y ajoutant le réseau d'UpSnap :

---
services:
  swag:
     container_name: # ...
      # ... 
     networks:                       # Rattache le conteneur au réseau personnalisé 
      # ...           
      - upsnap                       # Nom du réseau déclaré dans la stack

networks:                            # Définit le réseau personnalisé
  # ...
  upsnap:                 # Nom du réseau déclaré dans la stack
    name: upsnap_default             # Nom réel du réseau externe
    external: true                   # Indique qu'il s'agit d'un réseau externe

Redémarrez la stack en cliquant sur « deploy » et attendez que SWAG soit pleinement opérationnel.

::note

Nous partons ici du principe que le nom du réseau d'upsnap est upsnap_default. Vous pouvez vérifier la connexion dans le tableau de bord de SWAG sur http://ipdevotreserveur:81. ::

Créer le fichier subdomain.conf

Dans les dossiers de Swag, créez le fichier upsnap.subdomain.conf.

::tip{icon="" to="/serveex/files/file-browser-quantum"} Astuce : vous pouvez utiliser File Browser Quantum pour naviguer dans vos fichiers et éditer vos documents plutôt que des commandes dans le terminal. ::

sudo nano /srv/docker/swag/config/nginx/proxy-confs/upsnap.subdomain.conf

Et collez la configuration suivante :

## Version 2023/12/19

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

    server_name upsnap.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

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

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app upsnap;
        set $upstream_port 8095;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

Terminé !

::

Et voilà ! Vous avez exposé UpSnap !

Protéger UpSnap avec TinyAuth

Ajoutez la vérification forward-auth de TinyAuth directement dans upsnap.subdomain.conf, de la même façon que dans le tutoriel TinyAuth :

## Version 2023/12/19

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

    server_name upsnap.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location /tinyauth {
        internal;
        proxy_pass http://tinyauth:3000/api/auth/nginx;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Uri $request_uri;
    }

    location @tinyauth_login {
        return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri;
    }

    location / {
        auth_request /tinyauth;
        error_page 401 = @tinyauth_login;

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

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app upsnap;
        set $upstream_port 8095;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"}

Le bloc location /tinyauth s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (tinyauth ici). Cela devrait déjà être en place depuis l'exposition de TinyAuth. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché. ::

::tip{icon=""} Vous pouvez protéger cette application avec Authentik plutôt que TinyAuth, en ouvrant upsnap.subdomain.conf et en retirant le # devant include /config/nginx/authentik-server.conf;{lang=nginx} et include /config/nginx/authentik-location.conf;{lang=nginx}. N'oubliez pas de créer une application et un provider dans Authentik. ::