Oxidized est un logiciel de backup d’équipement réseau par SSH. C’est un remplacement à RANCID. Celui-ci a été créé le 17 Avril 2013 selon ce commit sur GitHub : Lien du commit

On m’a donc demandé en arrivant chez Eurofiber en Décembre, de mettre en place une solution de backup des équipements de backbone en utilisant Oxidized.

En faisant ça, j’ai pu commencé à apprendre et à me familiariser avec l’infrastructure existante.

Dans les sections suivantes, je vais vous détailler la procédure de création de cette machine virtuelle par rapport à OSS.

Compétence mise en oeuvre

Veuillez consulter le Tableau de compétences

Schéma de fonctionnement d’Oxidized

graph TD A[BDD Netbox] B[Oxidized] C[Connexion SSH Backbone] E{Connexion SSH réussie ?} F[Récupération configuration] G[Notification Teams] H[WebUI] A -->|Génération de la BDD d'Oxidized| B B --> C C --> E E --> Oui Oui --> F F -->|Consultation de la configuration| H F -->|Notification de réussite | G E --> Non Non -->|Notification d'échec| G Non -->|Envoie de l'information d'échec| H

Création de la VM

Se référer à la Procédure de création de VM

Installation et Configuration d’Oxidized

Installation d’Oxidized

Dépendances :

apt install -y ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++ libyaml-dev

Installation :

gem install oxidized
gem install oxidized-script oxidized-web

Création et connexion sur l’utilisateur oxidized :

useradd -m oxidized -s /bin/bash
su - oxidized

Création du répertoire et de la configuration par défaut :

oxidized

Configuration d’Oxidized

Dans le répertoire /home/oxidized/.config/oxidized, modifier le fichier config comme suit :

vim .config/oxidized/config

Aller voir le dépôt GitLab, dossier oxidized, pour avoir accès à la configuration (./oxidized/config).


WebHook pour Teams

Scripts à mettre pour pouvoir envoyer des notifications sur Teams lorsqu’un équipement est backup ou non.

Aller voir le dépôt GitLab. (./oxidized/node_success.sh et ./oxidized/node_fail.sh)

Service systemd

Aller voir le dépôt GitLab (./oxidized/oxidized.service).

La configuration du service systemd va ici /etc/systemd/system/oxidized.service.

Configuration TACACS Plus

Il faut rajouter ces lignes dans TACACS Plus pour le groupe backup

cmd = admin     { permit display-config }
cmd = file           { permit type }
cmd = environment { permit more }

Configuration proxy SQUID

Puisqu’on utilise SQUID comme proxy interne pour autoriser uniquement certains sites sur les machines (Dépôt Debian, dockerhub, LetsEncrypt...), il faut modifier la configuration de SQUID pour autoriser l’accès au WebHook Teams d’Eurofiber :

acl webhook_ef_msteams dstdomain eurofiber.webhook.office.com
http_access allow webhook_ef_msteams

Génération de l’inventaire à partir de Netbox sur Rundeck pour Oxidized

Pour générer l’inventaire d’Oxidized, on utilise un script Python qui génère l’inventaire de tous les équipements de backbone selon leur OS, leurs marques et s’ils sont actifs ou non. Après ça, le script vient stocker les informations qu’il a récupéré sous la forme d’un fichier CSV.

Dans Rundeck une fois qu’il a exécuté le script, celui-ci le stock dans /tmp/router.db, après ça dans la suite de son playbook, Rundeck vient copier en SSH le fichier router.db dans /home/oxidized/.config/oxidized/router.db

Le script est disponible sur mon GitLab, dans le dossier ./oxidized/inventory.py (Les mentions "Modifier ici", sont pour la connexion à l’API de Netbox et les logins d’Oxidized).

Consultation des configurations

Pour consulter les configurations qu’Oxidized a réussi à récupérer, on peut utiliser la commande git clone pour obtenir les backups en local à partir du dépôt Git que génère Oxidized:

git clone ssh://business-backup-01.business.31tls00.ef-fr.net/home/oxidized/.config/oxidized/devices.git

Interface web

Installation des paquets requis :

apt -y install curl cron ssl-cert apache2 libldap-common

Installation d’acme.sh (Générateur de certificats SSL):

curl -s https://get.acme.sh | bash -s email=admin@ef-fr.net --install

Déclaration de la clé d’API de GANDI :

export GANDI_LIVEDNS_TOKEN=$(systemd-ask-password)

Génération du certificat SSL :

acme.sh --issue -k 4096 --keylength ec-384 -d oxidized.ef-fr.net --dns dns_gandi_livedns --server letsencrypt

Initialisation des fichiers de certificats :

install --owner=root --group=ssl-cert --mode=640 /dev/null /etc/ssl/private/oxidized.ef-fr.net.pem
install --owner=root --group=ssl-cert --mode=640 /dev/null /etc/ssl/private/oxidized.ef-fr.net.key

Installation du certificat SSL :

acme.sh --install-cert -d oxidized.ef-fr.net --key-file /etc/ssl/private/oxidized.ef-fr.net.key  --fullchain-file /etc/ssl/private/oxidized.ef-fr.net.pem

Initialisation d’Apache :

a2enmod authnz_ldap headers ldap proxy proxy_http ssl
a2dissite 000-default
umask 0137

Configuration du VirtualHost oxidized.ef-fr.net :

vim /etc/apache2/sites-available/oxidized.ef-fr.net.conf

La configuration d’Apache est disponible ici sur GitLab : ./oxidized/oxidized.ef-fr.net.

Conclusion du projet

Voici le premier projet que j’ai eu à faire en arrivant chez Eurofiber France, Oxidized. En faisant ça, nous avons pu faire des sauvegardes des équipements de backbone (environ 1000 équipements). Ce projet m’a permis d’apprendre une partie du réseau d’Eurofiber France ainsi que de mettre un pied dans OSS.