Sauvegardes automatiques des équipements réseau et de leur stockage dans le système de contrôle de version

Clarification: la solution est configurée pour D-Link DFL, cisco 29xx et WatchGuard Firebox, mais convient à tout ce qui peut être sauvegardé lors de la connexion via ssh et / ou les télécharger sur un planning / événement sur le serveur ftp / tftp.

Tout a commencé avec le fait que mon ami programmeur a demandé: "Pourquoi ne stockez-vous pas les configurations réseau dans le système de contrôle de version?" Et la vérité - je pensais - pourquoi? La plupart des fichiers de configuration peuvent être téléchargés au format texte (enfin, ce sont des binaires, bien sûr, mais des informations lisibles sont ouvertes et affichées dans un éditeur de texte).

Sur le réseau, nous avons environ 30 DFL différents D-Link, une douzaine de Cisco 29xx et un couple WatchGuard Firebox. Pour chaque appareil, les employés de niveau administrateur de la branche informatique, où il se trouve, ainsi que l'informatique du siège social, ont un accès de niveau administrateur. Cela implique des problèmes comme «Je n'ai pas fait de sauvegarde pendant six mois et j'ai tout cassé, avez-vous notre sauvegarde?» Et «l'équipement a brûlé lors de la dernière sauvegarde a fait l'administrateur précédent, je ne sais pas où, configurez-nous tel qu'il était». Et si cisco réinitialise déjà automatiquement running-config sur ftp à chaque fois qu'il est enregistré, ce n'est pas le cas avec D-Link. Et le système de contrôle de version aiderait à détecter des problèmes comme "Je ne me souviens pas de quoi et quand je l'ai changé, mais nous avons une chose qui est utilisée une fois par mois s'est cassée". Le règlement de sauvegarde ne vous sauve pas du facteur humain et ne sauvegarde pas pour vous, il vaut donc mieux prévenir que démêler.

J'avoue honnêtement, avant de m'asseoir pour écrire un post, je ne connaissais pas les rances et les oxydes. Mais ils ne savent pas tous les deux ce dont j'ai besoin. Le premier est axé sur Cisco et ne fonctionne pas très bien avec n'importe quel exotique, le second n'a pas d'autorisation utilisateur (bien que cela puisse être fait avec de simples manipulations avec le serveur Web), et, plus important encore, les deux nécessitent un identifiant et un mot de passe pour le système redondant. Tous les LDF D-link prennent en charge la connexion ssh. Cisco fusionne les sauvegardes lui-même et ne nécessite généralement pas de connexion à celui-ci. En conséquence, pourquoi garder les mots de passe changeant périodiquement, d'ailleurs, si vous pouvez vous connecter en utilisant la clé.

Il a été décidé de faire quelque chose qui me convient par moi-même.

En fait, les sauvegardes automatiques demandent longtemps. Mais le système de contrôle de version - il était frais.

Donc, la tâche: rassembler toutes les configurations importantes de l'équipement réseau en un seul endroit avec la prise en charge des fichiers de version, les mettre à jour régulièrement automatiquement là-bas, pour permettre aux administrateurs d'un autre fuseau horaire de les télécharger de manière simple, sans m'appeler à 3 heures du matin. Tout cela, bien sûr, est gratuit.

Pour tous les LDF, le fichier de configuration est appelé de la même manière, il était donc nécessaire de les nommer clairement lors de la copie. Je ne voulais pas non plus reconfigurer le système de remplissage de configuration en cours en ftp avec cisco.

Tout d'abord, configurez un système de contrôle de version


J'ai pris svn, tk. svn est le seul populaire qui stocke les binaires diff, pas tous les fichiers de l'historique. Non pas que c'était important sur de petits volumes, mais sympa. En général, je prends en compte la petite quantité de fichiers de configuration, quel système de contrôle de version prendre - aucune différence.

