## Описание Инфраструктурные сервисы обеспечивают базовую функциональность для всех приложений в экосистеме aepif.ru. Включают в себя reverse proxy с автоматическими SSL сертификатами и систему аутентификации. ## Архитектура инфраструктуры ```mermaid 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 ```yaml 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**: Полный запрет доступа ## Пользователи и группы ### Структура пользователей ```yaml 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**: Автоматическое истечение сессий ### Настройки безопасности ```yaml 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 ```bash # Проверка 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**: Обновления без простоя сервисов ## Связанные документы - [[Инфраструктура - Конфигурации]] - детальные настройки всех компонентов - [[Инфраструктура - Развертывание]] - установка и первоначальная настройка - [[Инфраструктура - Администрирование]] - обслуживание и мониторинг - [[Second Mind - Обзор системы]] - основное приложение на этой инфраструктуре