Sauvegarde

Introduction

Pour assurer une continuité de service du réseau et une gestion dynamique des éléments réseau, il semble indispensable de conserver les configurations courantes des différents éléments. Une sauvegarde périodique des configurations permet de garder une trace des mises à jour. Cette page présente la mise en place d’un système automatique d’archivage pour mes configurations Cisco.

Le système est composé d’un serveur FTP qui récupère périodiquement en upload les configurations Cisco. Un script présent sur le serveur FTP est chargé de récupérer ces configurations et de les protéger. Cette tâche est planifiée par le biais de "crontab".



Configuration Cisco

Tout d’abord, il faut configurer les équipements Cisco pour qu’ils puissent envoyer périodiquement sa configuration courante (« running-config ») sur le serveur FTP. Pour cela on utilise la commande "kron" pour planifier des commandes. Pour en savoir plus, une documentation complète est accessible, sur le site de Cisco, le guide "Command Scheduler".

Il faut préparer l’accès au serveur FTP.

TEST#conf t
TEST(config)#ip ftp username anonymous
TEST(config)#ip ftp password ***
TEST(config)#ip ftp source-interface Vlan1
TEST(config)#no ip ftp passive
TEST(config)#file prompt quiet
TEST(config)#^Z

Pour afficher les sorties debug sur le terminal courant, on utilise la commande "terminal monitor" et on spécifie le débogage sur le service FTP.

TEST#terminal monitor
TEST#debug ip ftp
TEST#copy system:running-config ftp://157.159.x.x/TEST.cfg
Writing TEST.cfg !
3697 bytes copied in 0.668 secs (5534 bytes/sec)
TEST#no debug ip ftp

Ensuite, on met en place une tâche planifiée qui enverra la configuration au serveur FTP, tous les premiers du mois à 00:30.

TEST#conf t
TEST(config)#kron policy-list backup
TEST(config-kron-policy)#cli copy system:running-config ftp://157.159.x.x
TEST(config-kron-policy)#exit
TEST(config)#kron occurrence test at 00:30 1 recurring
TEST(config-kron-occurrence)#policy-list backup
TEST(config-kron-occurrence)#exit
TEST(config)#clock timezone CEST 2
TEST(config)#ntp server 157.159.x.y
TEST(config)#^Z

TEST#show kron schedule
Kron Occurrence Schedule
test inactive, will run again in 4 days 05:15:27 at 0 :30 on day 1 of the month


Configuration du serveur de sauvegarde

Pour le service FTP, j’utilise "proftpd". Le fichier de configuration se trouve dans le répertoire /etc/proftpd.conf. Le répertoire "uploads" est accessible en écriture uniquement (sans possibilité d’écraser un fichier existant) depuis le réseau dédié à l’administration des éléments réseau.

