Connection à un Munin-node via SSH

Suite à la mise en place d'un VPS sous Debian Stretch chez OVH afin de conserver une adresse IPv4 fixe pour mon serveur email hébergé chez moi (je vous passe les détails qui m'oblige à utiliser un VPS), je souhaite monitorer celui-ci avec la solution déjà mise en place sur mon server principal utilisant Munin.

Afin de minimiser les ressources utilisées sur ce serveur VPS, j'ai installé les paquets debian suivant:

  • munin-node-c et munin-plugins-c pour le node Munin et les plugins en C.
  • munin-plugins-core et munin-plugins-extra pour quelques plugins additionnels en Perl non implémentés en C (fail2ban par exemple).

Et là, un gros souci est apparu. Comment le serveur principal va communiquer avec le serveur VPS pour le traffic Munin sachant que munin-node-c ne supporte pas une connexion TLS?

Plusieurs solutions:

  • Un tunnel VPN entre mon serveur et le VPS
  • Un tunnel SSH avec port-forwarding
  • Une connexion SSH directement.

C'est la 3ieme solution qui a été choisi après analyse du code Perl du programe munin-update et plus spécialement de /usr/share/perl5/Munin/Master/Node.pm.

Ce dernier permet d'utiliser une connexion SSH pour lancer un programe sur le serveur distant. Pour ce faire, l'URL à utiliser doit avoir le format suivant:

[host.example.com]
address = ssh://user@host.example.com/path/to/program parameters

De plus, afin de permettre une connexion sans mot de passe au node Munin sur mon serveur VPS par le processus munin-update, j'ai créé une clef privée SSH que j'ai installée pour l'utilisateur munin dans /var/lib/munin/.ssh sur mon serveur principal.

Sachant que munin-node-c utilise inetd et est lancé automatiquement lors d'une connexion sur le port 4949, il ne reste plus qu'à relier la connexion SSH et le service lancé par inetd. C'est là que netcat intervient. Il permet de faire le lien entre la connexion SSH entrante et le service munin-node-c.

Et voilà. Le processus munin-update sur mon serveur principal communique avec le processus de collecte munin-node-c sur mon serveur VPS grace à cette config:

[vps.example.com]
address = ssh://munin@vps.example.com/bin/netcat -q 3

On pourrait aussi bypasser completement inetd en executant directement le démon munin-node-c lors de la connexion SSH, mais il s'execute alors avec l'utilisateur courant et non plus l'utilisateur nobody:

[vps.example.com]
address = ssh://munin@vps.example.com/usr/sbin/munin-node-c -H vps.example.com

Voilà, cette configuration me permet de suivre l'évolution de mon VPS dès maintenant et sans attendre de mettre en place le tunnel VPN qui sera de toute façon requis pour le traffic SMTP qui nécessite une IP fixe que je n'aurais bientôt plus à la maison.

Commentaires

links

social