NETBOX — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
| (не показаны 22 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
| − | + | Установим Netbox на Debian 13 | |
| − | |||
| − | Ставим | + | '''<font color=blue>PostgreSQL</font>'''<br> |
| + | |||
| + | Ставим БД, в данном случае версия 17 | ||
apt install -y postgresql | apt install -y postgresql | ||
sudo -u postgres psql | sudo -u postgres psql | ||
| + | |||
Создаём базу и пользователя | Создаём базу и пользователя | ||
| Строка 14: | Строка 16: | ||
\connect netbox; | \connect netbox; | ||
GRANT CREATE ON SCHEMA public TO netbox; | GRANT CREATE ON SCHEMA public TO netbox; | ||
| + | |||
Проверяем подключение | Проверяем подключение | ||
| Строка 27: | Строка 30: | ||
| − | Redis<br> | + | '''<font color=blue>Redis</font>'''<br> |
| − | Устанавливаем | + | Устанавливаем redis-сервер |
apt install -y redis-server | apt install -y redis-server | ||
| + | |||
Проверяем | Проверяем | ||
| Строка 40: | Строка 44: | ||
| − | + | '''<font color=blue>Компоненты Netbox</font>'''<br> | |
Переходим к установке Netbox. Устанавливаемая версия 4.5 поддерживает Python 3.12 и выше | Переходим к установке 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 | apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev | ||
| Строка 60: | Строка 64: | ||
Рекомендуется устанавливать NetBox в каталог, названный в соответствии с номером его версии. Например, NetBox v4.5.0 следует установить в /opt/netbox-4.5.0, а симлинк из /opt/netbox/ будет указывать на это местоположение. Это позволяет устанавливать будущие версии параллельно, не прерывая текущую установку. При переходе на новую версию необходимо обновить только симлинк. | Рекомендуется устанавливать NetBox в каталог, названный в соответствии с номером его версии. Например, NetBox v4.5.0 следует установить в /opt/netbox-4.5.0, а симлинк из /opt/netbox/ будет указывать на это местоположение. Это позволяет устанавливать будущие версии параллельно, не прерывая текущую установку. При переходе на новую версию необходимо обновить только симлинк. | ||
| + | |||
Создаём пользователя и даём ему права | Создаём пользователя и даём ему права | ||
| Строка 83: | Строка 88: | ||
| − | ALLOWED_HOSTS | + | '''ALLOWED_HOSTS'''<br> |
| − | + | Это список допустимых имен хостов и IP-адресов, с помощью которых можно получить доступ к этому серверу. Надо указать хотя бы одно имя или IP-адрес(Для проверки заголовка HTTP-узла) | |
| + | ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123'] | ||
| − | |||
| − | + | '''API_TOKEN_PEPPERS'''<br> | |
| + | Код который будет использоваться для генерации контрольных сумм 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'''<br> | |
| − | + | Задаём параметры подключения к БД | |
| − | + | 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'''<br> | |
| + | Задаём параметры подключения к 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'''<br> | |
| − | + | Создаём secret-key | |
| + | python3 ../generate_secret_key.py | ||
| − | |||
| − | + | Пример конфига | |
| − | + | ALLOWED_HOSTS = ['netbox.iwad.ru', '172.16.37.28', '172.16.37.10'] | |
| − | + | ||
| − | + | DATABASES = { | |
| − | + | 'default': { | |
| − | + | 'ENGINE': 'django.db.backends.postgresql', # Database engine | |
| − | + | '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 | |
| − | + | } | |
| − | + | } | |
| − | + | ||
| − | + | REDIS = { | |
| − | + | 'tasks': { | |
| − | + | 'HOST': 'localhost', | |
| − | + | 'PORT': 6379, | |
| − | + | 'USERNAME': '', | |
| − | + | 'PASSWORD': '', | |
| − | + | 'DATABASE': 0, | |
| − | + | 'SSL': False, | |
| − | + | }, | |
| − | + | 'caching': { | |
| − | + | 'HOST': 'localhost', | |
| − | + | 'PORT': 6379, | |
| − | + | 'USERNAME': '', | |
| − | + | 'PASSWORD': '', | |
| − | + | 'DATABASE': 1, | |
| − | + | 'SSL': False, | |
| − | + | } | |
| − | + | } | |
| − | + | ||
| − | + | SECRET_KEY = 'N9-)X8OWr^aLQ-BL+dpNn897gdfg0bs%P8bHzEYUw2xrg73Ja4' | |
| − | + | ||
| − | + | # Optional settings # | |
| − | + | ADMINS = [ | |
| − | + | # ('John Doe', 'jdoe@example.com'), | |
| − | + | ] | |
| − | + | ||
| − | + | # Permit the retrieval of API tokens after their creation. | |
| − | ALLOWED_HOSTS = ['netbox.iwad.ru', '172.16.37.28', '172.16.37.10'] | + | ALLOW_TOKEN_RETRIEVAL = False |
| − | DATABASES = { | + | |
| − | + | # Base URL path if accessing NetBox within a directory. For example, if installed at https://example.com/netbox/, set: | |
| − | + | # BASE_PATH = 'netbox/' | |
| − | + | BASE_PATH = '' | |
| − | + | ||
| − | + | # API Cross-Origin Resource Sharing (CORS) settings. If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be | |
| − | + | # allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or | |
| − | + | # CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers | |
| − | + | CORS_ORIGIN_ALLOW_ALL = False | |
| − | + | CORS_ORIGIN_WHITELIST = [ | |
| − | } | + | # 'https://hostname.example.com'', |
| − | + | ] | |
| − | REDIS = { | + | CORS_ORIGIN_REGEX_WHITELIST = [ |
| − | + | # r'^(https?://)?(\w+\.)?example\.com$', | |
| − | + | ] | |
| − | + | ||
| − | + | # The name to use for the CSRF token cookie. | |
| − | + | #CSRF_COOKIE_NAME = 'csrftoken' | |
| − | + | ||
| − | + | CSRF_TRUSTED_ORIGINS = ['https://netbox.iwad.ru'] | |
| − | + | ||
| − | + | # Enable installed plugins. Add the name of each plugin to the list. | |
| − | + | PLUGINS = [ | |
| − | + | #"netbox_ipcalculator", | |
| − | + | ] | |
| − | + | ||
| − | + | # Remote authentication support | |
| − | + | REMOTE_AUTH_ENABLED = False | |
| − | + | REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend' | |
| − | } | + | REMOTE_AUTH_HEADER = 'HTTP_REMOTE_USER' |
| − | + | REMOTE_AUTH_USER_FIRST_NAME = 'HTTP_REMOTE_USER_FIRST_NAME' | |
| − | SECRET_KEY = 'N9-)X8OWr^aLQ-BL+ | + | REMOTE_AUTH_USER_LAST_NAME = 'HTTP_REMOTE_USER_LAST_NAME' |
| − | + | REMOTE_AUTH_USER_EMAIL = 'HTTP_REMOTE_USER_EMAIL' | |
| − | # | + | REMOTE_AUTH_AUTO_CREATE_USER = True |
| − | + | REMOTE_AUTH_DEFAULT_GROUPS = [] | |
| − | + | REMOTE_AUTH_DEFAULT_PERMISSIONS = {} | |
| − | |||
| − | ADMINS = [ | ||
| − | |||
| − | ] | ||
| − | |||
| − | # Permit the retrieval of API tokens after their creation. | ||
| − | ALLOW_TOKEN_RETRIEVAL = False | ||
| − | |||
| − | |||
| − | # Base URL path if accessing NetBox within a directory. For example, if installed at https://example.com/netbox/, set: | ||
| − | # BASE_PATH = 'netbox/' | ||
| − | BASE_PATH = '' | ||
| − | |||
| − | # API Cross-Origin Resource Sharing (CORS) settings. If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be | ||
| − | # allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or | ||
| − | # CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers | ||
| − | CORS_ORIGIN_ALLOW_ALL = False | ||
| − | CORS_ORIGIN_WHITELIST = [ | ||
| − | # 'https:// | ||
| − | ] | ||
| − | CORS_ORIGIN_REGEX_WHITELIST = [ | ||
| − | |||
| − | ] | ||
| − | |||
| − | # The name to use for the CSRF token cookie. | ||
| − | #CSRF_COOKIE_NAME = 'csrftoken' | ||
| − | |||
| − | CSRF_TRUSTED_ORIGINS = ['https://netbox.iwad.ru'] | ||
| − | |||
| − | # Enable installed plugins. Add the name of each plugin to the list. | ||
| − | PLUGINS = [ | ||
| − | #"netbox_ipcalculator", | ||
| − | ] | ||
| − | |||
| − | # Remote authentication support | ||
| − | REMOTE_AUTH_ENABLED = | ||
| − | REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend' | ||
| − | REMOTE_AUTH_HEADER = 'HTTP_REMOTE_USER' | ||
| − | REMOTE_AUTH_USER_FIRST_NAME = 'HTTP_REMOTE_USER_FIRST_NAME' | ||
| − | REMOTE_AUTH_USER_LAST_NAME = 'HTTP_REMOTE_USER_LAST_NAME' | ||
| − | REMOTE_AUTH_USER_EMAIL = 'HTTP_REMOTE_USER_EMAIL' | ||
| − | REMOTE_AUTH_AUTO_CREATE_USER = True | ||
| − | REMOTE_AUTH_DEFAULT_GROUPS = [] | ||
| − | REMOTE_AUTH_DEFAULT_PERMISSIONS = {} | ||
| − | |||
| − | |||
| Строка 248: | Строка 234: | ||
| − | + | Netbox работает как WSGI-приложение за HTTP-сервером. В нашем примере показано, как установить и настроить uWSGI для этой роли, однако доступны и другие WSGI-серверы, которые должны работать аналогично. | |
Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим pyuwsgi | Запускаем виртуальное окружение, если вышли на прошлом шаге, и ставим pyuwsgi | ||
| Строка 255: | Строка 241: | ||
| − | После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды | + | После установки добавим пакет в файл local_requirements.txt, чтобы обеспечить его повторную установку при последующих пересборках виртуальной среды |
| − | + | echo 'pyuwsgi' >> /opt/netbox/local_requirements.txt | |
| − | |||
| Строка 266: | Строка 251: | ||
Далее скопируем файлы systemd для управления uWSGI и фоновым рабочим процессом NetBox | Далее скопируем файлы systemd для управления uWSGI и фоновым рабочим процессом NetBox | ||
cp -v /opt/netbox/contrib/*.service /etc/systemd/system/ | cp -v /opt/netbox/contrib/*.service /etc/systemd/system/ | ||
| + | |||
Отредактируем файл netbox.service, удалив строку начинающуюся с ExecStart=/opt/netbox/venv/bin/gunicorn, и раскомментируем строку с ExecStart=/opt/netbox/venv/bin/uwsgi | Отредактируем файл netbox.service, удалив строку начинающуюся с ExecStart=/opt/netbox/venv/bin/gunicorn, и раскомментируем строку с ExecStart=/opt/netbox/venv/bin/uwsgi | ||
systemctl daemon-reload | systemctl daemon-reload | ||
| − | Стартуем сервис и проверяем он запустился | + | |
| + | Стартуем сервис и проверяем, что он запустился | ||
systemctl enable --now netbox netbox-rq | systemctl enable --now netbox netbox-rq | ||
systemctl status netbox.service | systemctl status netbox.service | ||
| Строка 311: | Строка 298: | ||
| + | Установка завершена, заходим в браузер и смотрим картинки | ||
| + | <font color=blue>'''LDAP аутентификация'''</font><br> | ||
| + | Ставим нужные пакеты | ||
| + | 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-аутентификацию в <code>configuration.py</code> | ||
| + | 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/ | |
| − | https://netboxlabs.com/docs/netbox/installation/ | ||
Текущая версия на 16:19, 15 марта 2026
Установим 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
Пример конфига
ALLOWED_HOSTS = ['netbox.iwad.ru', '172.16.37.28', '172.16.37.10']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql', # Database engine
'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
}
}
REDIS = {
'tasks': {
'HOST': 'localhost',
'PORT': 6379,
'USERNAME': ,
'PASSWORD': ,
'DATABASE': 0,
'SSL': False,
},
'caching': {
'HOST': 'localhost',
'PORT': 6379,
'USERNAME': ,
'PASSWORD': ,
'DATABASE': 1,
'SSL': False,
}
}
SECRET_KEY = 'N9-)X8OWr^aLQ-BL+dpNn897gdfg0bs%P8bHzEYUw2xrg73Ja4'
# Optional settings #
ADMINS = [
# ('John Doe', 'jdoe@example.com'),
]
# Permit the retrieval of API tokens after their creation.
ALLOW_TOKEN_RETRIEVAL = False
# Base URL path if accessing NetBox within a directory. For example, if installed at https://example.com/netbox/, set:
# BASE_PATH = 'netbox/'
BASE_PATH =
# API Cross-Origin Resource Sharing (CORS) settings. If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be
# allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or
# CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = [
# 'https://hostname.example.com,
]
CORS_ORIGIN_REGEX_WHITELIST = [
# r'^(https?://)?(\w+\.)?example\.com$',
]
# The name to use for the CSRF token cookie.
#CSRF_COOKIE_NAME = 'csrftoken'
CSRF_TRUSTED_ORIGINS = ['https://netbox.iwad.ru']
# Enable installed plugins. Add the name of each plugin to the list.
PLUGINS = [
#"netbox_ipcalculator",
]
# Remote authentication support
REMOTE_AUTH_ENABLED = False
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
REMOTE_AUTH_HEADER = 'HTTP_REMOTE_USER'
REMOTE_AUTH_USER_FIRST_NAME = 'HTTP_REMOTE_USER_FIRST_NAME'
REMOTE_AUTH_USER_LAST_NAME = 'HTTP_REMOTE_USER_LAST_NAME'
REMOTE_AUTH_USER_EMAIL = 'HTTP_REMOTE_USER_EMAIL'
REMOTE_AUTH_AUTO_CREATE_USER = True
REMOTE_AUTH_DEFAULT_GROUPS = []
REMOTE_AUTH_DEFAULT_PERMISSIONS = {}
Запускаем установку 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/