Files
second-mind-aep/Мой сервер/Authelia Authentication/Обзор системы.md
2025-08-04 14:26:29 +04:00

314 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Описание
Authelia Authentication - централизованная система аутентификации и авторизации для всех сервисов экосистемы aepif.ru. Обеспечивает Single Sign-On (SSO), двухфакторную аутентификацию и гранулярное управление доступом.
## Архитектура системы
```mermaid
graph TB
A[User Request] --> B[Traefik Reverse Proxy]
B --> C{Authelia Middleware}
C -->|Authenticated| D[Target Service]
C -->|Not Authenticated| E[Authelia Login Page]
E --> F[User Authentication]
F --> G[Session Storage - Redis]
F --> H[User Database - File]
G --> I[Session Validation]
I --> D
subgraph "Authelia Container"
E
F
I
J[TOTP 2FA]
K[Password Reset]
end
subgraph "Redis Container"
G
L[Session Data]
end
subgraph "Configuration"
H
M[Access Control Rules]
N[Notification Settings]
end
```
## Основные компоненты
### Authelia Server
- **Назначение**: Центральный сервер аутентификации
- **Домен**: `auth.aepif.ru`
- **Порт**: 9091
- **Технология**: Go-based authentication server
- **Особенности**:
- Forward Authentication integration с Traefik
- TOTP двухфакторная аутентификация
- Password reset через файловые уведомления
- Детальные политики доступа
### Redis Session Store
- **Назначение**: Хранение пользовательских сессий
- **Технология**: Redis 7 Alpine
- **Контейнер**: `auth_redis`
- **Особенности**:
- Персистентное хранение сессий
- Защита паролем (`Ll8qlQ3rgBFo4Syq`)
- Быстрый доступ к данным сессий
- Автоматическое истечение сессий
### File-based User Database
- **Назначение**: Хранение пользователей и их данных
- **Файл**: `/config/users_database.yml`
- **Особенности**:
- Argon2id хеширование паролей
- Группы пользователей для управления доступом
- Email адреса для уведомлений
## Конфигурация
### Docker Compose
Основная конфигурация в `/DOCKER/auth/docker-compose.yml`:
```yaml
services:
redis:
image: redis:7-alpine
container_name: auth_redis
command: redis-server --requirepass Ll8qlQ3rgBFo4Syq
authelia:
image: authelia/authelia:latest
container_name: authelia
depends_on:
- redis
volumes:
- ./authelia:/config
networks:
- proxy # Подключение к Traefik
```
### Основная конфигурация
Файл `/DOCKER/auth/authelia/configuration.yml`:
```yaml
jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
default_redirection_url: https://notes.aepif.ru
server:
host: 0.0.0.0
port: 9091
totp:
issuer: aepif.ru
session:
domain: aepif.ru
expiration: 1h
inactivity: 5m
redis:
host: redis
port: 6379
password: Ll8qlQ3rgBFo4Syq
```
## Политики доступа
### Access Control Rules
Текущие правила доступа:
```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**: Полный запрет доступа
## Пользователи и группы
### Структура пользователей
Файл `users_database.yml`:
```yaml
users:
admin:
displayname: "Administrator"
password: "$argon2id$..." # Хешированный пароль Argon2id
email: epifantsev1aa@gmail.com
groups:
- admins # Администраторская группа
- users # Базовая группа пользователей
```
### Управление паролями
- **Хеширование**: Argon2id (высокий уровень безопасности)
- **Reset процедура**: Через файловые уведомления
- **Требования**: Минимальная длина, сложность
## Двухфакторная аутентификация
### TOTP Configuration
- **Issuer**: `aepif.ru`
- **QR Code**: Автоматическая генерация для настройки
- **Backup Codes**: Коды восстановления доступа
- **Приложения**: Google Authenticator, Authy, 1Password
### Настройка TOTP
1. Первый вход с логином/паролем
2. Сканирование QR кода мобильным приложением
3. Подтверждение TOTP кода
4. Сохранение backup кодов
## Интеграция с Traefik
### Forward Auth Middleware
Traefik labels для защищенных сервисов:
```yaml
labels:
- traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.aepif.ru
- traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true
- traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email
```
### Headers передача
Authelia передает в backend сервисы:
- **Remote-User**: Username аутентифицированного пользователя
- **Remote-Groups**: Группы пользователя
- **Remote-Name**: Display name
- **Remote-Email**: Email адрес
## Сессии и безопасность
### Session Management
- **Время жизни**: 1 час активной сессии
- **Неактивность**: 5 минут до автоматического выхода
- **Хранение**: Redis с паролем
- **Domain**: `.aepif.ru` (работает для всех поддоменов)
### Regulation (Rate Limiting)
Защита от брутфорса:
```yaml
regulation:
max_retries: 3 # Максимум попыток входа
find_time: 2m # Период для подсчета попыток
ban_time: 5m # Время блокировки
```
### Безопасность
- **JWT Secret**: Секретный ключ для подписи токенов
- **Session Secret**: Ключ для шифрования сессий
- **Encryption Key**: Ключ для шифрования хранилища
- **Secure Headers**: Автоматические заголовки безопасности
## Уведомления
### File Notifier
- **Файл**: `/config/notification.txt`
- **Назначение**: Password reset уведомления
- **Формат**: Простой текстовый файл
### Email Integration (Future)
Для полноценных email уведомлений потребуется настройка SMTP:
- Password reset emails
- 2FA setup notifications
- Security alerts
## Мониторинг
### Health Checks
```bash
# Проверка доступности Authelia
curl -I https://auth.aepif.ru
# Проверка API здоровья
curl https://auth.aepif.ru/api/health
# Логи Authelia
docker logs authelia -f
# Проверка Redis
docker exec auth_redis redis-cli -a Ll8qlQ3rgBFo4Syq ping
```
### Metrics
- **Authentication attempts**: Успешные/неуспешные попытки входа
- **Session statistics**: Активные сессии, время жизни
- **2FA usage**: Статистика использования TOTP
- **Access denials**: Заблокированные запросы
## Структура файлов
```
/DOCKER/auth/
├── docker-compose.yml # Конфигурация Authelia + Redis
├── authelia/ # Конфигурация Authelia
│ ├── configuration.yml # Основная конфигурация
│ ├── users_database.yml # База пользователей
│ ├── db.sqlite3 # SQLite база данных (для хранения состояния)
│ └── notification.txt # Файл уведомлений
└── volumes/
└── redis_data/ # Данные Redis
```
## Troubleshooting
### Общие проблемы
1. **Не работает аутентификация**: Проверить сеть `proxy`, статус контейнеров
2. **Сессии не сохраняются**: Проверить подключение к Redis
3. **TOTP не работает**: Синхронизировать время на сервере и устройстве
4. **Password reset**: Проверить файл уведомлений
### Логи отладки
```yaml
# В configuration.yml для детальных логов
log:
level: debug
```
## Backup и восстановление
### Критически важные данные
- **configuration.yml**: Основная конфигурация
- **users_database.yml**: База пользователей
- **db.sqlite3**: Состояние системы (2FA secrets, etc.)
- **redis_data**: Активные сессии
### Процедура backup
```bash
# Backup конфигурации Authelia
tar czf authelia_config_backup.tar.gz -C /DOCKER/auth/authelia .
# Backup Redis данных
docker exec auth_redis redis-cli -a Ll8qlQ3rgBFo4Syq BGSAVE
```
## Связанные сервисы
- **[[Мой сервер/Traefik Reverse Proxy/Обзор системы|Traefik]]** - интеграция через Forward Auth middleware
- **[[Мой сервер/Second Mind Setup/Обзор системы|Second Mind]]** - защита доступа к заметкам
- **Redis** - хранение сессий и состояния
## Связанные документы
- **[[Authelia Authentication - Конфигурации]]** - детальные настройки всех компонентов
- **[[Authelia Authentication - Развертывание]]** - пошаговая установка
- **[[Authelia Authentication - Администрирование]]** - управление пользователями и мониторинг