Sauvegarde des routeurs et switchs avec RANCID sur Ubuntu

Rancid (Really Awesome New Cisco config Differ) est un outil libre permettant la  sauvegarde des configurations des équipements réseaux et pourra comparer les différences entre sauvegardes avec CVS (Concurrent Version System) et éventuellement vous informer des modifications par mail.

Pour sauvegarder les configurations, Rancid se connecte sur l’équipement réseau et copie les configurations sur le serveur. . Ainsi, il n’est pas nécessaire d’activer le SNMP sur l’équipement réseau, la procédure est réalisée grâce à un expect (vulgairement, exécution de commandes. Les connaissances sur cette fonction ne sont pas nécessairent, sauf si vous désirez développer vos propres scripts pour la sauvegardes de périphériques non pris en charge).
Rancid permet notamment de sauvegarder des équipements de marque Cisco, HP, Juniper, Foundry,Netscreen et bien d’autres.


[toc title= »Table des matières » hint= »hover hint »
class= »toc » style= »width: 55% »]

Prérequis

Installation des paquets requis

Les paquets suivant sont nécessaire au fonctionnement de rancid :

apt-get install apache2
apt-get install expect
apt-get install cvs
apt-get install cvsweb

Création de l’environnement

La première chose à faire est de créer un nouvel utilisateur appelé rancid afin d’éviter, pour des raisons de sécurité de lancer des applications avec l’utilisateur root. Dans cet optique, les scripts de rancid sont écris de tel manière qu’il ne fonctionne pas avec le compte root.

adduser rancid –home /home/rancid

Ceci va créer l’utilisateur rancid et en même temps un dossier rancid. L’utilisateur rancid est propriétaire de ce dossier.

Installation de RANCID

Compilation des sources

Un paquet existe dans les dépots officiels Ubuntu, mais il ne fonctionne pas convenablement. Il est donc préférable de compiler depuis les sources. De plus, cela permet de contrôler la destination des fichiers de configuration et des scripts.
Une fois que le logiciel rancid est téléchargé depuis le site web de Shrubbery, décompresser le depuis le dossier où il a été téléchargé.

tar xvfz rancid-<version>.tar.gz

Nous avons besoin d’installer les outils requis à la compilation d’un logiciel, si ce n’est pas déjà fait.

apt-get install build-essential

Maintenant, nous pouvons compiler et installer Rancid. Pour ce faire, nous avons besoin d’accéder au nouveau dossier décompressé:

cd /home/rancid/rancid-2.3.1

./configure –prefix=/home/rancid

make

make install

Ceci va installer Rancid dans le dossier /home/rancid, et créer l’arborescence :

Table 1-1 : Localisation des fichiers de Rancid

Location Description
/home/rancid Répertoire de base de Rancid
/home/rancid/var/logs Répertoire des fichiers journaux de backup. Vous pouvez tracer les erreurs de sauvegarde ici.
/home/rancid/bin Répertoire des exécutables (scripts)
/home/rancid/var/networking/configs Répertoire des sauvegardes des fichiers de configuration
/home/rancid/var/networking/router.db Liste de tous les périphériques réseaux à sauvegarder.
/home/rancid/.cloginrc Fichier des mots de passe

Configuration de Rancid

Configuration générale

Maintenant, nous pouvons débuter le paramétrage de Rancid.
Nous allons configurer le fichier /home/rancid/etc/rancid.conf pour créer des groupes d’équipements. Au moins un groupe doit être configuré.

L’ajout des lignes ci-dessous crée un groupe appelé routeurs où toutes les configurations des équipements sont stockées:

LIST_OF_GROUPS= »routeurs »

Il est possible de créer plusieurs groupes en les séparant par des éspaces.

LIST_OF_GROUPS= »routeurs switchs »

Il est nécessaire de configurer un fichier appelé « .cloginrc » contenant les mots de passe nécessaires pour accéder aux composants réseaux. Pour le créer, ou copier l’exemple présent dans /home/rancid/share/rancid/

cp /home/rancid/share/rancid/cloginrc.sample /home/rancid/.cloginrc

Ensuite, nous éditons le nouveau fichier « .cloginrc » où on peut trouver des exemples de syntaxe basées sur le type d’équipement (Cisco, Juniper, etc…) et de connexion (telnet, ssh, …)
Dans notre exemple, nous allons utiliser telnet pour accéder à un switch Cisco ayant une adresse IP de 192.168.200.1
Ouvrez /home/rancid/.cloginrc

add password 192.168.200.1 {user_password} {enable_password}

Ajouter un # au début de chaque ligne à l’exception bien entendu des lignes qui paramètrent vos connexions.
Soyez EXTRÊMEMENT attentif avec les permissions du fichier .cloginrc parce que les mots de passe inclus dans ce fichier ne sont pas encryptés. Le seul moyen de protéger ces mots de passe critiques est de restreindre les droits d’accès au fichier.
Pour le faire, changez les droits d’accès à 600, ce qui veut dire que le propriétaire du fichier a les permissions lecture et écriture tandis que les autres utilisateurs n’ont aucune permission du tout. Puis, la propriété du dossier /home/rancid ainsi que tous les fichiers et dossiers qu’il inclut est transféré à l’utilisateur rancid.

