ZigBeeForDomoticZ plugin Wiki

Tutoriel - Mettre une authentification sur l’interface web

Introduction

Ce tutoriel explique comment mettre en place une authentification pour accéder à l’interface web du Plugin. La méthode utilise Nginx et un certificat Let’s Encrypt. Elle sera expliquée sur Raspbian (Raspberry) mais elle peut-être appliquée sur d’autres distributions Linux.

Il est recommandé d’utiliser un VPN ou une autre méthode sécurisée (VPS…) pour se connecter depuis l’extérieur au réseau local afin de ne pas exposer la page web sur internet.

L’utilisation de Fail2ban (voir plus bas) limite les risques d’une attaque massive mais vous pouvez toujours avoir une vulnérabilité sur votre système.

Prérequis

L’exemple sera pris pour un domaine nommé dashboard.

Méthode

La restriction d’accès sera implantée en utilisant une authentification par utilisateur/mot de passe. Les utilisateurs/mot de passe seront créer à partir de apache2-utils (un outil de création de fichier de mot de passe).

Installation des paquets nécessaire

Création du certificat SSL pour Nginx

Choisir comment exécuter Certbot

Automatiquement

La commande va récupérer le certificat et Certbot va éditer la configuration Nginx automatiquement pour que l’accès HTTPS soit activé en une seule étape.

Ou manuellement

Cette commande est réservée aux personnes souhaitant changer leur configuration Nginx à la main.

Renouvellement du certificat

Le certificat est valide pour une période de 90 jours.

Lors de l’installation de Certbot sur le système, celui-ci paramètre une cron-job pour renouveler automatiquement le certificat avant qu’il n’expire. Il ne sera pas nécessaire d’exécuter le Certbot à nouveau.

Ajouter une restriction d’accès via une authentification HTTP basique

Il est possible d’utiliser le générateur en ligne ou l’outil du système.

$ cat /etc/nginx/.htpasswd
zigate:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0

Créer un Reverse Proxy avec une authentification HTTP basique

Configuration de Nginx

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

        auth_basic "Restricted website";
        auth_basic_user_file /etc/nginx/.htpasswd;

        server_name dashboard.mydomain.com;
        #change to match your address

        #SSL-settings and generic server options here
        ssl_certificate           /etc/letsencrypt/live/$domain/fullchain.pem;
        ssl_certificate_key       /etc/letsencrypt/live/$domain/privkey.pem;

        ssl on;
        ssl_session_cache  builtin:1000  shared:SSL:10m;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        ssl_prefer_server_ciphers on;

        location / {
            root   /home/pi/domoticz/plugins/Domoticz-Zigate/www;
            index  index.html index.htm;
        }

        location /rest-zigate {
            proxy_pass http://127.0.0.1:9440/rest-z4d;
        }
}

ATTENTION pour les utilisateurs d’une version du plugin supérieur à stable6.1.6 ou beta6.2.117 il faut remplacer

   ```
   location / {
        root   /home/pi/domoticz/plugins/Domoticz-Zigate/www;
        index  index.html index.htm;
    }
    ```   

par

    ```
    location /z4d {
        root   /home/pi/domoticz/plugins/Domoticz-Zigate/www;
        index  index.html index.htm;
     }
     ```

Dans le cas d’une configuration manuelle,

Ces informations sont pré-remplies avec la configuration automatique.

Le tableau de bord devrait être accessible https://dashboard.mydomain.com.

Option 1 - Ajouter une protection avec fail2ban

Cette mesure permet de protéger votre système en vérifiant les erreurs d’authentification. Fail2ban peut bannir temporairement des IP agressives.

enabled = true filter = nginx-http-auth logpath = /var/log/nginx/error.log maxretry = 3 findtime = 900 bantime = 900 ignoreip = 127.0.0.1 192.168.1.0/24


* Redémarrer fail2ban : `sudo service fail2ban restart`
* Vérifier le fonctionnement : `sudo fail2ban-client status`

# OPTION 2 - Utiliser le certificat de DomoticZ

Il est possible d'utiliser le certificat de DomoticZ en exécutant (replacer <your domain>):

sudo mv ~/domoticz/server_cert.pem ~/domoticz/server_cert.pem.org sudo cat /etc/letsencrypt/live//privkey.pem >> ~/domoticz/server_cert.pem sudo cat /etc/letsencrypt/live//fullchain.pem >> ~/domoticz/server_cert.pem sudo cp ~/domoticz/server_cert.pem ~/domoticz/letsencrypt_server_cert.pem sudo service domoticz restart ``` Comme chaque mise à jour de DomoticZ écrase votre certificat, la dernière commande créer une sauvegarde de votre certificat qu'il est possible de restaurer si besoin.