NETBOX

Материал из megapuper
Перейти к: навигация, поиск

Установим Netbox на Debian 13


PostgreSQL

Ставим БД, в данном случае версия 17

apt install -y postgresql
sudo -u postgres psql


Создаём базу и пользователя

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'пароль';
ALTER DATABASE netbox OWNER TO netbox;
-- the next two commands are needed on PostgreSQL 15 and later
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;


Проверяем подключение

root@netbox ~ # psql --username netbox --password --host localhost netbox
Password: 
psql (17.8 (Debian 17.8-1.pgdg13+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)
Type "help" for help.

netbox=> \conninfo
You are connected to database "netbox" as user "netbox" on host "localhost" (address "127.0.0.1") at port "5432".
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)


Redis

Устанавливаем redis-сервер

apt install -y redis-server


Проверяем

# redis-server -v
Redis server v=8.0.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=3951f4e1c0288395
# redis-cli ping
PONG


Компоненты Netbox

Переходим к установке Netbox. Устанавливаемая версия 4.5 поддерживает Python 3.12 и выше


Ставим зависимости

apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev


Проверяем версию Python после установки

python3 -V
Python 3.13.5


Определяемся с версией Netbox https://github.com/netbox-community/netbox/releases и скачиваем

wget https://github.com/netbox-community/netbox/archive/refs/tags/vX.Y.Z.tar.gz
tar -xzf vX.Y.Z.tar.gz -C /opt
ln -s /opt/netbox-X.Y.Z/ /opt/netbox

Рекомендуется устанавливать NetBox в каталог, названный в соответствии с номером его версии. Например, NetBox v4.5.0 следует установить в /opt/netbox-4.5.0, а симлинк из /opt/netbox/ будет указывать на это местоположение. Это позволяет устанавливать будущие версии параллельно, не прерывая текущую установку. При переходе на новую версию необходимо обновить только симлинк.


Создаём пользователя и даём ему права

adduser --system --group netbox
chown --recursive netbox /opt/netbox/netbox/media/
chown --recursive netbox /opt/netbox/netbox/reports/
chown --recursive netbox /opt/netbox/netbox/scripts/


Переходим к конфигурационному файлу

cd /opt/netbox/netbox/netbox/
cp configuration_example.py configuration.py


Готовим конфиг

Основное блоки

  • ALLOWED_HOSTS
  • API_TOKEN_PEPPERS
  • DATABASES
  • REDIS
  • SECRET_KEY


ALLOWED_HOSTS
Это список допустимых имен хостов и IP-адресов, с помощью которых можно получить доступ к этому серверу. Надо указать хотя бы одно имя или IP-адрес(Для проверки заголовка HTTP-узла)

ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']


API_TOKEN_PEPPERS
Код который будет использоваться для генерации контрольных сумм API-токенов

API_TOKEN_PEPPERS = {
    # DO NOT USE THIS EXAMPLE PEPPER IN PRODUCTION
    1: 'kp7ht*76fiQAhUiiop086HfASLlYUE_S^gI^(7J^K5M!LfoH@vl&b_',
}

Можем использовать generate_secret_key.py скрипт для генерации случайного pepper

python3 ../generate_secret_key.py


DATABASES
Задаём параметры подключения к БД

DATABASES = {
    'default': {
        'NAME': 'netbox',               # Database name
        'USER': 'netbox',               # PostgreSQL username
        'PASSWORD': 'STronGPassWord',   # PostgreSQL password
        'HOST': 'localhost',            # Database server
        'PORT': ,                      # Database port (leave blank for default)
        'CONN_MAX_AGE': 300,            # Max database connection age (seconds)
    }
}


REDIS
Задаём параметры подключения к 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,
    }
}

SECRET_KEY
Создаём secret-key

python3 ../generate_secret_key.py


Пример конфига Spoiler


Запускаем установку Netbox

/opt/netbox/upgrade.sh


Запускаем виртуальное окружение и создаём суперпользователя

source /opt/netbox/venv/bin/activate

cd /opt/netbox/netbox
python3 manage.py createsuperuser


Netbox работает как WSGI-приложение за HTTP-сервером. В нашем примере показано, как установить и настроить uWSGI для этой роли, однако доступны и другие WSGI-серверы, которые должны работать аналогично.

Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим pyuwsgi

