Monitoring OPNsense avec Beszel

Monitoring OPNsense avec Beszel

Il y a quelques semaines je vous ai présenté mon HomeLab et notamment comment je le monitore avec l’excellent Bezsel. Un outil de monitoring simple, léger et efficace ! Loin des usines à gaz que sont Zabbix ou Centreon et largement suffisant pour un HomeLab.

Cependant, il ne propose pas de solution directement applicable pour monitorer mon firewall OPNsense.

Je vous explique dans cet article comment installer, configurer et mettre à jour un agent Bezsel pour l’OS FreeBSD ou OPNsense, basé sur cet OS, pour résoudre ce problème.

📌 Prérequis et Notes Importantes

  • Accès SSH : activer le ssh sur OPNsense
  • Utilisateur beszel : L’agent tournera sous l’utilisateur beszel. J’ai utilisé l’ID 2000, mais vous pouvez le changer ou l’omettre.
  • Mise à jour : L’agent peut s’auto-mettre à jour, mais vous devrez redémarrer le service manuellement après.
  • Permissions : Toutes les commandes ci-dessous sont supposées être exécutées en tant que root.

🛠️ Le Guide d’Installation Étape par Étape

1. Activation du ssh

Sur votre firewall OPNsense aller sur System -> Settings -> Administration

Puis dans la section Secure Shell activez le Secure Shell sur l’interface LAN comme dans la capture ci-dessous :

Ensuite il vous suffit de vous connecter à votre firewal en ssh avec la commande suivante en mettant l’ip de votre OPNsense:

ssh root@ip_opnsense

Le mot de passe est celui du root.

2. Création de l’utilisateur dédié

Pour des raisons de sécurité, l’agent ne doit pas tourner sous root.

pw user add beszel -u 2000 -d /nonexistent -s /usr/sbin/nologin -c "beszel user"

3. Préparation du Répertoire d’Installation

Créez l’emplacement où l’agent sera installé.

mkdir -p /opt/beszel-agent/bin

4. Installation de beszel-agent

Nous allons télécharger et extraire l’agent directement dans le répertoire créé. J’ai choisi ici une version un peu plus ancienne (v0.12.5) pour pouvoir tester la fonction de mise à jour après l’installation.

curl -sL https://github.com/henrygd/beszel/releases/download/v0.12.5/beszel-agent_freebsd_amd64.tar.gz | tar -xC /opt/beszel-agent/bin beszel-agent

5. Ajustement des Permissions pour l’Auto-Mise à Jour

Pour permettre à l’agent de se mettre à jour lui-même, il doit avoir les droits d’écriture sur son propre répertoire.

chown -R beszel:wheel /opt/beszel-agent/bin

6. Création et Configuration du Fichier d’Environnement (.env)

C’est là que vous stockez les paramètres sensibles de l’agent.

touch /opt/beszel-agent/env && chmod 640 /opt/beszel-agent/env && chown root:beszel /opt/beszel-agent/env

⚠️ Remplissez /opt/beszel-agent/env avec votre contenu :

J’ai choisi de lier le service à 127.0.0.1 car je n’utilise pas le mode SSH.

Il faut au préalable créer votre OPNsense sur Bezsel qui vous fournira la key ssh ainsi que le token

LISTEN=127.0.0.1:45876
KEY="ssh-ed25519 ..." # Votre clé publique
HUB_URL=https://example.internal # L'ip ou url de votre Beszel
TOKEN=abcde # Votre jeton d'authentification

7. Mise en place du Fichier RC (Service System)

Afin de pouvoir gérer l’agent comme un service standard (démarrer, arrêter, etc.), nous allons créer un fichier de service (rc).

  • Créez le fichier de service (par commodité, dans /opt/beszel-agent/rc) :
touch /opt/beszel-agent/rc
  • Donnez-lui les permissions d’exécution :
chmod 755 /opt/beszel-agent/rc
  • Créez le lien symbolique vers l’emplacement attendu par le système :
