RANCID (Really Awesome New Cisco confIg Differ) est un logiciel open source qui permet de faire des sauvegardes d’actifs réseau (HP ProCurve, Cisco, Juniper…) de manière automatisée et surtout, il gère le versioning grâce à CVS. Cela permet de suivre l’évolution des configurations.
En tant qu’administrateur, on cherche toujours à améliorer et à sécuriser les réseaux, mais malheureusement, la sauvegarde des actifs réseau n’est pas toujours une priorité, on fait une modification en urgence, on se dit qu’on fera la sauvegarde un peu plus tard... Mais le jour où on connaît une panne, il faudra bien refaire la configuration, avec une backup ce serait mieux et si elle est à jour ce serait parfait. D’où l’utilité de la mise en place d’un système de backup automatisé pour les actifs réseau. En cherchant sur Internet, je suis tombé sur RANCID (à cette adresse http://www.shrubbery.net/rancid/), j’ai tout de suite été séduit par l’ajout de CVS pour gérer les versions des configurations ; petit bonus : on peut configurer la partie mail pour être alerté des modifications sur les configurations. On peut aussi utiliser Subversion ; dans l’installation que je vais vous présenter, je resterai sur CVS.
1. Installation de RANCID
J’ai choisi Ubuntu 12.04 LTS pour héberger mes backups, donc toutes mes commandes seront orientées pour Ubuntu, mais il est possible d’installer RANCID sur d’autres distributions. L’installation se fera à partir des sources de RANCID, donc il faudra un compilateur, CVS et un utilisateur dédié pour RANCID. La version courante, au moment où j’écris ces lignes est la 2.3.8.
Prérequis :
sudo apt-get install build-essential
Installation de CVS :
sudo apt-get install cvs cvsweb expect
Création de l’utilisateur rancid :
sudo adduser rancid --home /home/rancid
Récupération des sources :
wget ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.8.tar.gz
Décompression :
tar xvzf rancid-2.3.8.tar.gz
Compilation :
cd rancid-2.3.8/
sudo ./configure --prefix=/home/rancid
sudo make install
sudo chown rancid:rancid /home/rancid -R
À ce stade, l’installation de RANCID et des prérequis est finie.
2. Configuration de RANCID
Pour commencer, il faut configurer le ou les groupe(s) de switch, cette partie servira à regrouper les switchs dans l’interface web de CVS. Vous pouvez par exemple les regrouper par site géographique, ou marque… Pour simplifier, je vais créer un seul groupe que j’appellerai MES_SWITCHS. Si vous souhaitez ajouter plusieurs groupes, il suffit de les séparer par des espaces.
2.1 rancid.conf
Il faut éditer le fichier rancid.conf pour ajouter la directive ci-dessous et modifier la variable PATH pour ajouter /usr/sbin :
su rancid
nano /home/rancid/etc/rancid.conf
LIST_OF_GROUPS="MES_SWITCHS"
PATH=/home/rancid/bin:/usr/bin:.:/bin:/usr/local/bin:/usr/sbin:/usr/bin; export PATH
Une fois les groupes créés, il faut exécuter la commande :
/home/rancid/bin/rancid-cvs
Elle permet de créer les répertoires CVS ainsi que le fichier router.db dans chaque répertoire CVS. Ce fichier permet de stocker les noms DNS ou IP des switchs. Un répertoire pour chaque groupe sera créé.
2.2 router.db
Voici un petit tableau qui sera utile pour la configuration du fichierrouter.db.
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. |
Nous allons maintenant pouvoir configurer le fichier router.db ; dans notre cas, il y a qu’un seul fichier router.db, car nous n’avons qu’un seul groupe.
nano /home/rancid/var/CVS/MES_SWITCHS/router.db
Pour configurer ce fichier, nous allons nous baser sur le tableau suivant :
Nom DNS |
IP |
Protocole |
Nom d’utilisateur |
Mot de passe |
sw1.domain.local |
10.10.10.1 |
telnet |
Administrator |
Toto |
sw2.domain.local |
10.10.10.2 |
telnet |
Administrator |
Toto |
sw3.domain.local |
10.10.10.3 |
telnet |
Administrator |
Toto |
sw4.domain2.local |
10.10.10.4 |
ssh |
admin |
Tata |
sw5.domain2.local |
10.10.10.5 |
ssh |
admin |
Tata |
Il regroupe les noms, IP, types d’authentification et identifiants de connexion.
Le fichier se compose comme suit :
Nom ou ip:marque:statut (10.10.10.1:hp:up, ou aussi sw.toto.local:cisco:down)
Nous aurons donc dans le fichier les lignes suivantes :
sw1.domain.local:hp:up
sw2.domain.local:hp:up
sw3.domain.local:hp:up
sw4.domain2.local:hp:up
sw5.domain2.local:hp:up
Le statut (dernier paramètre) permet de signifier à RANCID qu’il faudra ignorer cet équipement.
2.3 .cloginrc
Ensuite, il faut configurer les identifiants et la méthode de connexion aux équipements réseau. C’est là que cela peut se compliquer, selon les marques et même les modèles, les identifiants peuvent être différents, certains utilisent « admin » en login, d’autres « Administrator ». Pareil pour le enable (#) : sur certains switchs, on est tout de suite en enable (autoenable), sur d’autres, il faut taper la commande enable et saisir un mot de passe.
RANCID est capable de faire beaucoup de choses au niveau de la connexion, par exemple, on peut lui spécifier que le prompt pour la connexion utilisateur n’est pas « user : », mais « utilisateur : ».
Le fichier .cloginrc, qui permet de gérer les paramètres de connexion, est bien commenté et très explicite. Il faut savoir aussi que le fichier va être lu de haut en bas, donc il vaut mieux mettre les switchs où il y aura des paramètres spécifiques (mots de passe différents…) en premiers et mettre les switchs « génériques » à la fin. Pour avoir une configuration plus claire, je vous recommande de créer des alias (Host A) DNS pour vos switchs. Cela permet de créer un masque *.domain.local si tous les actifs ont le même mot de passe, sinon on a aussi la possibilité de renseigner des adresses IP.
Je vous ai fait un petit résumé des directives les plus intéressantes :
add password <ip ou nomdns ou *> <mot de passe> <mot de passe enable>
permet d’ajouter un mot de passe en fonction de l’IP ou du nom DNS ; on peut utiliser le caractère générique * pour faire *.domain.local ou 10.10.*, à cela il faut ajouter le mot de passe pour accéder à l’équipement et en option le mot de passe pour passer en enable.
add user <ip ou nomdns ou *> <nom d’utilisateur>
permet d’ajouter un nom d’utilisateur ; on peut comme au-dessus filtrer selon l’IP ou le nom DNS.
add userprompt <ip ou nomdns ou *> <prompt>
permet de spécifier un nouveau prompt pour le nom d’utilisateur. Par défaut : {"(Username|login|user name):"}
add passprompt <ip ou nomdns ou *> <prompt>
permet de spécifier un nouveau prompt pour le mot de passe. Par défaut : {"(\[Pp]assword|passwd):"}
add method <ip ou nomdns ou *> {telnet} {ssh} {rsh}
permet de spécifier les types de connexion et l’ordre.
add noenable <ip ou nomdns ou *> <0 ou 1>
permet de préciser si le routeur accepte le enable.
add autoenable <ip ou nomdns ou *> <0 ou 1>
permet de spécifier si on est directement en enable après la connexion.
Vous pourrez trouver plus de renseignements et des fichiers d’exemple dans le dossier /home/rancid/share.
Nous allons configurer le fichier .cloginrc pour notre exemple (le tableau vu précédemment).
nano /home/rancid/.cloginrc
# tous mes switchs sont autoenable, sinon vous pouvez spécifier l’adresse IP
add autoenable * 1
# configuration pour les switchs domain
add method *.domain.local telnet
add user *.domain.local Administrator
add password *.domain.local Toto
#configuration pour les switchs domain2
add method *.domain2.local ssh
add user *.domain2.local admin
add password *.domain2.local Tata
Le fichier va être lu de haut en bas, il faut donc veiller à respecter l’ordre qui est du plus précis au plus générique. Par exemple :
add user sw1.domain.local admin
add user sw*.domain.local administrateur
add user *.domain.local administrator
Du coup, si c’est le sw1, il prendra le user « admin », si le switch correspond à sw*.domain.local, il prendra « administrateur » et si c’est le dernier cas, il prendra « administrator ».
Une fois le fichier .cloginrc complété, il faut le sécuriser :
chmod 600 /home/rancid/.cloginrc
chown rancid:rancid /home/rancid/.cloginrc
Vous pouvez lancer la commande suivante :
/home/rancid/bin/rancid-run
Cette commande va créer la première version des backups. Vous pourrez aussi surveiller le fichier /home/rancid/var/logs/MES_SWITCHS.date.heure. Ce fichier pourra vous informer si RANCID n’a pas réussi à se connecter à un équipement ; du coup, il faudra modifier le fichier .cloginrc en conséquence.
2.4 Configuration de CVS
Il faut ensuite configurer CVS. Pour cela, il faut éditer le fichier /etc/cvsweb/cvsweb.conf et modifier la partie @CVSrepositories.
sudo nano /etc/cvsweb/cvsweb.conf
@CVSrepositories = (
'local' => ['Local Repository', '/var/lib/cvs'],
'MES_SWITCHS' => ['MES_SWITCHS', '/home/rancid/var/CVS'],
);
Il faut aussi faire un lien symbolique pour que les icônes et la feuille de styles fonctionnent correctement :
sudo ln -s /usr/share/cvsweb/ /var/www/cvsweb
Vous pouvez voir le résultat à l’adresse http://votreip/cgi-bin/cvsweb/MES_SWITCHS/configs/.
2.5 Planification
Maintenant, il ne nous reste plus qu’à planifier l’exécution automatique des backups, ainsi que le nettoyage des logs. Pour cela, il faut ajouter les tâches dans le crontab de l’utilisateur rancid :
su rancid
crontab –e
10 23 * * * /home/rancid/bin/rancid-run
30 23 * * * /usr/bin/find /home/rancid/var/logs -type f -mtime +7 -exec rm {} \;
La première entrée exécutera RANCID tous les jours à 23h10 et la deuxième recherchera les logs de plus de 7 jours et les supprimera.
2.6 Envoi de mail
Vous avez la possibilité d’être alerté par mail si RANCID trouve une modification dans une configuration. Pour cela, on va ajouter Sendmail comme MTA :
sudo apt-get install sendmail
Maintenant, il faut configurer les alias :
nano /etc/aliases
Et ajouter les alias de mails sous cette forme :
rancid-NOMGROUPE: adressemail
rancid-admin-NOMGROUPE: adressemail
La première adresse recevra les rapports avec les changements et la deuxième (rancid-admin) recevra les erreurs. Ce qui donne dans notre cas :
rancid-MES_SWITCHS: toto@domain.com
rancid-admin-MES_SWITCHS: toto@domain.com
Puis, il faut lancer la commande newaliases pour que tout soit pris en compte :
sudo newaliases
Et voilà, tous les soirs vous serez prévenu des changements dans la configuration, mais aussi si un module du switch a été enlevé.
3. Astuces
Vous pouvez trouver de l’aide grâce aux fichiers man ; pour les consulter, il faut exécuter la commande suivante :
man -M /home/rancid/share/man/ clogin
RANCID ne s’arrête pas là, il permet aussi d’exécuter des commandes sur les équipements. Vous pouvez donc faire un show version, voire ajouter un nouveau VLAN sur plusieurs switchs. Il existe différentes commandes selon les modèles, hlogin pour le matériel HP, clogin pour Cisco ; elles se trouvent toutes dans le dossier /home/rancid/bin/.
Voici un premier exemple, faire un show version sur un équipement HP ProCurve :
/home/rancid/bin/hlogin -c "sh ver" -f /home/rancid/.cloginrc sw1.domain.local > test.txt
Le résultat sera stocké dans le fichier test.txt. Vous pouvez exécuter la commande sur plusieurs switchs en les ajoutant les uns à la suite des autres, comme ci-dessous :
/home/rancid/bin/hlogin -c "sh ver" -f /home/rancid/.cloginrc sw1 sw2 sw…. > test.txt
Pour le deuxième exemple, je vais ajouter un VLAN supplémentaire sur 2 switchs :
/home/rancid/bin/hlogin -c "conf t;vlan 666;name test;exit;exit;wr mem" -f /home/rancid/.cloginrc sw1 sw2 sw3
Conclusion
Voilà, vous avez pu voir au cours de cet article, l’installation, la configuration des différents fichiers, ainsi que quelques astuces concernant RANCID. Maintenant, il n’y aura plus d’excuse pour l’oubli des backups des équipements réseau ! Et cela vous permettra de suivre l’évolution de vos configurations. De plus, vous aurez la possibilité de déployer des ajouts dans la configuration de plusieurs équipements, sans avoir à passer sur chacun.
Bibliographie
http://www.shrubbery.net/rancid/
http://www.it-wars.com/article298/cisco-backup-avec-rancid
http://evilrouters.net/2010/05/31/installing-rancid-on-ubuntu-10-04-lts/
http://www.debian-administration.org/articles/429