WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:backup_cfg_cisco

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
wiki:services:backup_cfg_cisco [2018/07/08 18:28]
no_pseudo
wiki:services:backup_cfg_cisco [2020/06/27 18:16] (Version actuelle)
Ligne 17: Ligne 17:
  
 <sup>3</sup> En plus maintenant que les commutateurs utilisent les identifiants LDAP pour SSH, utiliser le mot de passe du compte SSH local risque de moins bien marcher. <sup>3</sup> En plus maintenant que les commutateurs utilisent les identifiants LDAP pour SSH, utiliser le mot de passe du compte SSH local risque de moins bien marcher.
 +
 +<WRAP center round info 60%>
 +Evidemment il existe tout un tas de logiciel pour faire de la sauvegarde de conf (avec différents supports de matériel, de fonctionnalités), comme par exemple [[https://github.com/ytti/oxidized|Oxidized]], mais ils demanderont probablement la création d'un user pour pouvoir récupérer la conf notamment
 +</WRAP>
  
 ===== Ce qu'on voulait faire ===== ===== Ce qu'on voulait faire =====
Ligne 25: Ligne 29:
 Et puis on en a reparlé il y a pas longtemps et je me suis chauffé pour lire un peu la doc Cisco pour savoir comment s'y prendre pour implémenter tout le bordel. Et là <del>c'est le drame</del> je découvre qu'il y a déjà quelque chose prévu par Cisco pour faire des sauvegarde de configuration de manière très simple et pire encore c'était presque déjà configuré sur le commutateur du local (il manquait la partie la plus importante de la configuration). Et puis on en a reparlé il y a pas longtemps et je me suis chauffé pour lire un peu la doc Cisco pour savoir comment s'y prendre pour implémenter tout le bordel. Et là <del>c'est le drame</del> je découvre qu'il y a déjà quelque chose prévu par Cisco pour faire des sauvegarde de configuration de manière très simple et pire encore c'était presque déjà configuré sur le commutateur du local (il manquait la partie la plus importante de la configuration).
  
-===== Ce qu'il faut faire ===== +===== Ce qui est en place =====
- +
-<WRAP center round important 60%> +
-Actuellement ce n'est qu'un proof-of-concept déployé en dev et sur le commutateur du local. Voir la partie « Démo ». +
-</WRAP>+
  
 En fait il est possible de définir des « archives de configuration » sur les commutateurs. Ainsi pour définir une archive on doit donner au commutateur un chemin où stocker l'archive (ça peut être un chemin local ou sur le réseau) ainsi qu'une condition pour lancer le processus de création d'archive (un intervalle de temps ou une action). En fait il est possible de définir des « archives de configuration » sur les commutateurs. Ainsi pour définir une archive on doit donner au commutateur un chemin où stocker l'archive (ça peut être un chemin local ou sur le réseau) ainsi qu'une condition pour lancer le processus de création d'archive (un intervalle de temps ou une action).
Ligne 38: Ligne 38:
 Ici j'ai choisi d'utiliser SCP pour 2 raisons principales: Ici j'ai choisi d'utiliser SCP pour 2 raisons principales:
 1) Éviter d'envoyer des configurations de commutateur en clair sur le réseau. (Alors oui, on va me dire « c'est sur un réseau privé » mais c'est pas une raison). 1) Éviter d'envoyer des configurations de commutateur en clair sur le réseau. (Alors oui, on va me dire « c'est sur un réseau privé » mais c'est pas une raison).
-2) Vu que SCP est basé sur SSH, on a pas grand chose à installer sur notre serveur: //openssh-server////openssh-client// et //rssh// (cf infra).+ 
 +2) Vu que SCP est basé sur SSH, on a pas grand chose à installer sur notre serveur: //openssh-server// et //openssh-client//(cf infra).
  
 ==== Côté commutateur ==== ==== Côté commutateur ====
Ligne 48: Ligne 49:
  
 <code> <code>
-sw(archive-config)# path scp://utilisateur:motdepassesuperduratrouver@192.168.103.178/archives/$h_$t+sw(archive-config)# path scp://utilisateur:motdepassesuperduratrouver@192.168.102.148/var/archives/$h_$t
 </code> </code>
 C.f. : Note sur le nom du fichier <sup>1</sup> C.f. : Note sur le nom du fichier <sup>1</sup>
Ligne 56: Ligne 57:
 </code> </code>
 <code> <code>
-sw(archive-config)# time-period 1440+sw(archive-config)# time-period 20160
 </code> </code>
-On va lancer le processus d'archivage lorsqu'on fait un « write mem » ou toutes les 1440 minutes (toutes les 24h).+On va lancer le processus d'archivage lorsqu'on fait un « write mem » ou toutes les 20160 minutes (toutes les 2 semaines).
  
 <sup>1</sup>** Note sur le nom du fichier: « $h_$t » ** <sup>1</sup>** Note sur le nom du fichier: « $h_$t » **