ln -s /opt/beszel-agent/rc /usr/local/etc/rc.d/beszel-agent
  • Contenu du Fichier RC (/opt/beszel-agent/rc)

Ce script permet la gestion standard du service et ajoute une commande upgrade super pratique. Copiez le contenu suivant dans le fichier rc :

#!/bin/sh

# PROVIDE: beszel_agent
# REQUIRE: DAEMON NETWORKING
# BEFORE: LOGIN
# KEYWORD: shutdown

# Add the following lines to /etc/rc.conf to enable Beszel Agent:
# beszel_agent_enable="YES"
#
# beszel_agent_enable (bool):   Set to YES to enable Beszel Agent
#                               Default: NO
# beszel_agent_env_file (str):  Beszel Agent env configuration file
#                               Default: /opt/beszel-agent/env
# beszel_agent_user (str):      Beszel Agent daemon user
#                               Default: beszel
# beszel_agent_bin (str):       Path to the beszel-agent binary
#                               Default: /opt/beszel-agent/bin/beszel-agent
# beszel_agent_flags (str):     Extra flags passed to beszel-agent command invocation
#                               Default:

. /etc/rc.subr

name="beszel_agent"
rcvar=beszel_agent_enable

load_rc_config $name
: ${beszel_agent_enable:="NO"}
: ${beszel_agent_user:="beszel"}
: ${beszel_agent_flags:=""}
: ${beszel_agent_env_file:="/opt/beszel-agent/env"}
: ${beszel_agent_bin:="/opt/beszel-agent/bin/beszel-agent"}

logfile="/var/log/${name}.log"
pidfile="/var/run/${name}.pid"

procname="/usr/sbin/daemon"
start_precmd="${name}_prestart"
start_cmd="${name}_start"
stop_cmd="${name}_stop"

extra_commands="upgrade"
upgrade_cmd="beszel_agent_upgrade"

beszel_agent_prestart()
{
    if [ ! -f "${beszel_agent_env_file}" ]; then
        echo WARNING: missing "${beszel_agent_env_file}" env file. Start aborted.
        exit 1
    fi
}

beszel_agent_start()
{
    echo "Starting ${name}"
    /usr/sbin/daemon -fc \
            -P "${pidfile}" \
            -o "${logfile}" \
            -u "${beszel_agent_user}" \
            "${beszel_agent_bin}" ${beszel_agent_flags}
}

beszel_agent_stop()
{
    pid="$(check_pidfile "${pidfile}" "${procname}")"
    if [ -n "${pid}" ]; then
        echo "Stopping ${name} (pid=${pid})"
        kill -- "-${pid}"
        wait_for_pids "${pid}"
    else
        echo "${name} isn't running"
    fi
}

beszel_agent_upgrade()
{
    echo "Upgrading ${name}"
    if command -v sudo >/dev/null; then
        sudo -u "${beszel_agent_user}" -- "${beszel_agent_bin}" update
    else
        su -m "${beszel_agent_user}" -c "${beszel_agent_bin} update"
    fi

    echo "Restarting ${name}"
    beszel_agent_stop
    beszel_agent_start
}

run_rc_command "$1"

8. Activation du Service

Pour que le service démarre automatiquement au boot, ajoutez la ligne suivante à /etc/rc.conf.local (préférable) ou /etc/rc.conf :

beszel_agent_enable="yes"

9. Contrôle et Gestion du Service

Vous pouvez maintenant utiliser la commande service pour contrôler l’agent :

ActionCommande
Démarrerservice beszel-agent start
Arrêterservice beszel-agent stop
Redémarrerservice beszel-agent restart
Statutservice beszel-agent status

🚀 Mise à Jour Simplifiée !

Grâce à la commande personnalisée ajoutée au fichier RC (point 7), la mise à jour est un jeu d’enfant :

service beszel-agent upgrade

Cette commande exécute la mise à jour de l’agent en tant qu’utilisateur beszel, puis redémarre le service automatiquement. Beaucoup plus simple que de faire la mise à jour manuellement puis de redémarrer !

Comments

No comments yet. Why don’t you start the discussion?

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *