User Tools

Site Tools


oxidized

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, в дальнейшем при добавление пользователей, ключ указывать не нужно.

oxidized.txt · Last modified: 2023/04/06 10:28 (external edit)