NetBox. Установка

Установка NetBox.

Содержание

1 Системные требования

2 Предварительная подготовка

3 Установка компонент

3.1 Python

  • Установим python-3.12:
    dnf -y install python3.12 python3.12-devel
    
  • Добавим варианты python в список альтернатив:
    alternatives --install /usr/bin/python python /usr/bin/python3.9 1
    alternatives --install /usr/bin/python python /usr/bin/python3.12 2
    
  • Выберем необходимую версию python:
    alternatives --config python
    

3.2 Postgres

  • Версии, которая идёт в комплекте с дистрибутивом, достаточно.
  • Но лучше установить версию поновее.
  • Смотрим, какие версии в наличии:
    dnf module list postgresql
    
  • Установим postgresql-16:
    dnf module -y install postgresql:16
    
  • Проверьте установленную версию:
    postgres -V
    
  • Инициализируем базу данных:
    postgresql-setup --initdb --unit postgresql
    
  • Проверим, что в /var/lib/pgsql/data/postgresql.conf установлен алгоритм шифрования:
    password_encryption = scram-sha-256
    
  • Замените параметры внутреннего подключения:
    sed -i -e 's/^\(host[ ]*all.*\)ident/\1scram-sha-256/' /var/lib/pgsql/data/pg_hba.conf
    
  • Запустим postgres:
    systemctl enable --now postgresql
    
  • Подключимся к базе данных:
    sudo -u postgres psql
    
  • Создадим базу данных (укажите необходимый пароль):
    CREATE DATABASE netbox;
    CREATE USER netbox WITH PASSWORD '<password>';
    ALTER DATABASE netbox OWNER TO netbox;
    \connect netbox;
    GRANT CREATE ON SCHEMA public TO netbox;
    \q
    
  • Проверьте подключение к базе данных:
    psql --username netbox --password --host localhost netbox
    
  • После подключения посмотрите параметры соединения:
    \conninfo
    \q
    

3.3 Redis

  • Redis — быстрое хранилище данных типа ключ‑значение в памяти.

  • С 2024 года сменила лицензию на SSPL (закрытую).

  • Установим redis:

    dnf -y install redis
    
  • Запустим redis:

    systemctl enable --now redis
    
  • Проверим, что сервер работает:

    redis-cli ping
    
    • В качестве ответа должен быть PONG.

3.4 NetBox

3.4.1 Предварительная установка NetBox

  • Установим необходимое программное обеспечение:
    dnf -y install gcc libxml2-devel libxslt-devel libffi-devel libpq-devel openssl-devel redhat-rpm-config git
    
  • Клонируем репозиторий:
    mkdir -p /opt/netbox/
    cd /opt/netbox
    git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .
    
  • Создадим нового системного пользователя:
    groupadd --system netbox
    adduser --system -m -g netbox netbox
    chown -R netbox:netbox /opt/netbox
    chown --recursive netbox /opt/netbox/netbox/media/
    chown --recursive netbox /opt/netbox/netbox/reports/
    chown --recursive netbox /opt/netbox/netbox/scripts/
    

3.4.2 Конфигурация Netbox

  • Создадим файл конфигурации:
    cd /opt/netbox/netbox/netbox/
    cp configuration_example.py configuration.py
    
  • Сконфигурим необходимые параметры.
  1. ALLOWED_HOSTS

    • Список допустимых имен хостов и IP-адресов, по которым можно связаться с этим сервером (имя вашего сервера).
    • Необходимо указать хотя бы одно имя или IP-адрес, например:
      ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
      
    • Если вы еще не уверены, каким будет доменное имя и/или IP-адрес установки NetBox, вы можете установить подстановочный знак (звездочку), чтобы разрешить все значения хоста:
      ALLOWED_HOSTS = ['*']
      
  1. DATABASE

    • Сведения о конфигурации базы данных.
    • Нужно задать имя пользователя и пароль, используемые при настройке PostgreSQL.
    • Если служба запущена на удалённом хосте, обновите параметры HOST и PORT:
      DATABASE = {
          'NAME': 'netbox',               # Database name
          'USER': 'netbox',               # PostgreSQL username
          'PASSWORD': '<password>',           # PostgreSQL password
          'HOST': 'localhost',            # Database server
          'PORT': '',                     # Database port (leave blank for default)
          'CONN_MAX_AGE': 300,            # Max database connection age (seconds)
      }
      
  1. REDIS

    • NetBox требует указания двух отдельных баз данных Redis: tasks и caching.
    • Обе они могут предоставляться одной и той же службой Redis, однако каждый из них должен иметь уникальный числовой идентификатор базы данных.
      REDIS = {
          'tasks': {
              'HOST': 'localhost',      # Redis server
              'PORT': 6379,             # Redis port
              'PASSWORD': '',           # Redis password (optional)
              'DATABASE': 0,            # Database ID
              'SSL': False,             # Use SSL (optional)
          },
          'caching': {
              'HOST': 'localhost',
              'PORT': 6379,
              'PASSWORD': '',
              'DATABASE': 1,            # Unique ID for second database
              'SSL': False,
          }
      }
      
  1. SECRET_KEY

    • Этому параметру должен быть назначен случайно сгенерированный ключ, используемый в качестве соли для хеширования и связанных с ним криптографических функций.
    • Этот ключ должен быть уникальным для данной установки, и его рекомендуется иметь длину не менее 50 символов. Его не следует использовать за пределами локальной системы.
    • Простой скрипт Python с именем generate_secret_key.py предоставляется в родительском каталоге для помощи в создании подходящего ключа:
      python3 ../generate_secret_key.py
      
    • В случае высокодоступной установки с несколькими веб-серверами SECRET_KEY должен быть одинаковым на всех серверах, чтобы поддерживать постоянное состояние сеанса пользователя.