source /opt/netbox/venv/bin/activate
pip3 install pyuwsgi


После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды

echo 'pyuwsgi' >> /opt/netbox/local_requirements.txt


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

cp /opt/netbox/contrib/uwsgi.ini /opt/netbox/uwsgi.ini


Далее скопируем файлы systemd для управления uWSGI и фоновым рабочим процессом NetBox

cp -v /opt/netbox/contrib/*.service /etc/systemd/system/


Отредактируем файл netbox.service, удалив строку начинающуюся с ExecStart=/opt/netbox/venv/bin/gunicorn, и раскомментируем строку с ExecStart=/opt/netbox/venv/bin/uwsgi

 systemctl daemon-reload


Стартуем сервис и проверяем, что он запустился

systemctl enable --now netbox netbox-rq
systemctl status netbox.service


Для удобства поставим Nginx и добавим конфиг для Netbox

server {
        listen 80;
        server_name netboxold.iwad.ru;

location /static/ {
        alias /opt/netbox/netbox/static/;
    }

location / {
        # proxy_pass http://127.0.0.1:8001;
        # proxy_set_header X-Forwarded-Host $http_host;
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-Proto $scheme;
        # comment the lines above and uncomment the lines below if using uWSGI
        include uwsgi_params;
        uwsgi_pass  127.0.0.1:8001;
        uwsgi_param Host $host;
        uwsgi_param X-Real-IP $remote_addr;
        uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
        uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;

        access_log /var/log/nginx/netbox.access.log;
        error_log  /var/log/nginx/netbox.error.log;
       
        location = /favicon.ico {
            log_not_found off;
            access_log off;
               }
         location ~ /\.ht {
            deny all;
              }
    }
}


Установка завершена, заходим в браузер и смотрим картинки


LDAP аутентификация

Ставим нужные пакеты

apt install -y libldap2-dev libsasl2-dev libssl-dev


Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим django-auth-ldap

source /opt/netbox/venv/bin/activate
pip3 install django-auth-ldap


После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды

echo 'django-auth-ldap' >> /opt/netbox/local_requirements.txt


Включаем ldap-аутентификацию в configuration.py

REMOTE_AUTH_ENABLED = True
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'


Далее создаём файл в той же директории, что и configuration.py(обычно /opt/netbox/netbox/netbox/), с именем ldap_config.py и определяем все необходимые параметры

import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, LDAPGroupQuery

# включение логирования
#import logging
#logger = logging.getLogger('django_auth_ldap')
#logger.addHandler(logging.StreamHandler())
#logger.setLevel(logging.DEBUG)

# Server URI
AUTH_LDAP_SERVER_URI = "ldap://ldap.iwad.ru"
 
# Set the DN and password for the NetBox service account.
AUTH_LDAP_BIND_DN = "cn=admin,dc=iwad,dc=ru"
AUTH_LDAP_BIND_PASSWORD = "kQN5UVz3jISa9LLvk2q5"
#AUTH_LDAP_BIND_DN = "cn=netbox,dc=iwad,dc=ru"
#AUTH_LDAP_BIND_PASSWORD = "FepfLVh8xjd9xnN7fZqv"
# Include this setting if you want to ignore certificate errors. This might be needed to accept a self-signed cert.
# Note that this is a NetBox-specific setting which sets:
#     ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
LDAP_IGNORE_CERT_ERRORS = True

# Include this setting if you want to validate the LDAP server certificates against a CA certificate directory on your server
# Note that this is a NetBox-specific setting which sets:
#     ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, LDAP_CA_CERT_DIR)
LDAP_CA_CERT_DIR = '/etc/ssl/certs'

# User configuration
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=iwad,dc=ru", ldap.SCOPE_SUBTREE,"(uid=%(user)s)")
AUTH_LDAP_USER_DN_TEMPLATE = None
AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}

AUTH_LDAP_GROUP_SEARCH = LDAPSearch("groups,dc=iwad,dc=ru", ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
# Ограничение доступа только для группы netbox_users
AUTH_LDAP_REQUIRE_GROUP = "cn=netbox_users,ou=groups,dc=iwad,dc=ru"

AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
AUTH_LDAP_CACHE_TIMEOUT = 3600


Перезагружаем Netbox и проверяем авторизацию

systemctl restart netbox


Здесь тоже самое на англицком https://netboxlabs.com/docs/netbox/installation/