227 lines
9.5 KiB
Markdown
227 lines
9.5 KiB
Markdown
## Описание
|
||
|
||
Инфраструктурные сервисы обеспечивают базовую функциональность для всех приложений в экосистеме 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 - Обзор системы]] - основное приложение на этой инфраструктуре |