{"id":129,"date":"2008-07-29T09:02:49","date_gmt":"2008-07-29T08:02:49","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/07\/29\/sauvegarde-et-versionning-automatique-des-confs-cisco-avec-rancid\/"},"modified":"2008-07-29T12:45:14","modified_gmt":"2008-07-29T11:45:14","slug":"sauvegarde-et-versionning-automatique-des-confs-cisco-avec-rancid","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/07\/29\/sauvegarde-et-versionning-automatique-des-confs-cisco-avec-rancid\/","title":{"rendered":"Sauvegarde et Versionning automatique des confs Cisco avec Rancid"},"content":{"rendered":"<p>Je discutais derni\u00e8rement avec Pascal_1, un fid\u00e8le lecteur du blog (merci \ud83d\ude00 ) , et utilisateur d&rsquo;un Cisco Pix (donc quelqu&rsquo;un de bien \ud83d\ude42 ).<\/p>\n<p>Donc ce petit billet lui est sp\u00e9cialement d\u00e9dicac\u00e9 mais je ne doute pas qu&rsquo;ils servent \u00e0 d&rsquo;autres \ud83d\ude00 .<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/06\/26\/serveur-dauthentification-tacacs\/\" title=\"Tacacs\" target=\"_blank\">Pr\u00e9c\u00e9demment<\/a>, je vous avais expliqu\u00e9 comment mettre en oeuvre une authentification centralis\u00e9e via Tacacs+ sur vos Ciscos.<\/p>\n<p>Nous allons nous servir de cette fonctionnalit\u00e9 pour sauvegarder automatiquement nos configurations et bien entendu, mettre en place un versionning CVS nous permettant de comparer les modifications apport\u00e9s et pouvoir faire un retour arri\u00e8re en cas de soucis.<\/p>\n<p>&nbsp;<\/p>\n<p>Je partirais d&rsquo;un serveur sous Gnu\/Linux <a href=\"http:\/\/www.debian.org\/\" title=\"Debian\" target=\"_blank\">Debian<\/a> qui servira de centralisateur des confs.<\/p>\n<p>Les paquets \u00e0 installer :<\/p>\n<pre class=\"code\">#apt-get install apache2 \r\n\r\n#apt-get install expect\r\n\r\n#apt-get install cvs\r\n\r\n#apt-get install cvsweb<\/pre>\n<p>&nbsp;<\/p>\n<p>Cr\u00e9ation d&rsquo;un user \u00ab\u00a0rancid\u00a0\u00bb pour l&rsquo;application :<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"code\"> #useradd -d \/opt\/rancid rancid<\/pre>\n<pre class=\"code\"><\/pre>\n<p>(j&rsquo;installe mes programmes compil\u00e9s toujours sous \/opt mais je vous laisse libre de votre choix \ud83d\ude42 )<\/p>\n<p>&nbsp;<\/p>\n<p>On r\u00e9cup\u00e8re l&rsquo;excellentissime logiciel RANCID :<\/p>\n<p><a href=\"ftp:\/\/ftp.shrubbery.net\/pub\/rancid\/rancid-2.3.1.tar.gz\" class=\"urlextern\" title=\"ftp:\/\/ftp.shrubbery.net\/pub\/rancid\/rancid-2.3.1.tar.gz\" rel=\"nofollow\">ftp:\/\/ftp.shrubbery.net\/pub\/rancid\/rancid-2.3.1.tar.gz<\/a><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"code\">#tar xvfz rancid-2.3.1.tar.gz<\/pre>\n<pre class=\"code\"><\/pre>\n<p>Maintenant, nous pouvons compiler et installer Rancid :<\/p>\n<pre class=\"code\">#cd \/usr\/local\/src\/rancid-2.3.1#.\/configure --prefix=\/opt\/rancid \r\n\r\n#checkinstall<\/pre>\n<p>&nbsp;<\/p>\n<p>Ceci va installer Rancid dans le dossier \/opt\/rancid. Si vous n\u2019avez pas la commande checkinstall sur votre syst\u00e8me ou si vous d\u00e9sirez des informations sur cet outil, un article <a href=\"http:\/\/www.debian-administration.org\/articles\/147\" title=\"checkinstall\" target=\"_blank\">ICI<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>Maintenant, nous pouvons d\u00e9buter le param\u00e9trage de Rancid. Nous allons configurer le fichier \/opt\/rancid\/etc\/rancid.conf pour cr\u00e9er des groupes d\u2019\u00e9quipements. Au moins un groupe doit \u00eatre configur\u00e9.<\/p>\n<p>L\u2019ajout des lignes ci-dessous cr\u00e9e un groupe appel\u00e9 \u00ab\u00a0Mes_confs_a_moi\u00a0\u00bb o\u00f9 tous les configurations des \u00e9quipements sont stock\u00e9es:<\/p>\n<p>LIST_OF_GROUPS=\u00a0\u00bbMes_confs_a_moi\u00a0\u00bb<\/p>\n<p>Il peut \u00eatre utile de cr\u00e9er plusieurs groupes si vous avez une grand nombre d\u2019\u00e9quipements et vous voulez les s\u00e9parer par localisation g\u00e9ographique par exemple, pour am\u00e9liorer la lisibilit\u00e9.<\/p>\n<p>LIST_OF_GROUPS=\u00a0\u00bbBrest Toulon Trifouilly-les-oies\u00a0\u00bb<\/p>\n<p>Les noms de groupe doivent \u00eatre s\u00e9par\u00e9s par un espace.<\/p>\n<p>Il est n\u00e9cessaire de configurer un fichier appel\u00e9 \u201c.cloginrc\u201d contenant les mot de passe n\u00e9cessaire \u00e0 acc\u00e9der aux composants r\u00e9seaux.<\/p>\n<p>Pour le cr\u00e9er, il faut renommer le fichier \u201ccloginrc.sample\u201d en \u201c.cloginrc\u201d.<\/p>\n<pre class=\"code\">#cp \/opt\/rancid\/share\/rancid\/cloginrc.sample \/opt\/rancid\/.cloginrc<\/pre>\n<p>Ensuite, nous \u00e9ditons le nouveau fichier \u201c.cloginrc\u201d o\u00f9 on peut trouver des exemples de syntaxe bas\u00e9es sur le type d\u2019\u00e9quipement (Cisco, Juniper, etc&#8230;) et de connexion (telnet, ssh, &#8230;)<\/p>\n<p>Dans notre exemple, nous allons utiliser ssh pour acc\u00e9der \u00e0 un switch Cisco ayant une adresse IP de 10.156.1.1 (et donc la connexion est control\u00e9 par notre serveur Tacacs+)<\/p>\n<p>Ouvrez \/opt\/rancid\/.cloginrc :<\/p>\n<p>add user 10.156.1.1 lulu (l&rsquo;utilisateur lulu, op\u00e9rateur que j&rsquo;avais cr\u00e9e dans mon tac_plus.conf)<\/p>\n<p>add password 10.156.1.1 motdepasse_de_lulu  motdepasse_mode_enable<\/p>\n<p>&nbsp;<\/p>\n<p>Ajouter un # au d\u00e9but de chaque ligne \u00e0 l\u2019exception bien entendu des lignes qui param\u00e8trent vos connexions.<\/p>\n<p>Soyez EXTR\u00caMEMENT attentif avec les permissions du fichier .cloginrc parce que les mots de passe inclus dans ce fichier ne sont pas encrypt\u00e9s.<\/p>\n<p>Donc le seul moyen de prot\u00e9ger ces mots de passe critiques est de restreindre les droits d\u2019acc\u00e8s au fichier.<\/p>\n<p>Pour le faire, changez les droits d\u2019acc\u00e8s \u00e0 600, ce qui veut dire que le propri\u00e9taire du fichier a les permissions lecture et \u00e9criture tandis que les autres utilisateurs n\u2019ont aucune permission du tout.<\/p>\n<p>Puis, la propri\u00e9t\u00e9 du dossier \/opt\/rancid ainsi que tous les fichiers et dossiers qu\u2019il inclus est transf\u00e9r\u00e9 \u00e0 l\u2019utilisateur rancid.<\/p>\n<pre class=\"code\">   #chmod 600 \/opt\/rancid\/.cloginrc\r\n\r\n   #chown -R rancid:rancid \/opt\/rancid\r\n\r\n   #chmod 770 \/opt\/rancid<\/pre>\n<p>&nbsp;<\/p>\n<p>Cr\u00e9ation de l\u2019architecture <acronym title=\"Concurrent Versions System\"><a href=\"http:\/\/fr.wikipedia.org\/wiki\/Concurrent_versions_system\" title=\"CVS\" target=\"_blank\">CVS<\/a> :<br \/>\n<\/acronym><\/p>\n<p><acronym title=\"Concurrent Versions System\"><\/acronym> Connectez-vous en temps que rancid:<\/p>\n<pre class=\"code\">   #su rancid\r\n\r\n   rancid@linux#\/opt\/rancid\/bin\/rancid-cvs<\/pre>\n<p>Ajouter des \u00e9quipements aux groupes:<\/p>\n<pre class=\"code\">   \/opt\/rancid\/var\/rancid\/\"group_name\"\/router.db<\/pre>\n<pre class=\"code\">   La syntaxe est la suivante:<\/pre>\n<pre class=\"code\">   \"ip_address or FQDN\":\"device_type\":\"status\"<\/pre>\n<pre class=\"code\">   10.156.1.1:cisco:up\r\n\r\n   nom_dns:cisco:up<\/pre>\n<p>Un script permet de v\u00e9rifier les param\u00e9trages de connexion qui sont pr\u00e9sents dans le fichier .cloginrc:<\/p>\n<p>rancid@linux:~\/bin$ \/opt\/rancid\/bin\/clogin 10.156.1.1<\/p>\n<p>10.156.1.1 spawn telnet 10.156.1.1 Trying 10.156.1.1&#8230; Connected to 10.156.1.1. Escape character is \u2018^]\u2019.<\/p>\n<p>User Access Verification<\/p>\n<p>Password: Router&gt;enable Password: Router#<\/p>\n<p>D\u00e9marrez rancid:<\/p>\n<p>rancid@linux$\/opt\/rancid\/bin\/rancid-run<\/p>\n<p>Vous pouvez v\u00e9rifier les journaux (logs) dans le r\u00e9pertoire \/opt\/rancid\/var\/rancid\/logs\/ .<\/p>\n<p>Nous devons maintenant installer la plate-forme pour voir les configurations avec un navigateur web.<\/p>\n<h5>CVSWEB<\/h5>\n<p class=\"level5\"> Nous devons ajouter une ligne dans le fichier \/etc\/cvsweb\/cvsweb.conf avec l\u2019utilisateur root pour cr\u00e9er le nouveau d\u00e9p\u00f4t (repository) <acronym title=\"Concurrent Versions System\">CVS<\/acronym>.<\/p>\n<p>Rechercher la ligne commen\u00e7ant par \u201c@CVSrepositories\u201d et ajouter la ligne en gras ci-dessous:<\/p>\n<pre class=\"code\">   @CVSrepositories = (\r\n\r\n   #'local' =&gt; ['Local Repository', '\/var\/lib\/cvs'],\r\n\r\n     <strong> 'rancid' =&gt; ['rancid', '\/opt\/rancid\/var\/CVS\/'],<\/strong>\r\n\r\n   #'freeebsd' =&gt; ['FreeBSD', '\/var\/ncvs'],\r\n\r\n   #'openbsd' =&gt; ['OpenBSD', '\/var\/ncvs'],\r\n\r\n   #'netbsd' =&gt; ['NetBSD', '\/var\/ncvs'],\r\n\r\n   #'ruby' =&gt; ['Ruby', '\/var\/anoncvs\/ruby'],\r\n\r\n   );<\/pre>\n<p>Si le dossier contenant les ic\u00f4nes csvweb et les fichiers css sont pas dans le dossier \/var\/www, il est n\u00e9cessaire d\u2019ajouter un lien symbolique:<\/p>\n<pre class=\"code\"> ln -s \/usr\/share\/cvsweb \/var\/www\/cvsweb<\/pre>\n<p>Nous pouvons tester l\u2019interface cvsweb avec un navigateur internet :<\/p>\n<pre class=\"code\">   http:\/\/127.0.0.1\/cgi-bin\/cvsweb<\/pre>\n<p>Optionnellement, vous pouvez configurer Rancid pour vous envoyer un mail quand une configuration a \u00e9t\u00e9 chang\u00e9e apr\u00e8s le lancement du script rancid-run.<\/p>\n<p>L\u2019outil Rancid est param\u00e8tr\u00e9 pour envoyer des courriels \u00e0 deux destinataires par groupe.<\/p>\n<pre class=\"code\">   rancid-\"nom_du_groupe\"\r\n\r\n   rancid-admin-\"nom_du_groupe\"<\/pre>\n<p>Le premier destinataire ci-dessus va recevoir un rapport apr\u00e8s un changement de configuration, le deuxi\u00e8me est envoy\u00e9 quand il y a des messsages d\u2019erreur.<\/p>\n<p>Pour rappel le ou les groupes sont configur\u00e9s dans le fichier \/opt\/rancid\/etc\/rancid.conf.<\/p>\n<p>Par exemple, si vous avez un groupe appel\u00e9 Mes_confs_a_moi, les mails seront envoy\u00e9s aux adresses rancid-Mes_confs_a_moi et rancid-admin-Mes_confs_a_moi.<\/p>\n<p>La derni\u00e8re chose \u00e0 faire est de cr\u00e9er des aliases pour vos destinataires. Ouvrez le fichier \/etc\/aliases:<\/p>\n<pre class=\"code\">   rancid-mes_confs_a_moi<\/pre>\n<pre class=\"code\">   votre_email@chezvous.com\r\n\r\n   rancid-admin-mes_confs_a_moi<\/pre>\n<pre class=\"code\">   votre_email@chezvous.com<\/pre>\n<p>Nous avons utilis\u00e9s ici notre groupe exemple appel\u00e9 Mes_confs_a_moi.<\/p>\n<p>Pour terminer, initialiser la base de donn\u00e9es d\u2019alias:<\/p>\n<pre class=\"code\">   #newaliases<\/pre>\n<p>Nous avons besoin de cr\u00e9er un cron job pour lancer rancid-run r\u00e9guli\u00e8rement.<\/p>\n<pre class=\"code\">   crontab -e -u rancid<\/pre>\n<pre class=\"code\">   # Veuillez, svp, lancer le script rancid-run tous les jours \u00e0 00:30\r\n\r\n   30 00 * * * \/opt\/rancid\/bin\/rancid-run<\/pre>\n<p>La commande crontab va mettre \u00e0 jour le fichier \/var\/spool\/cron\/crontabs\/rancid.<\/p>\n<p>La tr\u00e8s utile commande \u201cfind\u201d peut \u00eatre ajout\u00e9e au crontab pour supprimer les anciens logs.<\/p>\n<p>La commande suivante supprime les fichiers de plus de 30 jours dans le dossier \/opt\/rancid\/var\/logs\/:<\/p>\n<pre class=\"code\">   # supprime les anciens logs tous les premiers jours de chaque mois \u00e0 00:15\r\n\r\n   15 00 1 * * find \/opt\/rancid\/var\/logs -type f -mtime +30 -exec rm {} \\;<\/pre>\n<pre class=\"code\"><\/pre>\n<p>Et voila, d\u00e9sormais vous retrouverez l&rsquo;int\u00e9gralit\u00e9 de vos configurations pr\u00e9f\u00e9r\u00e9es avec un versionning vous permettant de r\u00e9parer vos erreurs que heureusement, nous faisons tous :-p<\/p>\n<p><a href=\"http:\/\/www.openmaniak.com\/fr\/rancid_tutorial.php\" title=\"Tuto Rancid\" target=\"_blank\">SOURCE<\/a><\/p>\n<p>Bon courage \ud83d\ude42<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"code\"><\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je discutais derni\u00e8rement avec Pascal_1, un fid\u00e8le lecteur du blog (merci \ud83d\ude00 ) , et utilisateur d&rsquo;un Cisco Pix (donc quelqu&rsquo;un de bien \ud83d\ude42 ). Donc ce petit billet lui est sp\u00e9cialement d\u00e9dicac\u00e9 mais je ne doute pas qu&rsquo;ils servent &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/07\/29\/sauvegarde-et-versionning-automatique-des-confs-cisco-avec-rancid\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[220,45,44,46],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/129"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":0,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}