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.
L’exemple sera pris pour un domaine nommé dashboard.
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).
sudo apt-get install nginx apache2-utils certbot python-certbot-nginx
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.
sudo certbot --nginx
Cette commande est réservée aux personnes souhaitant changer leur configuration Nginx à la main.
sudo certbot certonly --nginx
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.
sudo certbot renew --dry-run
(l’ouverture du port 80 est nécessaire).Il est possible d’utiliser le générateur en ligne ou l’outil du système.
sudo htpasswd -c /etc/nginx/.htpasswd zigate
Indiquer le mot de passe
cat /etc/nginx/.htpasswd
renvoie bien des informations (le mot de passe est haché).$ cat /etc/nginx/.htpasswd
zigate:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
Configuration de Nginx
sudo nano /etc/nginx/sites-enabled/default
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.
sudo nginx -t
sudo service nginx restart
Le tableau de bord devrait être accessible https://dashboard.mydomain.com.
Cette mesure permet de protéger votre système en vérifiant les erreurs d’authentification. Fail2ban peut bannir temporairement des IP agressives.
sudo apt-get install fail2ban
sudo nano /etc/fail2ban/jail.local
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/