Files
second-mind-aep/Мой сервер/Инфраструктура/Обзор системы.md
2025-08-04 12:45:56 +04:00

9.5 KiB
Raw Blame History

Описание

Инфраструктурные сервисы обеспечивают базовую функциональность для всех приложений в экосистеме aepif.ru. Включают в себя reverse proxy с автоматическими SSL сертификатами и систему аутентификации.

Архитектура инфраструктуры

graph TB
    A[Internet] --> B[Traefik Reverse Proxy]
    B --> C[Authelia Auth Service]
    B --> D[Second Mind]
    B --> E[Other Services]
    
    C --> F[Redis Session Store]
    C --> G[SQLite User Database]
    
    B --> H[Let's Encrypt]
    H --> I[SSL Certificates]
    
    subgraph "Network: proxy"
        B
        C
        D
        E
    end
    
    subgraph "Auth Network"
        C
        F
    end

Основные компоненты

Traefik Reverse Proxy

  • Назначение: Централизованная маршрутизация трафика
  • Домен: traefik.aepif.ru (dashboard)
  • Порты:
    • 80 (HTTP) → автоматический редирект на HTTPS
    • 443 (HTTPS)
    • 2222 (SSH для Git)
    • 8080 (Dashboard)
  • Функции:
    • Автоматическое получение SSL сертификатов от Let's Encrypt
    • Load balancing между контейнерами
    • TCP и HTTP маршрутизация
    • Middleware для аутентификации

Authelia Authentication

  • Назначение: Централизованная аутентификация и авторизация
  • Домен: auth.aepif.ru
  • Технология: Forward Auth middleware
  • Функции:
    • Single Sign-On (SSO) для всех сервисов
    • Two-factor authentication (TOTP)
    • Session management через Redis
    • Политики доступа по доменам

Redis Session Store

  • Назначение: Хранение пользовательских сессий
  • Технология: Redis 7 Alpine
  • Особенности:
    • Персистентное хранение сессий
    • Защита паролем
    • Быстрый доступ к данным сессий

Структура проектов

Reverse Proxy

/DOCKER/reverse-proxy/
├── docker-compose.yml    # Конфигурация Traefik
├── .env                  # Переменные окружения
└── volumes/
    └── traefik_data/     # ACME сертификаты и конфиг

Authentication Service

/DOCKER/auth/
├── docker-compose.yml    # Конфигурация Authelia + Redis
├── .env                  # Переменные окружения и секреты
└── authelia/            # Конфигурация Authelia
    ├── configuration.yml # Основная конфигурация
    ├── users_database.yml # База пользователей
    ├── db.sqlite3        # SQLite база данных
    └── notification.txt  # Файл уведомлений

Принцип работы

Маршрутизация запросов

  1. Пользователь обращается к любому поддомену *.aepif.ru
  2. Traefik перехватывает запрос и анализирует Host header
  3. Traefik проверяет, требуется ли аутентификация (middleware authelia)
  4. Если нужна аутентификация → перенаправление на auth.aepif.ru
  5. Authelia проверяет сессию или запрашивает логин/пароль
  6. После успешной аутентификации → возврат к исходному сервису
  7. Traefik проксирует запрос к целевому контейнеру

SSL сертификаты

  1. Let's Encrypt ACME автоматически получает сертификаты для новых доменов
  2. Traefik автоматически обновляет сертификаты перед истечением
  3. Все HTTP запросы автоматически перенаправляются на HTTPS
  4. Сертификаты сохраняются в volume для персистентности

Домены и маршрутизация

Домен Сервис Аутентификация Описание
traefik.aepif.ru Traefik Dashboard Нет* Панель управления Traefik
auth.aepif.ru Authelia Bypass Страница входа в систему
notes.aepif.ru Second Mind Authelia Заметки с защитой
git.aepif.ru Gitea Bypass Git-сервер (собственная авторизация)
webhook.aepif.ru Webhook Service Bypass API для автоматизации

*Dashboard Traefik в production должен быть защищен

Политики доступа

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

access_control:
  default_policy: deny  # По умолчанию запрещен доступ
  rules:
    - domain: notes.aepif.ru
      policy: one_factor    # Требует логин/пароль
    - domain: git.aepif.ru
      policy: bypass        # Собственная авторизация Gitea
    - domain: webhook.aepif.ru
      policy: bypass        # API с токеном
    - domain: auth.aepif.ru
      policy: bypass        # Сама страница входа

Типы политик

  • bypass: Доступ без аутентификации через Authelia
  • one_factor: Требует логин/пароль
  • two_factor: Требует логин/пароль + TOTP код
  • deny: Полный запрет доступа

Пользователи и группы

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

users:
  admin:
    displayname: "Administrator"
    password: "$argon2id$..." # Хешированный пароль
    email: epifantsev1aa@gmail.com
    groups:
      - admins    # Администраторская группа
      - users     # Базовая группа пользователей

Управление паролями

  • Пароли хранятся в формате Argon2id (безопасное хеширование)
  • Поддержка reset паролей через email уведомления
  • Интеграция с TOTP для двухфакторной аутентификации

Безопасность

Уровни защиты

  1. SSL/TLS: Все соединения зашифрованы
  2. Forward Auth: Централизованная проверка аутентификации
  3. Session Management: Безопасное хранение сессий в Redis
  4. Password Hashing: Argon2id для хранения паролей
  5. Rate Limiting: Защита от брутфорса (3 попытки за 2 минуты)
  6. Session Expiration: Автоматическое истечение сессий

Настройки безопасности

regulation:
  max_retries: 3      # Максимум попыток входа
  find_time: 2m       # Период для подсчета попыток
  ban_time: 5m        # Время блокировки

session:
  expiration: 1h      # Время жизни сессии
  inactivity: 5m      # Время неактивности до выхода

Мониторинг

Доступные метрики

  • Traefik Dashboard: Статистика запросов, ошибок, времени ответа
  • Authelia Logs: Попытки входа, ошибки аутентификации
  • Redis Metrics: Использование памяти, количество ключей
  • SSL Certificate Status: Статус и срок действия сертификатов

Health Checks

# Проверка Traefik
curl -I https://traefik.aepif.ru

# Проверка Authelia
curl -I https://auth.aepif.ru

# Проверка SSL сертификатов
openssl s_client -connect aepif.ru:443 -servername aepif.ru | openssl x509 -noout -dates

Преимущества архитектуры

  • Централизация: Единая точка входа для всех сервисов
  • Автоматизация SSL: Не нужно вручную управлять сертификатами
  • Безопасность: Единая система аутентификации
  • Масштабируемость: Легко добавлять новые сервисы
  • Мониторинг: Централизованная статистика
  • Zero Downtime: Обновления без простоя сервисов

Связанные документы