====== Система управления конфигурациями 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