chmod 600 /home/rancid/.cloginrc
chown -R rancid:rancid /home/rancid

Création de l’architecture CVS

Connectez-vous en temps que rancid, puis lancer la commande rancid-cvs:

su – rancid
rancid@linux#/home/rancid/bin/rancid-cvs

La commande rancid-cvs créé l’arborescence CVS dans /home/rancid/var/CVS/CVSROOT. Il faut lancer cette commande avant la commande rancid-run, sans quoi l’arborescence ne sera pas créée. Elle créer également un répertoire par groupe déclaré dans le fichier rancid.conf, qui seront situé dans /home/rancid/var. les fichiers router.db présents dans chacun de ces répertoires serviront à déclarer les périphériques de chaque groupe.

Ajouter des équipements aux groupes:
/home/rancid/var/<group_name>/router.db
La syntaxe est la suivante:

<device_name>:<device_type>:<state>[:comments]

exemple:

10.156.1.1:cisco:up
10.156.1.28:cisco:up

Voici la liste des périphériques pris en charge :

Table 1-2 : Différents types de périphériques  Rancid

Device Description
alteon An Alteon WebOS switches.
baynet A Bay Networks router.
cat5 A Cisco catalyst series 5000 and 4000 switches (i.e.: running the catalyst OS, not IOS).
cisco A Cisco router, PIX, or switch such as the 3500XL or 6000 running IOS (or IOS-like) OS.
css A Cisco content services switch.
enterasys An enterasys NAS. This is currently an alias for the riverstone device type.
erx A Juniper E-series edge router.
Extreme An Extreme switch.
ezt3 An ADC-Kentrox EZ-T3 mux.
force10 A Force10 router.
foundry A Foundry router, switch, or router-switch. This includes HP Procurve switches that are OEMs of Foundry products, such as the HP9304M.
hitachi A Hitachi routers.
hp A HP Procurve switch such as the 2524 or 4108 procurve switches. Also see the foundry type.
mrtd A host running the (merit) MRTd daemon.
netscalar A Netscalar load balancer.
netscreen A Netscreen firewall.
redback A Redback router, NAS, etc.
tnt A lucent TNT.
zebra Zebra routing software.
riverstone A Riverstone NAS or Cabletron (starting with version ~9.0.3) router.
juniper A Juniper router.

Une fois les périphériques déclarés dans le fichier router.db, et les méthodes d’accès configurées dans le fichier .cloginrc, un script permet de vérifier les paramétrages de connexion.

rancid@linux:~/bin$ /home/rancid/bin/clogin 192.168.200.1

192.168.200.1
spawn telnet 192.168.200.1
Trying 192.168.200.1…
Connected to 192.168.200.1.
Escape character is ‘^]’.

User Access Verification

Password:
Router>enable
Password:
Router#

Démarrez rancid:

rancid@linux#/home/rancid/bin/rancid-run

Vous pouvez vérifier les journaux (logs) dans le répertoire /home/rancid/var/rancid/logs/.

La commande rancid-run va sauvegarder tous les périphériques de tous les groupes. Pour ne sauvegarder qu’un groupe, la syntace est :

rancid@linux#/home/rancid/bin/rancid-run <nom_du_groupe>

Cela est utile pour les tests, par exemple.

Nous devons maintenant installer la plate-forme pour voir les configurations avec un navigateur web.

CvsWeb

Nous devons ajouter une ligne dans le fichier /etc/cvsweb.conf avec l’utilisateur root pour créer le nouveau dépôt (repository) CVS. Rechercher la ligne commençant par « @CVSrepositories » et ajouter les lignes en vert ci-dessous:

@CVSrepositories = (
‘local’ => [‘Local Repository’, ‘/var/lib/cvs’],
‘rancid’ => [‘rancid’, ‘/home/rancid/var/CVS’],
#’freeebsd’ => [‘FreeBSD’, ‘/var/ncvs’],
#’openbsd’ => [‘OpenBSD’, ‘/var/ncvs’],
#’netbsd’ => [‘NetBSD’, ‘/var/ncvs’],
#’ruby’ => [‘Ruby’, ‘/var/anoncvs/ruby’],
);

Si le dossier contenant les icônes csvweb et les fichiers css sont pas dans le dossier /var/www, il est nécessaire d’ajouter un lien symbolique:

ln -s /usr/share/cvsweb /var/www/cvsweb

Nous pouvons tester l’interface cvsweb avec un navigateur internet:

http://127.0.0.1/cgi-bin/cvsweb

Rancid et les mails

Optionnellement, vous pouvez configurer Rancid pour vous envoyer un mail quand une configuration a été changée après le lancement du script rancid-run.

La première chose à faire est d’installer Postfix avec:

apt-get install postfix

