====== Система управления конфигурациями Ansible и Cisco ====== **Семинар** - реклама курса: [[https://www.specialist.ru/course/yun4-a|Linux. Уровень 7. Мониторинг оборудования и интеграция с решениями Cisco]] **Хэштеги:** Linux, Cisco, Ansible, Fail2ban, Git **Видеозапись:** https://youtu.be/zUi4lTd5WHc ===== Реклама вебинара ===== * [[https://www.specialist.ru/news/4958|Бесплатный семинар «Система управления конфигурациями Ansible и оборудование Cisco»]] Что может объединить такие, казалось бы различные программные продукты как Ansible и Fail2ban? Да как и обычно в UNIX-way - каждый будет делать что-то свое и делать это хорошо! Добавим сюда еще Git, и получим симпатичную систему резервного копирования конфигураций оборудования Cisco. ===== Шаг 1. Исходное состояние стенда ===== * [[Оборудование уровня 3 Cisco Router]] * [[Linux. Мониторинг оборудования и интеграция с Cisco#Модуль 2. Развертывание менеджмент станции]] * [[Сервис SSH#Настройка ssh клиента]] для согласования протоколов шифрования * Коммутаторы switch1, switch2, switch3, ... en conf t hostname switchN interface VLAN1 ip address 192.168.43.N+2 255.255.255.0 no shutdown no ip domain lookup ip host server 192.168.43.10 ip domain-name corp43.un crypto key generate rsa general-keys modulus 1024 ip ssh version 2 username root privilege 15 secret cisco line vty 0 4 login local transport input ssh end wr Проверки server.corp43.un:~# ssh switchN ===== Шаг 2. Постановка задач и ретроспектива вариантов их решения ===== ==== Задачи и варианты решения ==== === Задача 1 - автоматическое резервное копирование конфигураций === * [[https://habr.com/ru/post/339844/|Cisco IOS функционал Archive]] === Задача 2 - протоколирование версий конфигураций === * [[Система контроля версий rcs]] === Задача 3 - изменение конфигурации множества устройств cisco === * [[Программирование диалогов expect]] ==== Известные комплексные решения ==== === Задача 1 и 2, плюс мониторинг факта изменения конфигурации === * [[Резервное копирование конфигурации Cisco#Пакет ciscoconf]] === Задача 1, 2 и 3 === * [[Резервное копирование конфигурации Cisco#Пакет rancid]] ===== Шаг 3. Использование scp для автоматизации резервного копирования конфигурации ===== ==== Копирование конфигурации через удаленное выполнение команд ==== server.corp43.un:~# ssh switch1 "show running-config" server.corp43.un:~# apt install tftpd && mkdir /srv/tftp/ server.corp43.un:~# ssh switch1 "show running-config" > /srv/tftp/switch1-running-config switch1#more tftp://server/switch1-running-config ==== Копирование конфигурации командой scp ==== !!! Требуется массовое изменение конфигураций * Для автоматизации подключения к новым устройствам может потребоваться [[Сервис SSH#Настройка ssh клиента]] для отключения проверки ключа * [[Программирование диалогов expect]], в том числе, с использованием tftp server.corp43.un:~# scp switch2:running-config /srv/tftp/switch2-running-config * Для автоматизации подключения к устройствам может копирование на них открытого ключа ssh сервера или автоматическая [[Сервис SSH#Парольная аутентификация]] клиента ssh server.corp43.un:~# sshpass -p cisco ssh switch1 "show run" server.corp43.un:~# rm /srv/tftp/switch2-running-config server.corp43.un:~# sshpass -p cisco scp switch2:running-config /srv/tftp/switch2-running-config ===== Шаг 4. Использование git для протоколирования версий конфигураций ===== * [[Локализация системы#Локализация временной зоны]] * [[Сервис Git]] ===== Шаг 5. Использование ansible для управления конфигурациями ===== ==== Простой вариант - изменение конфигурации командой scp ==== * !!! tftp больше ВООБЩЕ не нужен :) * Например, отключим scp через scp :) server.corp43.un:~# cd /root/ server.corp43.un:~# cat cisco_change_conf.txt no ip scp server enable end server.corp43.un:~# sshpass -p cisco scp cisco_change_conf.txt switchN:running-config * Недостатки этого способа ... и, отсутствие идемпотентности ??? :) ==== Используем ansible ==== * Разворачиваем и тестируем [[Сервис Ansible]] с использованием модуля ios_command ===== Шаг 5. Использование fail2ban для отслеживания факта изменения и бекапа конфигурации ===== * [[Регистрация событий в Linux]] переданных по сети в отдельный файл * Массовая настройка с [[Сервис Ansible#Использование playbook]] Ansible протокола syslog для передачи журнальных сообщений на сервер и, заодно, возвращаем scp * [[Сервис Fail2ban#Интеграция fail2ban и cisco]] # host switch1 # host 192.168.43.3 # cat /root/backup_cisco_conf.sh #!/bin/sh CISCONAME=`host ${1} | cut -d' ' -f5 | cut -d'.' -f1` echo $CISCONAME /usr/bin/sshpass -p cisco /usr/bin/scp ${CISCONAME}:running-config /srv/tftp/${CISCONAME}-running-config cd /srv/tftp/ /usr/bin/git add * /usr/bin/git commit -a -m `date '+%Y-%m-%d_%H:%M:%S'` # cd /srv/tftp/ # rm switch1-running-config # /root/backup_cisco_conf.sh 192.168.43.3 * [[Сервис Git]] # cat /etc/fail2ban/action.d/cisco-backup-config.conf [Definition] actionban = /root/backup_cisco_conf.sh >/dev/null 2>&1 ===== Шаг 6. Добавляем новое оборудование ===== - Базовая конфигурация switch3 - До настройка через [[Сервис Ansible#Использование playbook]] ansible только нужных устройств - Проверка наличия резервной копии ===== Домашние задания ===== - Найти, как использовать hostname узла вместо его ip в fail2ban actions или, что-то читающее логи вместо f2b - Найти решение идемпотентности для модуля ansible ios_config - Использовать модули ansible вместо scp