[root@PE1750 Documents]# vi /etc/proftpd.conf
<Anonymous ~ftp>
 <Directory uploads/*>
  AllowOverwrite no

  <Limit READ>
   DenyAll
  </Limit>

  <Limit STOR>
   Order Allow,Deny
   Allow from 157.159.z.0/24
   Deny from all
  </Limit>
 </Directory>
</Anonymous>

On configure le lancement de proFTPd au démarrage de la machine et on lance proFTPd depuis la commande "service".

[root@PE1750 Documents]# chkconfig proftpd on
[root@PE1750 Documents]# chkconfig --list proftpd
proftpd 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt
[root@PE1750 Documents]# service proftpd start

Pour des raisons obscures, le service FTP fonctionne mal lors de l’authentification alors que si on lance le démon directement par la commande "proftpd -n -d5", cela ne pose pas de problème. Pourtant le script lancé par "service" (/etc/init.d/proftpd) semble correct, ainsi que les droits d’accès à ce script… La solution que j’ai trouvée est de recréer un nouveau fichier proftpd et de copier le contenu du script.

[root@PE1750 init.d]# mv proftpd proftpd.old
[root@PE1750 init.d]# touch proftpd
[root@PE1750 init.d]# cat proftpd.old > proftpd
[root@PE1750 init.d]# chmod +x proftpd
[root@PE1750 init.d]# ./proftpd restart

Enfin, il faut configurer le firewall. La commande "system-config-firewall" permet de le désactiver rapidement pour les tests.

[root@PE1750 Documents]# iptables -v -L --line-numbers
[root@PE1750 Documents]# iptables -v -I RH-Firewall-1-INPUT 10 -m state --state NEW -p tcp --dport ftp -j ACCEPT
ACCEPT tcp opt -- in * out * 0.0.0.0/0 -> 0.0.0.0/0 state NEW tcp dpt:21

La configuration du firewall est conservée dans le fichier /etc/sysconfig/iptables. L’écriture de la nouvelle règle peut –être effectuée par la commande "system-config-firewall".

[root@PE1750 Documents]# system-config-firewall
[root@PE1750 Documents]# cat /etc/sysconfig/iptables
  ...
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
  ...


Configuration de la tâche

Enfin, tous les jours à 05:00 du matin (CEST), je lance mon script pour vérifier les configurations déposées en upload et tous les premiers du mois à 03:00 du matin, je fais une sauvegarde complète des configurations (envoyées automatiquement par tous les routeurs).

[root@PE1750 Documents]# crontab -e
crontab: installing new crontab
[root@PE1750 Documents]# crontab -l
0 5 * * * /root/Documents/backup.sh start-new
0 3 1 * * /root/Documents/backup.sh start-all 2>>/root/Documents/LOG/error.log

Pour être sûr d’avoir une bonne synchronisation entre les équipements Cisco et le serveur, on met à jour la date et l’heure du serveur via NTP. La commande "hwclock" permet régler l’horloge physique de la machine.

[root@PE1750 Documents]# ntpdate ntp1.int-evry.fr
[root@PE1750 Documents]# hwclock --systohc --utc
[root@PE1750 Documents]# hwclock -r
jeu 26 jun 2008 18:29:11 CEST -0.597611 secondes

Le script "backup.sh" propose plusieurs paramètres. Le paramètre "install" permet d’installer rapidement les éléments nécessaires au fonctionnement du script. Le paramètre "start-new" permet de récupérer les configurations du dossier "uploads" et de les crypter. Le paramètre "start-all" effectue les mêmes actions que celles lancées par "start-new" après avoir vérifié que toutes les configurations sont présentes. Dans le cas contraire, un fichier de log donne les éléments manquants ou supplémentaires.

[root@PE1750 Documents]# ./backup.sh
Usage: ./backup.sh {install|start-new|start-all|read|clean}

La fonction "read" permet de lire les dossiers de sauvegarde chiffrés. Elle crée un dossier temporaire pour permettre à l’administrateur de vérifier les configurations. Enfin la fonction "clean" permet de nettoyer les configurations non chiffrées ; elle efface le dossier temporaire.

[root@PE1750 Documents]# ./backup.sh read Backup.2008-06-27-03h00/
= Decrypt key and vector file
Enter pass phrase for ./private.pem:
= Decrypt expected files
[root@PE1750 Documents]# cd TEMP/ Backup.2008-06-27-03h00/
[root@PE1750 TEMP]# ls
.key pe1-confg test-confg

Il est possible d’ajouter, dans le répertoire courant, un fichier de configuration "liste.conf" utilisé par la commande paramétrée par "start-all" pour lister les fichiers de configuration requis pour une sauvegarde complète.

[root@PE1750 Documents]#cat liste.conf
pe1-confg
pe2-confg
pe3-confg
sw1-confg
sw2-confg
sw3-confg

Le fichier backup.sh est accessible ici. J’explique ici la protection utilisée par le script pour rendre confidentiel les configurations Cisco sauvegardées. L’outil de cryptographie utilisé est openSSL.

On génère une clé et un vecteur d’initialisation forts, à partir du fichier /dev/random. Les fichiers de configuration sont cryptés suivant un encodage AES-256-CBC. AES-256 est un algorithme de chiffrement par bloc symétrique dont la taille du bloc est de 128 bits et la longueur de clé est de 256 bits. Les blocs issus du message à coder sont traités suivant le mode CBC ("Cipher Block Chaining"). Dans ce mode, on applique sur chaque bloc un OU exclusif avec le chiffrement du bloc précédent avant qu’il soit lui-même chiffré.

La clé et le vecteur d’initialisation sont stockés dans un fichier chiffré par une clé publique RSA (stockée dans le fichier public.pem). Ainsi le seul moyen de lire les fichiers de configuration est de déchiffrer le fichier qui stocke la clé et le vecteur d’initialisation, associés à la sauvegarde. Pour cela, la clé privée est contenue dans le fichier private.pem et protégée par un mot de passe et l’algorithme AES-256 (la clé et le vecteur d’initialisation sont dérivés depuis le mot de passe que seul l’administrateur possède).

mis à jour le 20/07/2009

Raccourcis