Система управления конфигурациями Oxidized

Система управления конфигурациями Oxidized.

Содержание

1 Общая информация

2 Установка

2.1 Необходимое программное обеспечение

  • Установите язык ruby:
    dnf -y install ruby
    
  • Установите необходимые средства разработки:
    dnf -y group install "Development Tools"
    dnf -y install make cmake which sqlite-devel ruby gcc ruby-devel libicu-devel gcc-c++
    dnf -y install openssl-devel
    
  • Установите git для хранения файлов:
    dnf -y install git
    

2.2 Установка Oxidized

  • Добавьте пользователя oxidized:
    useradd -c "oxidized system account" -m -d /home/oxidized -s /bin/bash oxidized
    
  • Устанавливаем Oxidized:
    gem install oxidized
    gem install oxidized-script oxidized-web
    

2.3 Обновление Oxidized

  • Логинимся под пользователем oxidized:
    su - oxidized
    
  • Обновляем Oxidized:
    gem update oxidized
    gem update oxidized-script oxidized-web
    

3 Конфигурация

3.1 Конфигурация Oxidized

  • Документация: https://github.com/ytti/oxidized/blob/master/docs/Configuration.md
  • Запустите oxidized однократно для создания структуры каталогов и шаблона конфигурационного файла:
    su - oxidized
    oxidized
    
  • Отредактируйте шаблон файла конфигурации ~oxidized/.config/oxidized/config.
  • Oxidized использует формат YAML для конфигурационных файлов, поэтому все отступы должны быть выполнены пробелами, допускается два или четыре пробела на отступ.
  • Основные элементы файла конфигурации:
    • Задание имени пользователя и пароля по умолчанию для соединения с устройствами:

      username: oxidized
      password: Password
      
    • Указание типа устройства по умолчанию (например, Cisco):

      model: ios
      
    • Зададим интервал создания копий данных в секундах (рекомендуется делать копии раз в сутки, что соответствует 86400 секундам):

      interval: 86400
      
    • Для устройств со слабыми характеристиками и медленными каналами связи рекомендуется увеличить таймаут (здесь таймаут 60 секунд, три повторные попытки):

      timeout: 60
      retries: 3
      
    • Если вы не хотите, чтобы ваши резервные копии содержали чувствительные данные, такие как ключи и пароли, добавьте следующую опцию:

      remove_secret: true
      
    • Раздел input отвечает за связь с устройствами (по умолчанию используются протоколы ssh и telnet, протокол telnet не безопасен, рекомендуется использовать только ssh):

      input:
              default: ssh
              debug: false
              ssh:
                secure: false
              ftp:
                passive: true
              utf8_encoded: true
      
    • Раздел output определяет способ хранения собранной информации (будем использовать git для этой цели):

      output:
              default: git
              git:
                user: oxidized
                email: oxidized@MYDOMAIN.ru
                repo: "/home/oxidized/.config/oxidized/devices.git"
      
    • Раздел source задаёт базу данных устройств (используем CSV-файл с двоеточием в качестве разделителя):

      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
      
      • Опция file задаёт путь к файлу с базой устройств.
      • Подсекция map определяет порядок параметров подключения к устройству в строке CSV-файла.
  • Весь файл конфигурации:
    ---
    username: oxidized
    password: Password
    model: ios
    resolve_dns: true
    interval: 86400
    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: oxidized@MYDOMAIN.ru
            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
    

3.2 Хранение в git

3.2.1 Конфигурация сохранения в git

  • Здесь используется интерфейс libgit2 (не работают хуки).
  1. Репозиторий без групп

    • Конфигурация имеет вид:
      output:
        default: git
        git:
              user: Oxidized
              email: o@example.com
              repo: "/home/oxidized/.config/oxidized/devices.git"
      
  1. Репозитории с группами

    • Конфигурация имеет вид:
      output:
        default: git
        git:
              user: Oxidized
              email: o@example.com
              repo: "/home/oxidized/.config/oxidized/git-repos/default.git"
      
    • Oxidized создаст репозиторий для каждой группы в том же каталоге, что и репозиторий default.git.
    • Если вы хотите использовать группы и один репозиторий, вы можете принудительно сделать это с помощью конфигурации single_repo:
      output:
        default: git
        git:
              single_repo: true
              repo: "/home/oxidized/.config/oxidized/devices.git"
      

3.2.2 Просмотр файлов устройств

  • Перейдите в правильный репозиторий git для необходимого устройства и получите список устройств:
    git ls-files -s
    
  • Посмотрите содержимое файла:
    git cat-file -p <object id>
    

3.2.3 Удалить отключённое устройство

  • Очистить сохранённую конфигурацию устройства:
    git rm --cached <object id>
    

3.3 Файл описания оборудования

  • Создадим файл: /home/oxidized/.config/oxidized/router.db:
    sw01:ios:10.10.10.1
    sw02:ios:10.10.10.10:22:test:PASSWORD
    
  • Структура полей: наименование, тип оборудования, IP-адрес, порт, логин, пароль.
  • Если значения отсутствуют, то используются значения по умолчания.

3.4 Службы запуска

  • Запустим oxidized:
    systemctl enable --now oxidized.service
    

4 Подключение к LibreNMS

