vault backup: 2025-08-04 12:45:56
This commit is contained in:
227
Мой сервер/Инфраструктура/Обзор системы.md
Normal file
227
Мой сервер/Инфраструктура/Обзор системы.md
Normal file
@@ -0,0 +1,227 @@
|
||||
## Описание
|
||||
|
||||
Инфраструктурные сервисы обеспечивают базовую функциональность для всех приложений в экосистеме 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 - Обзор системы]] - основное приложение на этой инфраструктуре
|
||||
Reference in New Issue
Block a user