Ligne 70: Ligne 71:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Il est important de garder des noms de fichier uniformes, ça nous sera utile ensuite pour la partie versionning.+Il est important de garder des noms de fichier uniformes, ça nous sera utile ensuite pour la partie versioning.
 </WRAP> </WRAP>
  
Ligne 80: Ligne 81:
 ==== Côté serveur ==== ==== Côté serveur ====
  
-La configuration minimale du serveur est très simple: openssh-server, openssh-client<sup>1</sup> et un utilisateur pour le commutateur.+La configuration __minimale__ du serveur est très simple: **openssh-server****openssh-client**<sup>1</sup> et un utilisateur pour le commutateur.
  
 On commence par créer un utilisateur et définir son mot de passe:  On commence par créer un utilisateur et définir son mot de passe: 
Ligne 104: Ligne 105:
 </code> </code>
  
-<sup>1</sup> Le binaire « scp » se trouve dans le paquet « openssh-client » et on a besoin de ce binaire. [[https://superuser.com/questions/577911/scp-lost-connection-but-ssh-works-fine|superuser.com]]+<sup>1</sup> Le binaire « scp » se trouve dans le paquet **openssh-client** et on a besoin de ce binaire. [[https://superuser.com/questions/577911/scp-lost-connection-but-ssh-works-fine|superuser.com]]
  
 === SCP oui, SSH non ! === === SCP oui, SSH non ! ===
  
-Pour éviter que le commutateur ait un accès shell à notre machine on va utiliser un petit programme qui s'appelle « rssh » qui va nous permettre de limiter ce qu'il est possible de faire via SSH.+Pour éviter que le commutateur ait un accès shell à notre machine on va utiliser un petit programme qui s'appelle **rssh** qui va nous permettre de limiter ce qu'il est possible de faire via SSH.
  
 <code> apt install rssh </code> <code> apt install rssh </code>
Ligne 158: Ligne 159:
 </WRAP> </WRAP>
    
-On utilise inotity via pour monitorer les fichiers dans ///var/confsw/chroot/archives///.+On utilise **inotify** via **incron** pour monitorer les fichiers dans ///var/confsw/chroot/archives///.
  
 <code> root@confsw:/# apt install incron <code> root@confsw:/# apt install incron
Ligne 204: Ligne 205:
 DATE=$(date -d"${MONTH} ${DAY} ${YEAR} ${HOUR}:${MIN}:${SEC}.${MSEC}" --rfc-3339='ns') DATE=$(date -d"${MONTH} ${DAY} ${YEAR} ${HOUR}:${MIN}:${SEC}.${MSEC}" --rfc-3339='ns')
  
-function versionning {+function versioning {
  ACTION=$1  ACTION=$1
  $GIT_BIN $GIT_WORK_TREE init $OUTPUT_DIR  $GIT_BIN $GIT_WORK_TREE init $OUTPUT_DIR
Ligne 227: Ligne 228:
  if [ $DIFF -eq 1 ]; then  if [ $DIFF -eq 1 ]; then
  $LOGGER "DEST: ${OUTPUT_FILE} differs from SRC: ${INPUT_FILE}. Updating DEST."  $LOGGER "DEST: ${OUTPUT_FILE} differs from SRC: ${INPUT_FILE}. Updating DEST."
- versionning "modified"+ versioning "modified"
  else  else
  $LOGGER "No change detected between ${INPUT_FILE} and ${OUTPUT_FILE}. Nothing to do."  $LOGGER "No change detected between ${INPUT_FILE} and ${OUTPUT_FILE}. Nothing to do."
Ligne 233: Ligne 234:
 else else
  $LOGGER "DEST: ${OUTPUT_FILE} does not exist. Adding DEST."  $LOGGER "DEST: ${OUTPUT_FILE} does not exist. Adding DEST."
- versionning "added"+ versioning "added"
 fi fi
  
Ligne 240: Ligne 241:
 Notre dossier ///var/confsw/versions/// contiendra alors un joli dépôt git avec un commit à chaque « write mem ». Notre dossier ///var/confsw/versions/// contiendra alors un joli dépôt git avec un commit à chaque « write mem ».
  
-===== Démo =====+Vous pouvez retrouver le dépôt ici : [[https://gitlab.minet.net/zastava/switchsaves|Confsw]].
  
-Un container tourne en dev+===== Restaurer une configuration ===== 
 + 
 +Pour restaurer une ancienne configuration il suffit en théorie de faire:
 <code> <code>
-ct: 105  +sw> enable 
-hostnameconfsw +sw# copy scp://utilisateur:motdepassesuperduratrouver@192.168.102.148/archives/nom-du-fichier-de-conf startup-config: 
-ip: 192.168.103.178+</code> 
 +Il est possible de voir les dernières archives via 
 +<code> 
 +sw# show archive
 </code> </code>
  
  
-On peut faire un « git log » dans ///var/confsw/versions/// pour voir les commits pendant qu'on fait des « write mem » sur le commutateur du local.+===== Déployer rapidement sur les switchs et autres équipements ===== 
 + 
 +Pour déployer la configuration rapidement sur les switchs, on utilise [[https://wiki.minet.net/wiki/services/ansible/|Ansible]]. 
 + 
 +Voici le script (très basique) utilisé.
  
-Les choses intéressantes sur le CT: 
 <code> <code>
-/etc/passwd +- hosts: [switchs] 
-/etc/rssh.conf +  gather_facts: false 
-/etc/ssh/sshd_config + 
-/etc/incron.allow +  tasks: 
-/var/spool/incron/johndoe +    - name : stop archiving 
-/opt/git_swconfig/git_swconfig.sh +      ios_config: 
-/var/confsw/chroot/ +         lines: 
-/var/confsw/versions+          - archive 
-/var/log/syslog+          - no archive 
 +    - name: save conf 
 +      ios_config: 
 +        lines: 
 +          - service timestamp log datetime msec year 
 +          - archive 
 +          - path scp://utilisateur:motdepassesuperduratrouver@192.168.102.148//var/confsw/archives/$h_$t 
 +          - time-period 20160 
 +          - write-memory 
 </code> </code>
  
-Les choses intéressantes sur le commutateur du local (en mode privilégié):+Et voici le fichier //hosts// utilisé: 
 <code> <code>
-Le bloc de configuration « archive »+[switch:vars] 
-La configuration de « service timestamp log »+ansible_ssh_common_args='-o Ciphers=aes256-cbc -o KexAlgorithms=diffie-hellman-group1-sha1' 
-Le résultat de « show archive ».+ansible_connection=network_cli 
 +ansible_user=tonidldap 
 +ansible_network_os=ios 
 +ansible_become=no 
 +ansible_become_method=enable 
 +ansible_ssh_pass=tonmdpldap 
 + 
 +[switch_u2] 
 +192.168.102.206 
 +[switch_wifi] 
 +192.168.102.221 
 +192.168.102.222 
 +192.168.102.224 
 +192.168.102.224 
 +192.168.102.225 
 +192.168.102.216 
 +[switch] 
 +192.168.102.201 
 +192.168.102.202 
 +192.168.102.203 
 +192.168.102.204 
 +192.168.102.205 
 +192.168.102.206 
 +192.168.102.207 
 +192.168.102.208 
 +192.168.102.209 
 +192.168.102.210 
 +192.168.102.211 
 +192.168.102.212 
 +192.168.102.213 
 +192.168.102.214 
 +192.168.102.215 
 +192.168.102.217 
 +192.168.102.218 
 +192.168.102.230 
 +192.168.102.240 
 +192.168.102.241 
 +192.168.102.242 
 +192.168.102.243 
 +192.168.102.244 
 +192.168.102.245 
 +192.168.102.246
 </code> </code>
 +
 +Ajoutez également <code>host_key_checking = False</code> dans le fichier //ansible.cfg//. Ca vous permettra d'éviter la vérification de la clé ssh des switchs ou autres équipements.
  
 ===== Autre fonctionnalité des archives Cisco ===== ===== Autre fonctionnalité des archives Cisco =====
- 
  
 Il est possible de journaliser toutes les commandes entrées sur le commutateur par un utilisateur. Combiné avec l'authentification via le service [[wiki:services:radius-switch|Radius-Switch]] ça peut être utile pour savoir //« qui a fait de la merde ? »//. Il est possible de journaliser toutes les commandes entrées sur le commutateur par un utilisateur. Combiné avec l'authentification via le service [[wiki:services:radius-switch|Radius-Switch]] ça peut être utile pour savoir //« qui a fait de la merde ? »//.
 Tout est expliqué dans [[https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/config-mgmt/configuration/15-sy/config-mgmt-15-sy-book/cm-config-logger.pdf|ce pdf]]. Tout est expliqué dans [[https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/config-mgmt/configuration/15-sy/config-mgmt-15-sy-book/cm-config-logger.pdf|ce pdf]].
  
 +Exemple de log:
 +{{:wiki:services:logcmdcisco.png?600|}}
 +
 +===== FIN =====
  
  
  --- //[[no_pseudo@minet.net|Kevin Cazal]] 2018/07/07 16:45//  --- //[[no_pseudo@minet.net|Kevin Cazal]] 2018/07/07 16:45//
  
wiki/services/backup_cfg_cisco.1531067323.txt.gz · Dernière modification: 2020/06/27 18:15 (modification externe)