Table of Contents
Oxidized
Будем настраивать резервное копирование роутеров Mikrotik. Сервис будем настраивать на Debian
Для начала, на всех устройствах mikrotik, с которых будем собирать кофиги, добавляем пользователя oxidized с правами только на чтение:
ssh user@ip_mikrotik user add name=oxidized password=P@$$w0rd group=read quit
Установка
Список нужных покетов для инсталляции, можно посмотреть на github разработчиков oxidized
Устанавливаем зависимости
apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++
Устанавливаем oxidized
gem install oxidized gem install oxidized-script oxidized-web
Смотрим, что установилось
oxidized -v 0.27.0 whereis oxidized oxidized: /usr/local/bin/oxidized
Конфигурация
В официальной документации, написано, что настройки крайне нежелательно производить под пользователем root. Поэтому создадим пользователя oxidized с домашним каталогом
useradd oxidized -m
При первом запуске oxidized создаст все необходимые файлы и каталоги. Запуск следует производить под специальным пользователем
su - oxidized oxidized
Основной файл конфигурации находится в директории /home/oxidized/.config/oxidized/
, в файле config в формате YAML
. Проверить корректность YAML
можно здесь
Сам файл конфигурации
- /home/oxidized/.config/oxidized/config
username: oxidized password: P@$$word model: routeros resolve_dns: true interval: 60 use_syslog: true threads: 30 timeout: 180 retries: 3 prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/ rest: 127.0.0.1:8888 next_adds_job: false vars: {} groups: {} models: {} pid: "~/.config/oxidized/pid" log: "~/.config/oxidized/logs/" crash: "~/.config/oxidized/crashes/" stats: history_size: 10 input: default: ssh debug: true ssh: secure: false map: verify_host_key: never utf8_encoded: true output: default: git git: user: oxidized email: address@domain.com repo: "~/.config/oxidized/devices/devices.git" source: default: csv csv: file: "~/.config/oxidized/mikrotik/router.db" delimiter: !ruby/regexp /:/ map: name: 0 model: 1 ip: 2 port: 3 username: 4 password: 5 model_map: Cisco: ios mikrotik: routeros
База с роутерами
В разделе source указано, что информацию о девайсах нужно брать из CSV файла. База находится по пути ~/.config/oxidized/mikrotik/router.db
. Данные хранятся в формате ИМЯ:МОДЕЛЬ:IP:ПОРТ:ЛОГИН:ПАРОЛЬ
Создадим файл базы данных:
RB128:routeros:10.10.10.14 # авторизация из файла конфигурации RB121:routeros:192.168.1.200:other_user:other_password # явно указан логин и пароль RB2011:routeros:192.168.1.200:::9012 # на нестандартном порту ssh
Запуск сервиса
Для того, чтобы oxidized стартовал как служба, сделаем следующее. Создадим юнит для запуска сервиса. В редакторе по пути /lib/systemd/system/oxidized.service
пишем следующие
[Unit] Description=Oxidized - Network Device Configuration Backup Tool After=network-online.target multi-user.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/oxidized User=oxidized KillSignal=SIGKILL [Install] WantedBy=multi-user.target
Запускаем и проверяем
systemctl start oxidized.service systemctl enable oxidized.service
Авторизация
Доступ к сервису, осуществляется через веб интерфейс http://localhost:8888. К сожалению, на текущий момент у oxidized нет аутентификации в системе. Обойти этот недостаток с помощью технологии Reverse-proxy
Создаем уот такой уот конфиг nginx для виртуального хоста /etc/nginx/sites-available/oxi.domain.com.conf
server { listen 80; server_name oxi.knipex.local oxi; location / { auth_basic "Restricted Access!"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; proxy_pass http://127.0.0.1:8888; proxy_set_header Authorization ""; proxy_set_header X-Forwarded-User $remote_user; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Строка – auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
говорит о том, что на данный сайт прикручена авторизация. Пользователи и их пароли хранятся в файле – .htpasswd
Для того, чтобы создать такой файл, воспользуемся инструментом web сервера apache, есбстественно, если такого нет в системе – установим его:
apt install apache2-utils
Создадим пользователя admin с хитрым паролем:
htpasswd -c /etc/nginx/conf.d/.htpasswd admin
Так как файла .htpasswd
в нашей системе не существовало, запускаем команду с ключем -c, в дальнейшем при добавление пользователей, ключ указывать не нужно.