Oxidized установка и настройка

Сайт: https://github.com/ytti/oxidized/

Небольшая но очень полезная программа для централизованного резервного копирования конфигурационных файлов сетевого оборудования. Так же, что очень полезно, умеет отображать изменения в настройках - это позволяет быстро понять что именно изменялось.

В данном примере показана настройка для бэкапа Mikrotik, но вообще Oxidized поддерживает более 130 типов устройств.

Установка на Ubuntu 18.04

Убедимся что репозиторий universe подключен:

add-apt-repository universe

Устанавливаем зависимости:

apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++

Устанавливаем gems (если не нужно ставить какие-то части, отредактируйте строку):

gem install oxidized oxidized-script oxidized-web

Лучше всего хранить конфигурации в Git, поэтому ставим его:

apt install git

Процесс желательно запускать под отдельным пользователем, создаем его:

useradd -m oxidized

Настраиваем git:

git config --global user.name "oxidized"
git config --global user.email "[email protected]"
git init oxidized.git

Из-под пользователя запускаем программу первый раз чтобы создались необходимые каталоги и файл конфигурации:

su - oxidized
oxidized

Прерываем работу нажатием Ctrl+C

Пример файла конфигурации, находится в /home/oxidized/.config/oxidized/:

---
username: oxidized
password: $ecretP@$$Word
model: routeros
resolve_dns: true
interval: 3600
use_syslog: false
debug: false
threads: 30
timeout: 140
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 127.0.0.1:8888
next_adds_job: false
remove_secret: true
vars: {}
groups: {}
models: {}
pid: "/home/oxidized/.config/oxidized/pid"
log: "/home/oxidized/.config/oxidized/log"
crash:
  directory: "/home/oxidized/.config/oxidized/crashes"
  hostnames: false
stats:
  history_size: 10
input:
  default: ssh
  debug: false
  ssh:
    secure: false
  ftp:
    passive: true
  utf8_encoded: true
output:
  default: git
  git:
    user: oxidized
    email: [email protected]
    repo: "/home/oxidized/.config/oxidized/devices.git"
source:
  default: csv
  csv:
    file: "/home/oxidized/.config/oxidized/router.db"
    delimiter: !ruby/regexp /:/
    map:
      name: 0
      model: 1
      ip: 2
      port: 3
      username: 4
      password: 5
    gpg: false
model_map:
  juniper: junos
  cisco: ios

Описание наиболее важных переменных:

  • username: oxidized - имя пользователя по умолчанию, под которым Oxidized бует подключаться к устройствам
  • password: $ecretP@$$Word - пароль по умолчанию
  • model: routeros - модель устройства по умолчнию
  • interval: 3600 - интервал создания бэкапов в секундах
  • timeout: 140 - тайм-аут подключения (по умолчанию 20), если есть задержки в сети - лучше увеличить
  • remove_secret: true - удаляет секреты (ключи, пароли и прочее), подробнее для каждой из железок тут: https://github.com/ytti/oxidized/tree/master/lib/oxidized/model
  • rest: 127.0.0.1:8888 - адрес и порт веб-сервиса, желательно так и оставить
  • в секции input: значение default: ssh лучше исправить убрав telnet, т.к. это небезопасно
  • в секции output: сохраняем все в git → default: git
  • в секции source: файл с данными о оборудовании default: csv и далее путь до него, разделитель, назначение полей

Подробности директив можно найти тут: https://www.rubydoc.info/gems/oxidized/0.28.0 (проверьте версию программы!)

И тут много полезной информации: https://github.com/ytti/oxidized/blob/master/docs/Configuration.md

Создаем и редактируем файл: /home/oxidized/.config/oxidized/router.db

mikrotik01:routeros:10.10.10.1
mikrotik02:routeros:10.10.10.10:22:test:$ecretP@$$word

первая строка - наименование, тип оборудования, IP-адрес
вторая строка - наименование, тип оборудования, IP-адрес, порт, логин, пароль

Для первого устройства будут использоваться логин и пароль по умолчанию, прописанные в файле config

Облегчим жизнь копированием файла управлением службы и включением автозапуска:

sudo cp /var/lib/gems/2.5.0/gems/oxidized-0.28.0/extra/oxidized.service /lib/systemd/system/
sudo cp /var/lib/gems/2.5.0/gems/oxidized-0.28.0/extra/oxidized.init.d /etc/init.d/oxidized
sudo systemctl enable oxidized.service
sudo systemctl start oxidized

Готово, можно запускать службу, проверить ее работу

По умолчанию Oxidized не имеет никакой авторизации, что позволяет подключаться к нему всем желающим.

Исправить это можно с помощью Reverse-proxy

Устанавливаем:

apt install nginx

Копируем файл настроек:

sudo cp /var/lib/gems/2.5.0/gems/oxidized-0.28.0/extra/oxidized.nginx /etc/nginx/sites-available/oxidized

Его содержимое:

server {
        listen 80;
        listen [::]:80;

        server_name oxidized.example.com;

        location / {
                proxy_pass http://127.0.0.1:8888/;
        }

        access_log /var/log/nginx/access_oxidized.log;
        error_log /var/log/nginx/error_oxidized.log;
}

и добавляем строки:

auth_basic “Username and Password Required”;
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://127.0.0.1:8888/;}

Создаем файл с паролем:

sudo htpasswd /etc/nginx/.htpasswd username

Включаем модули:

a2enmod proxy
a2enmod proxy_http

Добавляем в ports.conf, где 10.10.10.1 - IP веб-сервера

# Oxidized port
Listen 10.10.10.1:8888

Создаем файл конфигурации /etc/apache2/sites-available/oxidized.conf:

<VirtualHost *:8888>

    ServerAdmin [email protected]
    ServerName oxidized.MYDOMAIN.ru
    ServerAlias oxidized

    <Location />
        AuthType Basic
        AuthName "Username and Password Required"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Location>

    ProxyPass /  http://127.0.0.1:8888/
    ProxyPassReverse / http://127.0.0.1:8888/

    ErrorLog /var/log/apache2/oxidized_error.log
    CustomLog /var/log/apache2/oxidized_access.log combined

</VirtualHost>

Включаем сайт:

a2ensite oxidized.conf

Создаем файл с паролем:

sudo htpasswd /etc/apache2/.htpasswd username

Перезапускаем apache2

Осталось настроить наши устройства Mikrotik:

  • Создать пользователя под которым будет подключаться Oxidized: System → Users, права дать только «Read»
  • Проверить работает ли сервис SSH (IP → Services и включить ssh)
  • Открыть доступ к порту 22 в IP → Firewall → Filter Rules

Крайне желательно ограничить доступ по порту 22 (если вы его не используете для работы) и IP-адресу сервера с установленным Oxidized

  • software/oxidized/oxidized-setup.txt
  • Последнее изменение: 2020/07/28 02:11
  • 127.0.0.1