4.1 Общая информация

  • Интеграция LibreNMS с Oxidized дает следующие преимущества:
    • Просмотр конфигурации: «Текущая», «История» и «Различия» на вкладке «Конфигурации» каждого устройства.
    • Автоматическое добавление устройств в Oxidized: включая фильтрацию и группировку для упрощения управления учетными данными.
    • Поиск конфигурации.

4.2 Порядок действий

  • Установить Oxidized.
  • Подключить Oxidized к web-интерфейсу LibreNMS.
  • Чтобы устройства добавлялись автоматически, вам необходимо настроить извлечения их из LibreNMS.
  • LibreNMS автоматически сопоставит ОС с именем модели Oxidized, не нужно использовать параметр конфигурации model_map в Oxidized.

4.3 SELinux

  • Необходимо разрешить httpd исходящие подключения к сети:
    setsebool -P httpd_can_network_connect 1
    

4.4 Подключение Oxidized к web-интерфейсу LibreNMS

  • Активируйте подключение к Oxidized/
    • Подключить можно в web-интерфейсе:

      https://<ваш URL-адрес librenms>/settings/external/oxidized

    • Подключить можно в командной строке:

      lnms config:set oxidized.enabled true
      lnms config:set oxidized.url http://127.0.0.1:8888
      
  • Подключите управление версиями конфигурации (работает с модулем вывода git).
    • Подключить можно в web-интерфейсе:

      https://<ваш URL-адрес librenms>/settings/external/oxidized

    • Подключить можно в командной строке:

      lnms config:set oxidized.features.versioning true
      

4.5 Информация о группах

  • Oxidized поддерживает различные способы использования учётных данных для входа на устройства.
  • Вы можете указать глобальное имя пользователя и пароль в Oxidized, имя пользователя и пароль на уровне группы или для каждого устройства.
  • При синхронизации с LibreNMS можно делать только конфигурации для групп.
  • LibreNMS поддерживает отправку групп в Oxidized, чтобы вы могли затем определить учётные данные группы в Oxidized. Чтобы включить эту поддержку, включите «Включить возврат групп в Oxidized».
    • Подключить можно в web-интерфейсе:

      https://<ваш URL-адрес librenms>/settings/external/oxidized

    • Подключить можно в командной строке:

      lnms config:set oxidized.group_support true
      
  • Можно установить группу по умолчанию (все устройства попадут в эту группу):
    • Подключить можно в web-интерфейсе:

      https://<ваш URL-адрес librenms>/settings/external/oxidized

    • Подключить можно в командной строке:

      lnms config:set oxidized.default_group default
      

4.5.1 Задание разделения на группы

  • Группы для Oxidized никак не связаны с группами LibreNMS.
  • Чтобы вернуть переопределение в Oxidized, вы можете сделать это, предоставив ключ переопределения, затем сопоставив поиск хоста (или хостов) и, наконец, определив само значение переопределения.
  • LibreNMS не проверяет достоверность этих атрибутов, а передает их в Oxidized в соответствии с определением.
  • Сопоставление хостов можно выполнить с помощью hostname, sysname, os, location, sysDescr, hardware, purpose, notes.
  • Порядок соответствия следующий:
    • hostname
    • sysName
    • sysDescr
    • hardware
    • os
    • location
    • ip
    • purpose
    • notes
  • Пример:
    lnms config:set oxidized.maps.group.os.+ '{"match": "ios", "value": "cisco"}'
    lnms config:set oxidized.maps.group.os.+ '{"match": "vrp", "value": "huawei"}'
    lnms config:set oxidized.maps.group.os.+ '{"match": "asa", "value": "asa"}'
    lnms config:set oxidized.maps.group.os.+ '{"match": "bdcom", "value": "bdcom"}'
    

4.5.2 Конфигурация в Oxidized

  • При необходимости вы можете указать учетные данные для групп, используя следующее в вашей конфигурации Oxidized:
    groups:
      <groupname>:
            username: <user>
            password: <password>
    
  • Например:
    groups:
      cisco:
            username: user1
            password: password1
      asa:
            username: user2
            password: password2
      huawei:
            username: user3
            password: password3
      bdcom:
            username: user5
            password: password5
            vars:
              enable: enpassword5
      default:
            username: user4
            password: password4
    

4.6 Автоматическое добавление устройств в Oxidized

  • Нужно настроить учётные данные по умолчанию для ваших устройств в конфигурации Oxidized:

    source:
      default: http
      debug: false
      http:
            url: https://<ваш URL-адрес librenms>/api/v0/oxidized
            map:
              name: hostname
              model: os
              group: group
            headers:
              X-Auth-Token: '01582bf94c03104ecb7953dsadsadwed'
            vars_map:
              ssh_port: ssh_port
              telnet_port: telnet_port
    
    • Токен можно создать в меню Шестерёнка > API > API Settings:

      https://<ваш URL-адрес librenms>/api-access

    • Проверить взаимодействие можно из командной строки:

      curl -H 'X-Auth-Token: YOUR_AUTH_TOKEN' https://<ваш URL-адрес librenms>/api/v0/oxidized
      
  • LibreNMS может перезагружать список узлов каждый раз, когда устройство добавляется в LibreNMS.

    • Подключить можно в web-интерфейсе:

      https://<ваш URL-адрес librenms>/settings/external/oxidized

    • Подключить можно в командной строке:

      lnms config:set oxidized.reload_nodes true
      

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие