Supervision Nextcloud avec Zabbix

L'adoption de Nextcloud dans les associations, administrations et les entreprises se démocratise.
Nextcloud devient alors une solution majeure dans le stockage mais surtout le partage d'information.
Afin d'en assurer la disponibilité et l'évolution, l'intégration de Nextcloud dans une solution de supervision devient essentielle.

Chez Arawa, nous avons choisi d'utiliser Zabbix pour superviser notre infrastructure Nextcloud. C'est aussi cette solution que nous recommandons à nos clients et nous les y accompagnons.

Pour superviser une partie de Nextcloud avec Zabbix, nous nous basons sur l'excellent travail de Stefan Prokop, qui propose un modèle pour Zabbix : Nextcloud Monitoring API integration for Zabbix (https://share.zabbix.com/cloud/nextcloud-monitoring-api), qui s'appuie sur l'API de supervision proposée nativement dans Nextcloud (cf. https://github.com/nextcloud/serverinfo).

Cet article va porter sur l'évolution d'une des fonctionnalités proposée par le modèle Zabbix Nextcloud Monitoring API integration afin de renforcer la sécurité, dans un environnement Centos 7.

Constat

L'avantage du modèle Zabbix de Stefan Prokop est de centraliser le paramétrage de la supervision des serveurs Nexcloud dans Zabbix.

Ce modèle Zabbix interroge l'API de supersion Nexcloud. Un compte avec les privilèges administrateur est nécessaire dans Nextcloud.

Dans Zabbix, ces informations d'authentification sont stockées en clair dans la configuration de chaque serveur Nextcloud ou du modèle.

Les administreurs Nextcloud et Zabbix pouvant être des personnes différents, des personnes n'étant pas mandatées pour administrer des serveurs Nextcloud peuvent récupérer un identifiant de connexion Nextcloud avec des privilèges administrateur.

Solution

Principe

Pour éviter de stocker des identifiants de connexion Nextcloud dans Zabbix, nous avons appliqué le même principe que la supervision Mysql nativement proposé par Zabbix, à savoir passer par la fonctionnalité "userParameter", qui permet d'excécuter un script personnel.

Prérequis

  • un serveur Nextcloud
    • qui répond aux requêtes http/https sur localhost (127.0.0.1)
    • agent Zabbix installé
    • un utilisateur Nextcloud, de rôle admin, exemple : zabbix-monitoring
    • utilitaire "curl" installé
  • serveur Zabbix
    • modèle Zabbix Nextcloud Monitoring API integration de Stefan Prokop importé
    • serveur Netxcloud configuré dans la liste des hôtes

Serveur Nextcloud

Sur le serveur Nextcloud (équipé de l'agent Zabbix) créer un fichier : /etc/zabbix/zabbix_agentd.d/userparameter_nextcloud.conf

sudo vim /etc/zabbix/zabbix_agentd.d/userparameter_nextcloud.conf

Contenu :

# Nextcloud monitoring
UserParameter=nextcloud.serverinfo,curl -k --silent --user zabbix-monitoring:MOT_DE_PASSE https://127.0.0.1/ocs/v2.php/apps/serverinfo/api/v1/info

Ce UserParameter comprends deux champs :

  • le nom de notre script personnel appelé par Zabbix : nextcloud.serverinfo

  • la commande à exécuter : curl -k --silent --user zabbix-monitoring:MOT_DE_PASSE https://127.0.0.1/ocs/v2.php/apps/serverinfo/api/v1/info

Ajuster les options suivantes dans la ligne de commande :

  • -k : indique à curl d'autoriser la connexion SSL non sécurisée. Ceci est utile lorsque le serveur web servant Nextcloud a été configuré avec un certificat SSL auto-signé. Mais surtout, comme nous demandons une connexion sur l'adresse IP localhost, la connexion sera toujours considérée comme non sécurisée car le certificat SSL fait référence à un nom de domaine.

  • MOT_DE_PASSE : le mot de passe défini pour l'utilisateur zabbix-monitoring

  • https : http/https à ajuster en fonction de la configuration de votre serveur web. Si une connexion http est utilisée, enlever l'option -k

Si nécessaire, restreindre la sécurité de ce fichier de configuration en lecture écriture pour root :

sudo chmod 600 /etc/zabbix/zabbix_agentd.d/userparameter_nextcloud.conf

Pour s'assurer du bon fonctionnement, exécutez manuellement, depuis le serveur Nextcloud, la commande définie dans la ligne UserParameter précécente.

curl -k --silent --user zabbix-monitoring:MOT_DE_PASSE http://127.0.0.1/ocs/v2.php/apps/serverinfo/api/v1/info

Vous devez obtenir un retour de ce genre :

<?xml version="1.0"?>
<ocs>
 <meta>
  <status>ok</status>
  <statuscode>200</statuscode>
  <message>OK</message>
 </meta>
 <data>
  <nextcloud>
   <system>

...

 </activeUsers>
 </data>
</ocs>

Redémarrer l'agent Zabbix sur le serveur Nextcloud pour prendre en compte le nouveau script Zabbix.

sudo systemctl restart zabbix-agent.service

Interface Zabbix

La suite s'effectue depuis l'interface de configuration Zabbix.

En fonction de vos besoins ouvrir soit :

  • le modèle Template App Nextcloud Monitoring API
  • le serveur utilisant le modèle Template App Nextcloud Monitoring API

Editer l'élément : Nextcloud Monitoring API

et remplacer la clé :

system.run[curl -s --user {$CLOUD_ADMIN_USER}:{$CLOUD_ADMIN_PW}  {$HTTP_OR_HTTPS}://{$FQDN_NEXTCLOUD}/ocs/v2.php/apps/serverinfo/api/v1/info]

par :

nextcloud.serverinfo

Le serveur Zabbix va communiquer avec l'agent zabbix du serveur Nextcloud et demander l'exécution de la commande zabbix personnalisée : nextcloud.serverinfo, puis récupérer les données et les traiter.

Bénéfices

Cette solution améliore la sécurité de l'environnement Zabbix tout en restant au même niveau de fonctionnalités.
Le mot de passe administrateur Nextcloud n'est plus disponible en clair dans Zabbix. Il n'est accessible qu'aux administrateurs du serveur dans un fichier aux droits limités.

Posted in Nextcloud.