3.4.3 Развёртывание NetBox

  • Скрипт обновления выполнит следующие действия:
    • создание виртуального окружения Python;
    • установка необходимых пакетов Python;
    • запуск миграции схемы базы данных;
    • создание локальной документации;
    • объединение статических файлов ресурсов на диске.
  • Запускаем скрипт установки Netbox:
    sudo -u netbox PYTHON=/usr/bin/python3.12 /opt/netbox/upgrade.sh
    

3.4.4 Суперпользователь

  • NetBox не имеет предустановленных учётных записей пользователей.
  • Необходимо создать суперпользователя (административную учетную запись), чтобы иметь возможность войти в NetBox.
  • Войдём в виртуальную среду Python:
    source /opt/netbox/venv/bin/activate
    
  • Создадим учётную запись суперпользователя:
    cd /opt/netbox/netbox
    python3 manage.py createsuperuser
    
  • Указывать адрес электронной почты пользователя не обязательно.

3.4.5 Планирование очистки рабочей среды

  • NetBox включает в себя скрипт housekeeping, который выполняет повторяющиеся задачи очистки (очистка старых сеансов и записей об изменениях с истекшим сроком действия).
  • Установим его:
    sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
    

3.4.6 Брандмауэр

  • Настроим брандмауэр:
    firewall-cmd --add-port=8000/tcp --permanent
    firewall-cmd --reload
    

3.5 Gunicorn

  • NetBox работает как приложение WSGI для HTTP-сервера.
  • Можно использовать Gunicorn или uWSGI.
  • Скопируем файл конфигурации:
    sudo -u netbox cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
    
  • Установим скрипты для systemd:
    cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
    systemctl daemon-reload
    
  • Запустим сервисы netbox и netbox-rq:
    systemctl enable --now netbox netbox-rq
    

3.6 HTTP-сервер

3.6.1 Nginx

  • Установим nginx.
  • Выберем нужный модуль:
    dnf module list nginx
    dnf module switch-to nginx:1.24
    dnf -y install nginx
    
  • Скопируем шаблон файла конфигурации:
    cp /opt/netbox/contrib/nginx.conf /etc/nginx/conf.d/netbox.conf
    
  • Замените netbox.example.com именем домена или IP-адресом сервера.

3.6.2 SSL-сертификат

  • Сгенерим самоподписанный SSL-сертификат в качестве заглушки:
    mkdir -p /etc/ssl/private /etc/ssl/certs
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/netbox.key -out /etc/ssl/certs/netbox.crt
    
  • Потом заменим его на нормальный.

3.6.3 SELinux

  • Настройте политики SELinux:
    setsebool httpd_can_network_connect 1
    setsebool -P httpd_can_network_connect 1
    

3.6.4 Брандмауэр

  • Настроим брандмауэр:
    firewall-cmd --add-servic={http,https} --permanent
    firewall-cmd --reload
    

3.6.5 Запуск http-сервера

  • Запустим nginx:
    systemctl enable --now nginx
    

3.7 Установка https-сертификата LetsEncrypt

3.7.1 Установка certbot

  • Проверьте, что установлен репозитории EPEL:
    dnf -y install epel-release
    
  • Установите certbot:
    dnf -y install certbot
    
  • Для веб-сервера Apache:
    dnf -y install python3-certbot-apache
    
  • Для веб-сервера Nginx:
    dnf -y install python3-certbot-nginx
    

3.7.2 Сервер Nginx

  • Плагин certbot-nginx предоставляет автоматическую настройку Nginx HTTP Server.
  • Он пытается найти конфигурацию каждого домена, а также добавляет рекомендованные для безопасности параметры, настройки использования сертификатов и пути к сертификатам Let’s Encrypt.
  • Первоначальная настройка виртуальных хостов:
    certbot --nginx
    
  • Обновление сертификатов:
    certbot renew
    
  • Изменение сертификатов без изменения файлов конфигурации nginx:
    certbot --nginx certonly
    

3.7.3 Конфигурационный файл Nginx

  • В файле /etc/nginx/conf.d/netbox.conf должны быть следующие записи:
    ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    

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

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

Похожие