Aller au contenu
Technitium DNS : configurer le widget Homepage en toute sécurité
  1. Posts/

Technitium DNS : configurer le widget Homepage en toute sécurité

Fabien ALLAMANCHE
Auteur
Fabien ALLAMANCHE
Géomaticien @ Vienne Condrieu Agglomération
Sommaire
Homepage est un tableau de bord homelab populaire. Son widget Technitium permet d’afficher les statistiques DNS en temps réel — à condition de lui fournir un token API. Mais lequel, et avec quelles permissions ?

Technitium DNS Server affiche un avertissement lorsque vous générez un token depuis votre compte administrateur : ce token hérite de tous vos privilèges. Pour une intégration Homepage, c’est inutile et risqué.

Dans cet article, vous allez créer un groupe dédié en lecture seule, un utilisateur spécifique, puis générer un token API minimal — exactement ce dont le widget a besoin, rien de plus.


Table des matières
#


🔭 Ce que fait le widget Homepage
#

Le widget Technitium interroge un seul endpoint : les statistiques du Dashboard. Pas les zones, pas la configuration, pas les logs.

Il appelle /api/dashboard/stats avec votre token, et affiche jusqu’à 4 métriques parmi :

Champ Description
totalQueries Total des requêtes DNS
totalBlocked Requêtes bloquées par les listes
totalCached Réponses servies depuis le cache
totalClients Nombre de clients distincts
totalNoError Réponses sans erreur
totalNxDomain Domaines inexistants
totalServerFailure Erreurs serveur
totalAuthoritative Réponses autoritatives
totalRecursive Résolutions récursives
totalRefused Requêtes refusées
totalDropped Requêtes ignorées

La configuration du widget dans services.yaml ressemble à ceci :

widget:
  type: technitium
  url: http://<adresse-dns>:5380
  key: <token>
  node: cluster   # optionnel : cluster, ou nom de domaine du nœud
  range: LastDay  # LastHour | LastDay | LastWeek | LastMonth | LastYear
  fields: ["totalQueries", "totalBlocked", "totalCached", "totalClients"]
Info : Le paramètre node accepte la valeur cluster pour agréger les statistiques de tous vos nœuds, ou le nom de domaine d’un nœud spécifique. Sans valeur, il retourne les stats du nœud interrogé directement.

🔐 Principe de moindre privilège
#

Un token d’intégration ne doit avoir accès qu’à ce dont il a strictement besoin. Ici : lire le Dashboard. C’est tout.

Technitium organise ses permissions en 11 sections :

graph LR
    subgraph "✅ Nécessaire"
        A[Dashboard - View]
    end
    subgraph "❌ Inutile pour Homepage"
        B[Zones]
        C[Cache]
        D[Settings]
        E[Administration]
        F[Logs]
        G[Apps]
        H[Allowed / Blocked]
        I[DhcpServer]
        J[DnsClient]
    end
    style A fill:#14532d,stroke:#4ade80,stroke-width:2px,color:#fff
    style B fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style C fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style D fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style E fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style F fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style G fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style H fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style I fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
    style J fill:#7f1d1d,stroke:#f87171,stroke-width:1px,color:#fff
Sécurité : Un token compromis avec ces permissions ne peut que lire des statistiques. Il ne peut ni modifier de zones DNS, ni accéder à la configuration serveur, ni consulter les logs détaillés.

👥 Créer le groupe DNS-ReadOnly-Dashboard
#

On commence par créer un groupe pour encapsuler les permissions — cela facilite la gestion si vous ajoutez d’autres outils de monitoring à l’avenir.

Dans l’interface Technitium, naviguez vers Administration → Groups → Add Group.

Remplissez les champs :

Champ Valeur
Name DNS-ReadOnly-Dashboard
Description Read-only access to Dashboard statistics for monitoring integrations

Dans la section Group Permissions, activez uniquement :

  • Dashboard → View

Laissez toutes les autres sections (Zones, Cache, Settings, Administration, Logs…) sans aucune permission.

Attention : Ne cochez pas “Modify” ni “Delete” sur le Dashboard, et ne touchez pas aux autres sections. Le widget n’a besoin que de la lecture.

👤 Créer l’utilisateur dédié
#

L’utilisateur homepage sera le porteur du token. Il appartient au groupe que vous venez de créer — ses permissions en découlent automatiquement.

Naviguez vers Administration → Users → Add User :

Champ Valeur
Username homepage
Password Un mot de passe fort (usage unique)
Group DNS-ReadOnly-Dashboard
Astuce : Une fois le token généré, le mot de passe de cet utilisateur ne sert plus à rien pour Homepage. Vous pouvez le choisir long et complexe sans vous en souvenir — il sera stocké uniquement dans Technitium.

Le flux de création est le suivant :