Le serveur Visual SVN est installé à partir du site officiel en utilisant la méthode on-the-go-ready. Je l'ai mis sur un serveur sous Windows, pour qu'il soit plus facile à administrer par des collègues (créer des utilisateurs, distribuer des droits). Ensuite, un référentiel est créé, les sections nécessaires y sont créées et le seul utilisateur disposant de tous les droits sur le référentiel est créé (pour l'instant). Sous Windows, les actions sont terminées.

Les sauvegardes automatiques sont effectuées par mes soins à partir d'une seule machine Linux (sous Debian).

D'abord, nous définissons svn afin d'avoir un client:

sudo apt-get install svn 

Maintenant, une copie du projet est créée à la main (créée dans le répertoire courant):

 svn checkout https://servername.mydomain.ru/svn/DFL_BACKUPS/ DFL_BACKUPS --username go 

Maintenant, j'ai trois sections dans le référentiel:

  • Current_backup, où les configurations DFL de D-Link sont stockées et remplacées.
  • Old_versions, où les configurations avec une date assignée sont stockées pour faciliter le téléchargement par les administrateurs de branche.
  • Cisco, où les configurations Cisco et WatchGuard Firebox sont stockées (enfin, c'est arrivé).

Commençons par les sauvegardes automatiques DFL et la configuration de DFL lui-même


La connexion se poursuit ssh. Afin de ne pas briller les mots de passe sous forme ouverte, une paire de clés public-privé est utilisée. Private est stocké sur le serveur dans / usr / dfl_scripts / sshkeys / dfl_key.

Nous générons une paire de clés publiques-privées sur le serveur de sauvegarde automatique:

 ssh-keygen –t rsa 

celui ouvert est versé dans tous les LDF et la règle d'accès ssh est faite:





Eh bien, la gestion à distance correspondante est autorisée. Le port par défaut peut être changé, par exemple, en 2222, bien que l'accès ne soit possible qu'à partir de certaines adresses.



Le fichier avec la configuration actuelle de D-Link DFL se trouve à la racine et s'appelle config.bak, vous pouvez simplement le copier vous-même en utilisant scp.

Donc, le script (j'ai coupé la liste des branches pour qu'il n'y ait pas de feuille):

 #!/bin/bash rm /usr/dfl_scripts/dflbackup/* #    dfls=( "amur:10.28.10.254" #  "arhangelsk:10.29.10.254" "buratia:10.3.10.254" "volgograd:10.34.10.254" "voronezh:10.36.10.254" "irkutsk_210:10.38.20.253" "irkutsk_260:10.38.20.254" "yaroslavl:10.76.10.254" ) rm /usr/dfl_scripts/log.txt # - for dfl in "${dfls[@]}" ; do #   - filial="${dfl%%:*}" #delete the longest substr :* search from the end of string ip_addr="${dfl##*:}" #delete the longest substr *: search from the head of string echo $filial $ip_addr >> /usr/dfl_scripts/log.txt #     scp -P 2222 -i /usr/dfl_scripts/sshkeys/dfl_key admin@$ip_addr:config.bak /usr/dfl_scripts/dflbackup/$filial.bak 2>>/usr/dfl_scripts/log.txt #   ,      done FILES=$(ls /usr/dfl_scripts/dflbackup) #     now=$(date +"%d_%m_%Y") #     for f in $FILES ; do #      (    ) cp /usr/dfl_scripts/dflbackup/$f /usr/dfl_scripts/DFL_BACKUPS/current_backup/$f #       cp /usr/dfl_scripts/dflbackup/$f /usr/dfl_scripts/DFL_BACKUPS/old_versions/${f%.bak}_$now.bak #        done cd /usr/dfl_scripts/DFL_BACKUPS #   svn  svn add * --force -q >> /usr/dfl_scripts/log.txt #  .    . svn commit -m "added backups $now" >> /usr/dfl_scripts/log.txt #     /usr/bin/mail it@mydomain.ru < /usr/dfl_scripts/log.txt -s "   DFL" #    -   

Le script est rempli de cron et s'exécute à 8h30 tous les jours. Voici à quoi ressemble crontab:
 30 08 * * * /usr/dfl_scripts/autobackup.sh 30 06 * * * /usr/dfl_scripts/ciscobackup.sh 00 06 * * 1 /usr/dfl_scripts/fireboxbackup.sh 

Maintenant sur cisco


Sur les appareils eux-mêmes, quelque chose comme ceci est configuré:

 archive log config logging enable logging size 500 hidekeys path ftp://ftp.mydomain.ru/in/autolog/$H-$T write-memory ip ftp username user ip ftp password mypass ip scp server enable 

Par conséquent, la commande write-memory réinitialise la configuration actuelle sur ftp. Mon ftp est sur un serveur différent d'un tas de sauvegardes automatiques. Il existe 2 façons: faire une copie du référentiel sur ce serveur et y ajouter des configurations ou copier des configurations sur un serveur voisin. Fondamentalement, toute la différence est de savoir s'il faut faire du cp ou du scp.

Dans le répertoire où tombent les configs avec cisco, j'ai mis incron pour surveiller l'apparence des fichiers. Par l'apparence du fichier, je le renomme comme il se doit et le copie sur le serveur collecteur de sauvegarde automatique dans un répertoire temporaire. Par écrêtage, les fichiers du répertoire temporaire sont téléchargés vers svn. Au total, j'ai dans le système de contrôle de version une configuration à jour pour un certain temps une fois par jour. À mon avis, cela suffit, mais le système peut être modifié sans aucun problème pour toute liste de souhaits.

La configuration incrontab ressemble à ceci:

 /var/ftp/cisco/in/autolog/ IN_CREATE /usr/ftp_scripts/incron_cisco.sh $# $% 

Le script lui-même:

 #!/bin/bash if [[ $2 == "IN_MOVED_TO" || $2 == "IN_CREATE" ]]; then sleep 10 filial="${1%%-*}" #delete the longest substr -* search from the end of string.        scp -P 2222 -i /usr/ftp_scripts/ssh_key_private /var/ftp/cisco/in/autolog/$1 go@10.10.10.220:/usr/dfl_scripts/ciscobackup/$filial.conf fi 

Le script planifié est lancé sur le serveur de sauvegarde automatique selon le calendrier:

 #!/bin/bash logfile=/usr/dfl_scripts/log_cisco.txt rm $logfile now=$(date +"%d_%m_%Y") cd /usr/dfl_scripts/DFL_BACKUPS cp /usr/dfl_scripts/ciscobackup/* /usr/dfl_scripts/DFL_BACKUPS/cisco/ svn add * --force –q >> $logfile svn commit -m "added cisco backups $now" >> $logfile /usr/bin/mail it@mydomain.ru < $logfile -s "   cisco  watchguard" 

Comme vous pouvez le voir, nous parlons ici également de WatchGuard Firebox. J'étais franchement paresseux pour leur faire un répertoire séparé. Les sauvegardes tombent donc sur ftp au même endroit que Cisco. WatchGuard sauvegarde dans un script distinct une demi-heure plus tôt et généralement une fois par semaine. Veuillez noter que la syntaxe a changé depuis la version 12 du firmware. Auparavant, cela pouvait être fait avec une seule image de sauvegarde vers la commande ftp, et maintenant l'exportation a été ajoutée. Sur celui-ci, je n'ai pas pu configurer la connexion via ssh par clé, donc les mots de passe sont utilisés.

 #!/bin/bash watchguards=( "10.10.10.20:password1" "10.97.10.20:password2" ) now=$(date +"%Y_%m_%d") for wg in "${watchguards[@]}" ; do ip_addr="${wg%%:*}" pass="${wg##*:}" sshpass -p $pass ssh backupuser@$ip_addr -p 4118 << ENDME backup image WG_$now.fxi export image WG_$now.fxi 123456qQ to ftp://user:mypass@ftp.mydomain.ru/in/autolog/WG_$ip_addr-$now.fxi ENDME Done 

Les binaires WatchGuard sont exportés uniquement cryptés, donc avec une apparence de texte et des différences, cela ne fonctionnera pas très bien. Faites attention à la clé de cryptage: majuscules et lettres et minuscules obligatoires, au moins 8 caractères. En cas de non-conformité, la commande n'est tout simplement pas exécutée, il n'est pas spécifiquement indiqué où se trouve l'erreur.

Donc, tout a été fait. Nous plaçons maintenant le client sur notre ordinateur de travail sous Windows. Vous pouvez simplement afficher les fichiers et les différences à partir du navigateur, mais télécharger la version à partir d'une révision spécifique uniquement à partir du client. Nous avons mis TorToSiteSVN sur le site officiel .

Sur le serveur, créez un utilisateur avec les droits nécessaires (lecture) pour les branches.

Ensuite, vous devez entrer le client via le menu contextuel dans n'importe quel fichier et vous connecter au référentiel. Il n'est pas nécessaire de créer vous-même une copie du référentiel si vous ne prévoyez pas de modifier les fichiers. Eh bien, soyez prudent avec cela, vous devrez travailler avec la copie via le système de contrôle de version, et pas seulement comme avec un morceau du système de fichiers.





Pour faire des différences sur des fichiers tex non standard, vous devez vous assurer que SVN considère ces fichiers non pas binaires, mais du texte. Comme ça:

 svn propset svn:mime-type text/plain current_backup/*.bak 

Exécutez cette commande, par exemple, sous Linux, puis effectuez la validation.

Eh bien, voici les changements, regardez à travers les yeux. Nous constatons que les règles du pare-feu ont changé:





Il est plus pratique de regarder dans un navigateur.



Si quelque chose s'est produit, l'administrateur peut télécharger la sauvegarde souhaitée sans gestes inutiles à la date souhaitée.



Bien que, généralement, la dernière version soit suffisante.

D'une certaine manière, l'invention du vélo est née. Mais il travaille sur DFL-DFL depuis près d'un an maintenant, exactement comme j'ai besoin, et parfois ça aide beaucoup.

J'espère que quelqu'un vous sera utile.

Références:

À propos de rance
Manuel CLI de WatchGuard Firebox
Pro oxydé

Source: https://habr.com/ru/post/fr480386/


All Articles