Ensuite, il faut configurer Postfix afin qu’il puisse envoyer des mails vers la passerelle SMTP. Cette machine va envoyer les courriels soit directement sur internet ou à l’intérieur de la société vers des serveurs de messagerie. Dans notre cas, email.domain.fr
Pour ça, nous avons besoin de paramétrer le fichier de configuration de Postfix qui est /etc/postfix/main.cf .
Ajouter les paramètres suivants:

relayhost = FQDN du serveur SMTP

relayhost = email.domain.fr
Redémarrer postfix:

/etc/init.d/postfix restart

Maintenant, nous pouvons tester si nous pouvons envoyer un mail avec succès depuis la machine SMTP locale:

#telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 localhost ESMTP Postfix (Ubuntu)

ehlo mail
250-localhost
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250 8BITMIME

mail from: <test@votre_domaine.fr>
250 Ok
rcpt to: <votre_utilisateur@votre_domaine.fr>
250 Ok
data
354 End data with .


Subject: C’est un test !
.
250 Ok: queued as BD8261C01D4
quit
Connection closed by foreign host.

Vous devriez recevoir un mail.

On peut également tester cela à l’aide de la commande mailx ci ce dernier est installé :

mailx –s ‘’test RANCID’’ <votre_utilisateur@votre_domaine.fr>
Si vous avez un problème, regarder le fichier /var/log/mail.log. Pour voir les dernières lignes en temps réel:

tail -f /var/log/mail.log

L’outil Rancid est paramétré pour envoyer des courriels à deux destinataires par groupe.

rancid-« nom_du_groupe »
rancid-admin-« nom_du_groupe »

Le premier destinataire ci-dessus va recevoir un rapport après un changement de configuration, le deuxième est envoyé quand il y a des messages d’erreur.
Pour rappel, le ou les groupes sont configurés dans le fichier /home/rancid/etc/rancid.conf.
Par exemple, pour le groupe appelé routeurs_Siege, les mails seront envoyés aux adresses rancid- routeurs_siege et rancid-admin- routeurs_siege.

Afin que les mails soient dirigés vers les bons destinataires, il faut créer des alias (2 alias par groupes). Ouvrez le fichier /etc/aliases, ou /etc/postfix/aliases, selon le répertoire déclaré dans /etc/postfix/main.cf:

rancid- routeurs_siege
administrateur@domain.fr

rancid-admin- routeurs_siege
administrateur@domain.fr

Pour terminer, initialiser la base de données d’alias:

newaliases

ATTENTION : Les scripts RANCID, dans les dernières versions, intègre le suffixe $MAILDOMAIN, ce qui rend inutile la création des alias. Cette variable est initialisée dans le fichier de configuration $HOME/etc/rancid.conf. Il ne faut donc pas la déclarer pour que la redirection via les alias fonctionne.

Pour tester, on peut utiliser la commande mailx, si celle-ci à été installée:

mailx –s ‘’test Alias RANCID’’ rancid-<groupe>

Le mail doit être redirigé vers l’adresse <votre_utilisateur@votre_domaine.fr>. Il est possible de vérifier cela en consultant le fichier /var/log/mail.log.

Nous avons besoin de créer un cron job pour lancer rancid-run régulièrement.

crontab -e -u rancid

# lancer le script rancid-run tous les jours à 12:45
45 12 * * * /home/rancid/bin/rancid-run

La commande crontab va mettre à jour le fichier /var/spool/cron/crontabs/rancid.

La commande « find » peut être ajoutée au crontab pour supprimer les anciens logs. La commande suivante supprime les fichiers de plus de 30 jours dans le dossier /home/rancid/var/logs/:

# supprime les anciens logs tous les premiers jours de chaque mois à 00:15
15 00 1 * * find /home/rancid/var/logs -type f -mtime +30 -exec rm {} \;

Méthodes d’authentifications

Différents exemples de méthodes d’authentifications sont présents dans le fichier /home/rancid/share/.cloginrc.conf. En voici quelques exemples.

Simple connexion telnet puis passer en mode enable

Add password <nom-du_périphérique ou @IP>               {vty-password}   {enable-password}

Il est possible d’utiliser des jokers pour les méthodes récurrentes.

add password 172.16.*              {telnet-password}           {enable-password}

Authentification par SSH

add password 172.30.0.2                       {ssh-password}  {enable-password}

Add methode 172.30.0.2                       {ssh}

Configuration avec utilisateur

Imaginons que certains routeurs demandent un login et un mot de passe pour la connexion vty, la syntaxe serait la suivante :

add user <nom-du_périphérique ou @IP> username

add password {vty-password}

Configuration Autoenable

Sur certains routeurs, et notamment ceux disposant d’une connexion avec login/mot de passe, on arrive directement en mode enable. Dans ce cas, il faut rajouter à la configuration du périphérique le paramètre :

add autoenable <nom-du_périphérique ou @IP> 1

Ce sont les principales options utiles. Cependant, il en existe d’autres, permettant par exemple d’utiliser des clés privées pour les connexions SSH. Vous pouvez trouver la page de de manuel de .cloginrc à l’adresse: http://pwet.fr/man/linux/formats/cloginrc