Настройки сервера
Конфигурационный файл
Все настройки приложения хранятся в едином YAML-файле конфигурации.
Основная структура файла
Файл конфигурации разделен на несколько основных секций:
config- Основные настройки приложения.database- Настройки подключения к базе данных.django- Специфичные настройки Django фреймворка.security- Политики безопасности и паролей.two_factor_auth- Настройки двухфакторной аутентификации.ldap- Настройки интеграции с LDAP/Active Directory.sso- Настройки единого входа (Single Sign-On).redis- Настройки подключения к Redis.rabbitmq- Настройки подключения к RabbitMQ (для Celery).
Секция config (Основные настройки)
debug
- Тип: Boolean
- По умолчанию: false
- Описание: Определяет режим работы приложения. Влияет на поведение логирования, кэширования и других компонентов.
mode
- Тип: String
- Пример:
local,stage,prod - Описание: Определяет режим работы приложения. Влияет на поведение логирования, кэширования и других компонентов.
host
- Тип: String
- Пример:
"localhost","0.0.0.0" - Описание: Хост, на котором будет запущен сервер приложения.
port
- Тип: Integer
- Пример:
80,8000 - Описание: Порт для запуска сервера приложения.
web_base_url
- Тип: String (URL)
- Пример:
"https://web.stage.bimarkit.com" - Описание: Базовый URL фронтенд-приложения, используется для генерации ссылок.
Секция database (База данных)
engine
- Тип: String
- Пример:
"django.contrib.gis.db.backends.postgis" - Описание: Движок базы данных для Django (используется для пространственных данных).
default
- Подсекция, содержащая параметры подключения:
host(Тип: String) - Хост базы данных.port(Тип: Integer) - Порт базы данных.name(Тип: String) - Имя базы данных.user(Тип: String) - Имя пользователя БД.password(Тип: String) - Пароль пользователя БД.engine(Тип: String) - Альтернативный движок для дополнительных возможностей ( например,psqlextra.backend).
Секция django (Настройки Django)
secret_key
- Тип: String
- Описание: Секретный ключ Django для подписи сессий, токенов и т.д. Должен быть уникальным и храниться в тайне!
allowed_hosts
- Тип: String (разделенный запятыми список) или
"*" - Описание: Список доменных имен/хостов, с которых может обслуживаться это приложение.
"*"разрешает все (не для продакшена).
access_token_lifetime_min
- Тип: Integer (минуты)
- Описание: Время жизни Access Token (JWT) для аутентификации.
refresh_token_lifetime_min
- Тип: Integer (минуты)
- Описание: Время жизни Refresh Token (JWT).
cors_allowed_origins
- Тип: String (URL)
- Описание: Origin, с которого фронтенд может делать запросы к API (для настройки CORS).
session_age
- Тип: Integer
- По умолчанию: 1209600 (14 дней)
- Описание: Время жизни сессии при неактивности пользователя (в секундах).
Секция security (Политики безопасности)
log_rotation_days
- Тип: Integer
- По умолчанию: 365
- Описание: Период ротации логов безопасности (в днях).
storage_limit_mb
- Тип: Integer
- По умолчанию: 1000
- Описание: Лимит хранилища логов ИБ в MB
memory_warning_percent
- Тип: Integer
- По умолчанию: 70
- Описание: Порог после которого будут выдаваться предупреждения о заполнении хранилища логов ИБ
login_attempts_limit
- Тип: Integer
- По умолчанию: 3
- Описание: Лимит попыток входа.
login_attempts_timeout
- Тип: Integer
- По умолчанию: 300
- Описание: Время (в минутах) блокировки пользователя после превышения лимита попыток входа.
Политики сложности пароля:
password_min_length - Минимальная длина.
- Тип: Integer
- По умолчанию: 8
- Описание: Минимальная длина пароля.
password_user_attributes_check - Проверка на сходство с именем, почтой и т.д.
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли пароль на сходство с атрибутами пользователя.
password_common_check - Проверка по списку часто используемых паролей.
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли пароль на наличие в списке распространенных паролей.
password_numeric_check - Запрет паролей, состоящих только из цифр.
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли что пароль не состоит из цифр полностью.
password_need_specials
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли что пароль содержит специальные символы.
password_need_uppercase
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли что пароль содержит буквы в верхнем регистре.
password_need_lowercase
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли что пароль содержит буквы в нижнем регистре.
password_need_number
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли что пароль содержит цифры.
password_need_three_letters
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли что пароль содержит хотя бы три различных символа.
password_weak_check - Проверка на простые последовательности (12345, qwerty).
- Тип: Boolean
- По умолчанию: true
- Описание: Проверять ли пароль на содержание распространённых фраз и последовательностей.
password_history - Включение проверки истории паролей.
- Тип: Boolean
- По умолчанию: true
- Описание: Запрещать ли совпадение с паролем который уже был использован до этого.
password_history_length - Глубина истории (сколько последних паролей запоминать).
- Тип: Int
- По умолчанию: 3
- Описание: Глубина истории при проверке на совпадение со старыми паролями пользователя.
password_expire_days - Срок действия пароля (дней). 0 - пароль не истекает.
- Тип: Int
- По умолчанию: 0 - без ограничений
- Описание: Ограничение времени жизни пароля.
Секция two_factor_auth (2FA)
enabled
- Тип: Boolean
- Описание: Глобальное включение/выключение двухфакторной аутентификации.
require_after_failed_attempts
- Тип: Integer
- Описание: Требовать 2FA после указанного количества неудачных попыток входа.
0- всегда требовать.
code_length
- Тип: Integer
- Описание: Длина одноразового кода для 2FA.
Секция ldap (Интеграция с LDAP/AD)
Настройки подключения по LDAP указаны в разделе Настройки LDAP
Секция sso (Единый вход)
Настройки SSO указаны в разделе Настройки SSO
Секции redis и rabbitmq (Внешние сервисы)
redis.url
- Тип: String (URL)
- Пример:
"redis://localhost:6379/0" - Описание: Полный URL для подключения к Redis (используется для кэша, Celery брокера результатов).
rabbitmq.url
- Тип: String (URL)
- Пример:
"amqp://guest:guest@localhost:5672/" - Описание: Полный URL для подключения к RabbitMQ (используется как брокер сообщений для Celery).
Общие рекомендации
config.debug
config:
debug: false
Объяснение: Режим отладки должен быть выключен в продакшен-окружении, чтобы предотвратить утечку информации.
SECRET_KEY
SECRET_KEY = 'your_strong_secret_key_here'
Объяснение: Используйте сильный и уникальный секретный ключ. Не храните его в репозитории или публично доступных местах.
MODE
mode: "prod"
Объяснение: Установите режим работы приложения как prod (production) для активации соответствующих настроек
безопасности.
DJANGO_ALLOWED_HOSTS
DJANGO_ALLOWED_HOSTS = 'example.com,www.example.com'
Объяснение: Ограничьте список разрешенных хостов, чтобы предотвратить атаки типа Host header injection.
ACCESS_TOKEN_LIFETIME_MIN
ACCESS_TOKEN_LIFETIME_MIN = 15
Объяснение: Уменьшите время жизни access token для минимизации ущерба при компрометации токена.
REFRESH_TOKEN_LIFETIME_MIN
REFRESH_TOKEN_LIFETIME_MIN = 60 * 24 * 7 # 7 дней
Объяснение: Установите разумное ограничение времени жизни refresh token, например, 7 дней.
SECURITY_LOG_ROTATION_DAYS
SECURITY_LOG_ROTATION_DAYS = 365
Объяснение: Храните логи безопасности не менее одного года для анализа и аудита.
SQL_PASSWORD
SQL_PASSWORD = 'your_strong_db_password'
Объяснение: Используйте сложный пароль для базы данных. Избегайте использования простых или стандартных паролей.
CELERY_TASK_ALWAYS_EAGER
CELERY_TASK_ALWAYS_EAGER = False
Объяснение: Отключите синхронное выполнение задач Celery в продакшене, чтобы избежать блокировки основного потока.
PASSWORD_MIN_LENGTH
PASSWORD_MIN_LENGTH = 12
Объяснение: Увеличьте минимальную длину пароля до 12 символов для повышения уровня безопасности.
PASSWORD_USER_ATTRIBUTES
PASSWORD_USER_ATTRIBUTES = True
Объяснение: Включите проверку пароля на сходство с атрибутами пользователя (например, имя, фамилия).
PASSWORD_COMMON_PASSWORD
PASSWORD_COMMON_PASSWORD = True
Объяснение: Проверьте пароль на наличие в списке распространенных паролей.
PASSWORD_NUMERIC_PASSWORD
PASSWORD_NUMERIC_PASSWORD = True
Объяснение: Проверьте, что пароль не состоит только из цифр.
LOGIN_ATTEMPTS_LIMIT
LOGIN_ATTEMPTS_LIMIT = 5
Объяснение: Установите лимит попыток входа (например, 5) для предотвращения брутфорс-атак.
LOGIN_ATTEMPTS_TIMEOUT
LOGIN_ATTEMPTS_TIMEOUT = 15 # в минутах
Объяснение: Сократите время блокировки после превышения лимита попыток входа, чтобы минимизировать влияние на пользователей.