sequenceDiagram
    participant Admin
    participant Technitium
    Admin->>Technitium: Créer groupe DNS-ReadOnly-Dashboard
    Note over Technitium: Permission : Dashboard View uniquement
    Admin->>Technitium: Créer utilisateur homepage
    Note over Technitium: Assigné au groupe DNS-ReadOnly-Dashboard
    Admin->>Technitium: Générer token homepage-dashboard-ro
    Technitium-->>Admin: Token API
    Admin->>Homepage: Coller le token dans services.yaml

🔑 Générer le token API
#

Technitium permet de générer le token via l’interface web ou directement via l’API. Les deux méthodes sont équivalentes.

Via l’interface web
#

  1. Connectez-vous avec le compte homepage
  2. Naviguez vers Administration → Sessions
  3. Cliquez sur Create Token
  4. Donnez-lui le nom : homepage-dashboard-ro
  5. Copiez le token généré

Via l’API (depuis votre terminal)
#

curl "http://<adresse-dns>:5380/api/user/createToken?user=homepage&pass=<mot-de-passe>&tokenName=homepage-dashboard-ro"

La réponse JSON ressemble à :

{
  "status": "ok",
  "token": "a1b2c3d4e5f6..."
}

C’est la valeur du champ token qui vous intéresse.

Info : Le nommage homepage-dashboard-ro suit la convention <outil>-<périmètre>-<niveau>. Cela le rend immédiatement identifiable dans la liste des sessions Technitium.

⚙️ Configurer le widget dans Homepage
#

Tout est en place côté Technitium. Il ne reste plus qu’à configurer Homepage.

Dans votre fichier services.yaml :

- DNS:
    icon: technitium.png
    href: http://<adresse-dns>:5380
    description: Technitium DNS Server
    widget:
      type: technitium
      url: http://<adresse-dns>:5380
      key: <votre-token>
      node: cluster        # ou nom de domaine d'un nœud spécifique
      range: LastDay       # LastHour | LastDay | LastWeek | LastMonth | LastYear
      fields:
        - totalQueries
        - totalBlocked
        - totalCached
        - totalClients
Astuce : Si vous avez plusieurs nœuds DNS, vous pouvez créer deux entrées dans Homepage — une par nœud — en spécifiant le nom de domaine dans node. Pratique pour comparer la charge entre vos serveurs.

Si vous stockez vos secrets dans un fichier séparé (bonne pratique), utilisez la syntaxe de référence Homepage :

# Dans .env
HOMEPAGE_VAR_TECHNITIUM_TOKEN="a1b2c3d4e5f6..."

# Dans services.yaml
key: "{{HOMEPAGE_VAR_TECHNITIUM_TOKEN}}"

✅ Vérification
#

Avant de valider, vérifiez que le token fonctionne et que ses permissions sont bien limitées.

Tester le token manuellement :

curl "http://<adresse-dns>:5380/api/dashboard/stats?token=<votre-token>&type=LastDay"

Vous devez obtenir une réponse JSON avec les statistiques. Si vous obtenez {"status":"error","errorMessage":"Permission denied"}, vérifiez que le groupe DNS-ReadOnly-Dashboard a bien Dashboard → View coché.

Vérifier que le token ne peut pas faire plus :

# Ceci doit retourner une erreur de permission
curl "http://<adresse-dns>:5380/api/zones/list?token=<votre-token>"
Succès : Si /api/zones/list retourne Permission denied mais /api/dashboard/stats fonctionne, votre configuration est correcte. Le token est bien limité au Dashboard.

Résultat attendu dans Homepage :

graph LR
    A([Homepage]) -->|"GET /api/dashboard/stats?token=xxx"| B[Technitium DNS]
    B -->|"JSON: totalQueries, totalBlocked..."| A
    style A fill:#1e3a8a,stroke:#60a5fa,stroke-width:2px,color:#fff
    style B fill:#065f46,stroke:#4ade80,stroke-width:2px,color:#fff

🎯 Conclusion
#

En quelques minutes, vous avez mis en place une intégration sécurisée entre Homepage et Technitium DNS — sans jamais exposer de permissions inutiles.

Ce que vous avez accompli :

  • Créé le groupe DNS-ReadOnly-Dashboard avec Dashboard View uniquement
  • Créé l’utilisateur homepage rattaché à ce groupe
  • Généré le token homepage-dashboard-ro avec des permissions minimales
  • Configuré le widget Homepage avec les 4 métriques DNS essentielles
  • Vérifié que le token ne peut pas accéder aux zones ni à la configuration
Astuce : Appliquez cette même logique à toutes vos intégrations. Chaque outil de monitoring (Grafana, Zabbix, Uptime Kuma…) devrait avoir son propre utilisateur avec le périmètre minimal nécessaire. C’est le principe de moindre privilège appliqué à votre homelab.

Ressources utiles :

Articles connexes