diff --git a/Мой сервер/Authelia Authentication/Конфигурации.md b/Мой сервер/Authelia Authentication/Конфигурации.md index af003d6..0dcd0aa 100644 --- a/Мой сервер/Authelia Authentication/Конфигурации.md +++ b/Мой сервер/Authelia Authentication/Конфигурации.md @@ -1,29 +1,407 @@ # Authelia Authentication - Конфигурации -## Детальные настройки конфигурации Authelia - -*Документация будет дополнена деталями конфигурации* +← **[[Обзор системы|← Назад к обзору]]** ## Docker Compose конфигурация -*Настройки контейнеров Authelia и Redis* + +### Основной файл: `/DOCKER/auth/docker-compose.yml` + +```yaml +version: '3.8' +services: + redis: + image: redis:7-alpine + container_name: auth_redis + volumes: + - redis_data:/data + networks: + - default + command: redis-server --requirepass Ll8qlQ3rgBFo4Syq + restart: unless-stopped + + authelia: + image: authelia/authelia:latest + container_name: authelia + depends_on: + - redis + volumes: + - ./authelia:/config + networks: + - default + - proxy + labels: + - traefik.enable=true + - traefik.http.routers.authelia.rule=Host(`auth.aepif.ru`) + - traefik.http.routers.authelia.tls.certresolver=letsencrypt + - traefik.http.services.authelia.loadbalancer.server.port=9091 + - 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 + restart: unless-stopped + environment: + - TZ=Europe/Moscow + +volumes: + redis_data: + +networks: + proxy: + external: true + default: + driver: bridge +``` ## Основной файл configuration.yml -*Разбор всех параметров конфигурации* -## User Database -*Управление файлом users_database.yml* +### Полная конфигурация: `/DOCKER/auth/authelia/configuration.yml` + +```yaml +--- +theme: auto +jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA +default_redirection_url: https://notes.aepif.ru + +server: + host: 0.0.0.0 + port: 9091 + +log: + level: info + +totp: + issuer: aepif.ru + +authentication_backend: + file: + path: /config/users_database.yml + +access_control: + default_policy: deny + rules: + - domain: notes.aepif.ru + policy: one_factor + - domain: git.aepif.ru + policy: bypass + - domain: webhook.aepif.ru + policy: bypass + - domain: auth.aepif.ru + policy: bypass + +session: + name: authelia_session + domain: aepif.ru + secret: 91Zc/PM0EogwZbsX0tsDGLpr4Wg7zwtQUzcp5tYP5dNdRNTlpkXBfJr9EivuD+A4 + expiration: 1h + inactivity: 5m + redis: + host: redis + port: 6379 + password: Ll8qlQ3rgBFo4Syq + +regulation: + max_retries: 3 + find_time: 2m + ban_time: 5m + +storage: + encryption_key: sWLemnH0QNsYsYvbav59mQOWxLOeUvSl + local: + path: /config/db.sqlite3 + +notifier: + filesystem: + filename: /config/notification.txt +``` + +### Разбор конфигурации по разделам + +#### Server Configuration +```yaml +server: + host: 0.0.0.0 # Слушать на всех интерфейсах + port: 9091 # Внутренний порт контейнера +``` + +#### JWT и безопасность +```yaml +jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA +default_redirection_url: https://notes.aepif.ru +theme: auto # Автоматическая тема (dark/light) +``` + +#### Logging +```yaml +log: + level: info # Уровни: trace, debug, info, warn, error +``` + +## User Database Configuration + +### Файл пользователей: `/DOCKER/auth/authelia/users_database.yml` + +```yaml +users: + admin: + displayname: "Administrator" + password: "$argon2id$v=19$m=65536,t=3,p=4$..." # Argon2id hash + email: epifantsev1aa@gmail.com + groups: + - admins + - users +``` + +### Генерация паролей +```bash +# Использование authelia для генерации хеша пароля +docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 --password 'your_password' + +# Результат вставляется в users_database.yml +``` + +### Структура пользователей +- **displayname**: Отображаемое имя пользователя +- **password**: Argon2id хеш пароля +- **email**: Email для уведомлений и 2FA +- **groups**: Массив групп для контроля доступа ## Access Control Rules -*Детальная настройка политик доступа* + +### Политики доступа +```yaml +access_control: + default_policy: deny # По умолчанию запрещено + rules: + - domain: notes.aepif.ru + policy: one_factor # Требует логин + пароль + - domain: git.aepif.ru + policy: bypass # Без проверки Authelia + - domain: webhook.aepif.ru + policy: bypass # API сервис + - domain: auth.aepif.ru + policy: bypass # Сама страница входа +``` + +### Типы политик +- **deny**: Полный запрет доступа +- **bypass**: Доступ без аутентификации через Authelia +- **one_factor**: Только логин + пароль +- **two_factor**: Логин + пароль + TOTP + +### Расширенные правила доступа +```yaml +# Пример дополнительных правил +access_control: + rules: + # Ограничение по группам + - domain: admin.aepif.ru + policy: two_factor + subject: "group:admins" + + # Ограничение по пользователям + - domain: private.aepif.ru + policy: one_factor + subject: "user:admin" + + # Ограничение по IP/сети + - domain: internal.aepif.ru + policy: one_factor + networks: + - "192.168.1.0/24" + + # Ограничение по методам HTTP + - domain: api.aepif.ru + policy: one_factor + methods: + - "GET" + - "POST" +``` ## Session Configuration -*Настройки сессий и Redis интеграции* + +### Настройки сессий +```yaml +session: + name: authelia_session # Имя cookie + domain: aepif.ru # Домен для cookie (все поддомены) + secret: 91Zc/PM0EogwZbsX0tsDGLpr4Wg7zwtQUzcp5tYP5dNdRNTlpkXBfJr9EivuD+A4 + expiration: 1h # Время жизни сессии + inactivity: 5m # Время неактивности до выхода + + redis: + host: redis # Хост Redis контейнера + port: 6379 # Порт Redis + password: Ll8qlQ3rgBFo4Syq # Пароль Redis +``` + +### Дополнительные настройки сессий +```yaml +session: + # Дополнительные опции безопасности + same_site: lax # Политика SameSite cookie + secure: true # Только HTTPS (автоматически в production) + remember_me_duration: 1M # Время "запомнить меня" +``` ## TOTP Configuration -*Конфигурация двухфакторной аутентификации* -## Notifier Settings -*Настройка уведомлений* +### Двухфакторная аутентификация +```yaml +totp: + issuer: aepif.ru # Отображается в приложении аутентификации + algorithm: sha1 # sha1, sha256, sha512 + digits: 6 # Количество цифр в коде + period: 30 # Период действия кода в секундах + skew: 1 # Допуск на рассинхронизацию времени +``` ---- -*Эта страница находится в разработке* \ No newline at end of file +### Поддерживаемые приложения +- Google Authenticator +- Authy +- Microsoft Authenticator +- 1Password +- Bitwarden + +## Redis Configuration + +### Настройки Redis контейнера +```yaml +redis: + image: redis:7-alpine + command: redis-server --requirepass Ll8qlQ3rgBFo4Syq + volumes: + - redis_data:/data # Персистентное хранение +``` + +### Дополнительные настройки Redis +```yaml +# В configuration.yml для дополнительных опций Redis +session: + redis: + host: redis + port: 6379 + password: Ll8qlQ3rgBFo4Syq + database_index: 0 # Номер базы данных + maximum_active_connections: 8 + minimum_idle_connections: 0 +``` + +## Regulation (Rate Limiting) + +### Защита от брутфорса +```yaml +regulation: + max_retries: 3 # Максимум попыток входа + find_time: 2m # Временное окно для подсчета попыток + ban_time: 5m # Время блокировки после превышения лимита +``` + +### Расширенная конфигурация +```yaml +regulation: + max_retries: 3 + find_time: 2m + ban_time: 5m + + # Дополнительные настройки + bantime_multiplier: 2 # Увеличение времени блокировки при повторных нарушениях + cleanup_interval: 1h # Интервал очистки старых записей +``` + +## Storage Configuration + +### Локальное хранилище +```yaml +storage: + encryption_key: sWLemnH0QNsYsYvbav59mQOWxLOeUvSl + local: + path: /config/db.sqlite3 +``` + +### База данных содержит +- TOTP секреты пользователей +- U2F/WebAuthn данные +- Статистика авторизации +- Конфигурация двухфакторной аутентификации + +## Notifier Configuration + +### Файловые уведомления +```yaml +notifier: + filesystem: + filename: /config/notification.txt +``` + +### SMTP уведомления (альтернатива) +```yaml +notifier: + smtp: + username: your_email@gmail.com + password: your_app_password + host: smtp.gmail.com + port: 587 + sender: your_email@gmail.com + startup_check_address: your_email@gmail.com + disable_require_tls: false + disable_html_emails: false + + subject: "[Authelia] {title}" + templates_path: /config/templates +``` + +## Traefik Integration Labels + +### Forward Auth Middleware +```yaml +labels: + # Основная конфигурация middleware + - 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 +``` + +### Применение к сервисам +```yaml +# Для защищенного сервиса +labels: + - traefik.http.routers.protected-service.middlewares=authelia@docker +``` + +## Environment Variables + +### Переменные окружения +```yaml +environment: + - TZ=Europe/Moscow # Часовой пояс + - AUTHELIA_JWT_SECRET_FILE=/run/secrets/jwt_secret # Секреты через файлы + - AUTHELIA_SESSION_SECRET_FILE=/run/secrets/session_secret +``` + +## Безопасность конфигурации + +### Генерация секретов +```bash +# Генерация случайных секретов +openssl rand -base64 64 # Для JWT и session secrets +openssl rand -hex 32 # Для encryption key +``` + +### Рекомендации по безопасности +1. **Используйте сильные пароли**: Все секреты должны быть случайными +2. **Ротация секретов**: Регулярно обновляйте JWT и session секреты +3. **Ограничьте доступ к файлам**: Конфигурационные файлы должны быть доступны только контейнеру +4. **Мониторинг попыток входа**: Настройте алерты на подозрительную активность + +### Защита конфигурационных файлов +```bash +# Правильные права доступа +chmod 600 /DOCKER/auth/authelia/configuration.yml +chmod 600 /DOCKER/auth/authelia/users_database.yml +chown root:root /DOCKER/auth/authelia/*.yml +``` + +## Связанные файлы + +- **[[Развертывание]]** - инструкции по установке и настройке +- **[[Администрирование]]** - управление пользователями и мониторинг +- **[[../Traefik Reverse Proxy/Конфигурации]]** - интеграция с reverse proxy \ No newline at end of file diff --git a/Мой сервер/Git Service/Конфигурации.md b/Мой сервер/Git Service/Конфигурации.md index 2fc2e87..46fb908 100644 --- a/Мой сервер/Git Service/Конфигурации.md +++ b/Мой сервер/Git Service/Конфигурации.md @@ -1,37 +1,409 @@ # Git Service - Конфигурации -## Обзор конфигураций - -Этот документ содержит детальную информацию о настройках всех компонентов Git Service. +← **[[Обзор системы|← Назад к обзору]]** ## Docker Compose конфигурация ### Основной файл: `/DOCKER/git/docker-compose.yml` -*Документация будет дополнена с деталями конфигурации* +```yaml +version: '3.8' +services: + gitea: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=postgres + - GITEA__database__HOST=db:5432 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWORD=sG7hZXBQDAtRab9A + - GITEA__server__SSH_DOMAIN=git.aepif.ru + - GITEA__server__SSH_PORT=2222 + volumes: + - gitea_data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + depends_on: + - db + networks: + - default + - proxy + labels: + - traefik.enable=true + # HTTP routing + - traefik.http.routers.gitea.rule=Host(`git.aepif.ru`) + - traefik.http.routers.gitea.tls.certresolver=letsencrypt + - traefik.http.services.gitea.loadbalancer.server.port=3000 + # TCP routing for SSH + - traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`) + - traefik.tcp.routers.gitea-ssh.entrypoints=ssh + - traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22 + restart: unless-stopped + + db: + image: postgres:14 + container_name: gitea_db + environment: + - POSTGRES_USER=gitea + - POSTGRES_PASSWORD=sG7hZXBQDAtRab9A + - POSTGRES_DB=gitea + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - default + restart: unless-stopped + +volumes: + gitea_data: + external: true + name: gitea_gitea_data + postgres_data: + external: true + name: gitea_postgres_data + +networks: + proxy: + external: true + default: + driver: bridge +``` ## Gitea конфигурация -### Переменные окружения -*Настройки Gitea через environment variables* +### Environment Variables +```yaml +environment: + # User Configuration + - USER_UID=1000 # UID пользователя в контейнере + - USER_GID=1000 # GID пользователя в контейнере + + # Database Configuration + - GITEA__database__DB_TYPE=postgres + - GITEA__database__HOST=db:5432 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWORD=sG7hZXBQDAtRab9A + + # Server Configuration + - GITEA__server__SSH_DOMAIN=git.aepif.ru + - GITEA__server__SSH_PORT=2222 +``` -### Базовые настройки -*Конфигурация через app.ini* +### Расширенные настройки через переменные окружения +```yaml +environment: + # Server Settings + - GITEA__server__DOMAIN=git.aepif.ru + - GITEA__server__ROOT_URL=https://git.aepif.ru + - GITEA__server__DISABLE_SSH=false + - GITEA__server__START_SSH_SERVER=true + - GITEA__server__SSH_PORT=22 # Внутренний SSH порт + - GITEA__server__SSH_LISTEN_PORT=22 # Порт прослушивания в контейнере + + # Security Settings + - GITEA__security__INSTALL_LOCK=true + - GITEA__security__SECRET_KEY=your_secret_key_here + + # Service Settings + - GITEA__service__DISABLE_REGISTRATION=true + - GITEA__service__REQUIRE_SIGNIN_VIEW=false + - GITEA__service__ENABLE_NOTIFY_MAIL=false + + # Repository Settings + - GITEA__repository__DEFAULT_BRANCH=main + - GITEA__repository__ENABLE_PUSH_CREATE_USER=true + - GITEA__repository__ENABLE_PUSH_CREATE_ORG=false + + # Webhook Settings + - GITEA__webhook__ALLOWED_HOST_LIST=* + - GITEA__webhook__SKIP_TLS_VERIFY=false +``` + +### Структура конфигурации app.ini +Gitea также поддерживает конфигурацию через файл `app.ini`: + +```ini +# /data/gitea/conf/app.ini внутри контейнера +[database] +DB_TYPE = postgres +HOST = db:5432 +NAME = gitea +USER = gitea +PASSWD = sG7hZXBQDAtRab9A +SSL_MODE = disable + +[server] +DOMAIN = git.aepif.ru +HTTP_PORT = 3000 +ROOT_URL = https://git.aepif.ru/ +DISABLE_SSH = false +SSH_DOMAIN = git.aepif.ru +SSH_PORT = 2222 +START_SSH_SERVER = true +SSH_LISTEN_PORT = 22 + +[security] +INSTALL_LOCK = true +SECRET_KEY = your_secret_key_here + +[service] +DISABLE_REGISTRATION = true +REQUIRE_SIGNIN_VIEW = false +ENABLE_NOTIFY_MAIL = false +DEFAULT_KEEP_EMAIL_PRIVATE = true + +[mailer] +ENABLED = false + +[repository] +DEFAULT_BRANCH = main +ENABLE_PUSH_CREATE_USER = true +ENABLE_PUSH_CREATE_ORG = false + +[webhook] +ALLOWED_HOST_LIST = * +SKIP_TLS_VERIFY = false +``` ## PostgreSQL конфигурация -### Настройки базы данных -*Параметры PostgreSQL для Gitea* +### Database Container Settings +```yaml +db: + image: postgres:14 + container_name: gitea_db + environment: + - POSTGRES_USER=gitea # Пользователь БД + - POSTGRES_PASSWORD=sG7hZXBQDAtRab9A # Пароль БД + - POSTGRES_DB=gitea # Имя базы данных +``` -## Networking +### Дополнительные настройки PostgreSQL +```yaml +environment: + # Performance Settings + - POSTGRES_SHARED_PRELOAD_LIBRARIES=pg_stat_statements + - POSTGRES_MAX_CONNECTIONS=200 + - POSTGRES_SHARED_BUFFERS=256MB + - POSTGRES_EFFECTIVE_CACHE_SIZE=1GB + - POSTGRES_WORK_MEM=4MB + + # Logging Settings + - POSTGRES_LOG_STATEMENT=all + - POSTGRES_LOG_MIN_DURATION_STATEMENT=1000 + + # Backup Settings + - POSTGRES_WAL_LEVEL=replica + - POSTGRES_ARCHIVE_MODE=on +``` -### Сетевые настройки -*Конфигурация сетей Docker* +### PostgreSQL Volume Configuration +```yaml +volumes: + postgres_data: + external: true + name: gitea_postgres_data # External volume для персистентности +``` -## Volumes и Storage +## Traefik Integration Labels -### Хранение данных -*Настройки volumes для персистентности данных* +### HTTP Routing +```yaml +labels: + - traefik.enable=true + - traefik.http.routers.gitea.rule=Host(`git.aepif.ru`) + - traefik.http.routers.gitea.tls.certresolver=letsencrypt + - traefik.http.services.gitea.loadbalancer.server.port=3000 +``` ---- -*Эта страница находится в разработке* \ No newline at end of file +### TCP Routing для SSH +```yaml +labels: + # SSH TCP routing + - traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`) + - traefik.tcp.routers.gitea-ssh.entrypoints=ssh + - traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22 +``` + +### Объяснение SSH routing +- **HostSNI(`*`)**: Принимает любые TCP соединения на SSH entrypoint +- **entrypoints=ssh**: Использует SSH entrypoint (порт 2222) в Traefik +- **port=22**: Перенаправляет на порт 22 внутри Gitea контейнера + +## Networking Configuration + +### Networks +```yaml +networks: + proxy: + external: true # Подключение к Traefik + default: + driver: bridge # Внутренняя сеть для Gitea + PostgreSQL +``` + +### Network Architecture +- **proxy network**: Для HTTP/HTTPS трафика через Traefik +- **default network**: Для внутренней связи Gitea ↔ PostgreSQL +- **SSH traffic**: Напрямую через TCP routing Traefik + +## Volume Configuration + +### Gitea Data Volume +```yaml +gitea_data: + external: true + name: gitea_gitea_data +``` + +**Содержимое Gitea volume:** +- **repositories/**: Git репозитории +- **conf/**: Конфигурационные файлы (app.ini) +- **log/**: Логи Gitea +- **data/**: Загруженные файлы, аватары +- **ssh/**: SSH ключи сервера + +### PostgreSQL Data Volume +```yaml +postgres_data: + external: true + name: gitea_postgres_data +``` + +**Содержимое PostgreSQL volume:** +- **base/**: Файлы базы данных +- **global/**: Глобальные настройки кластера +- **pg_wal/**: Write-Ahead Log файлы +- **pg_tblspc/**: Tablespace ссылки + +### Создание external volumes +```bash +# Создание volumes перед запуском +docker volume create gitea_gitea_data +docker volume create gitea_postgres_data + +# Проверка созданных volumes +docker volume ls | grep gitea +``` + +## Time Synchronization + +### Timezone Configuration +```yaml +volumes: + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro +``` + +Это обеспечивает синхронизацию времени контейнера с хост-системой, что важно для: +- Корректных timestamp в Git commits +- Правильного отображения времени в веб-интерфейсе +- Синхронизации с логами других сервисов + +## Security Configuration + +### User Permissions +```yaml +environment: + - USER_UID=1000 + - USER_GID=1000 +``` + +- Gitea запускается под пользователем с UID/GID 1000 +- Соответствует обычному пользователю в Linux системах +- Обеспечивает правильные права доступа к файлам + +### Database Security +- **Пароль БД**: Случайно сгенерированный пароль `sG7hZXBQDAtRab9A` +- **Изоляция сети**: PostgreSQL доступна только из внутренней сети +- **SSL отключен**: Для внутренней связи в Docker сети + +### SSH Security +- **Отдельный порт**: SSH на нестандартном порту 2222 +- **TCP routing**: Прямое подключение через Traefik +- **Key management**: SSH ключи управляются через веб-интерфейс + +## Performance Tuning + +### Gitea Performance Settings +```yaml +environment: + # Repository settings + - GITEA__repository__DEFAULT_REPO_UNITS=repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki + - GITEA__repository__DEFAULT_PRIVATE=private + + # Git settings + - GITEA__git__MAX_GIT_DIFF_LINES=10000 + - GITEA__git__MAX_GIT_DIFF_LINE_CHARACTERS=5000 + - GITEA__git__MAX_GIT_DIFF_FILES=100 + + # Session settings + - GITEA__session__PROVIDER=memory + - GITEA__session__PROVIDER_CONFIG=data/sessions +``` + +### PostgreSQL Performance +```yaml +environment: + # Connection settings + - POSTGRES_MAX_CONNECTIONS=200 + - POSTGRES_SHARED_BUFFERS=256MB + - POSTGRES_EFFECTIVE_CACHE_SIZE=1GB + - POSTGRES_RANDOM_PAGE_COST=1.1 + - POSTGRES_WORK_MEM=4MB +``` + +## Backup Configuration + +### Automated Backups +```yaml +# Дополнительный контейнер для backup (опционально) +backup: + image: prodrigestivill/postgres-backup-local + environment: + - POSTGRES_HOST=db + - POSTGRES_DB=gitea + - POSTGRES_USER=gitea + - POSTGRES_PASSWORD=sG7hZXBQDAtRab9A + - BACKUP_KEEP_DAYS=7 + - BACKUP_KEEP_WEEKS=4 + - BACKUP_KEEP_MONTHS=6 + volumes: + - ./backups:/backups + depends_on: + - db +``` + +### Backup Strategy +1. **Database Backup**: Автоматический dump PostgreSQL +2. **Repository Backup**: Резервное копирование Git репозиториев +3. **Configuration Backup**: Сохранение настроек и конфигурации + +## Monitoring и Logging + +### Log Configuration +```yaml +environment: + - GITEA__log__MODE=file + - GITEA__log__LEVEL=Info + - GITEA__log__ROOT_PATH=/data/gitea/log +``` + +### Health Checks +```yaml +# Дополнительные health checks +healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s +``` + +## Связанные файлы + +- **[[Развертывание]]** - пошаговая установка и настройка +- **[[Администрирование]]** - управление пользователями и репозиториями +- **[[../Traefik Reverse Proxy/Конфигурации]]** - настройки интеграции с reverse proxy \ No newline at end of file diff --git a/Мой сервер/Traefik Reverse Proxy/Конфигурации.md b/Мой сервер/Traefik Reverse Proxy/Конфигурации.md index cdc8b9b..23cf4a2 100644 --- a/Мой сервер/Traefik Reverse Proxy/Конфигурации.md +++ b/Мой сервер/Traefik Reverse Proxy/Конфигурации.md @@ -1,26 +1,255 @@ # Traefik Reverse Proxy - Конфигурации -## Детальные настройки конфигурации Traefik - -*Документация будет дополнена деталями конфигурации* +← **[[Обзор системы|← Назад к обзору]]** ## Docker Compose конфигурация -*Разбор всех параметров docker-compose.yml* -## Command Line Arguments -*Детальное описание всех флагов запуска* +### Основной файл: `/DOCKER/reverse-proxy/docker-compose.yml` -## Static Configuration -*Настройки, которые не изменяются во время выполнения* +```yaml +version: '3.8' +services: + traefik: + image: traefik:v3.0 + container_name: traefik + command: + # API и Dashboard + - --api.dashboard=true + - --api.insecure=true + + # Docker Provider + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --providers.docker.network=proxy + + # Entrypoints + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + - --entrypoints.ssh.address=:2222 + + # SSL Configuration + - --certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru + - --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json + - --certificatesresolvers.letsencrypt.acme.tlschallenge=true + + # TCP Routing + - --providers.docker.exposedByDefault=false + + ports: + - "80:80" # HTTP + - "443:443" # HTTPS + - "8080:8080" # Dashboard + - "2222:2222" # SSH для Git + + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - traefik_data:/data + + networks: + - proxy + + labels: + # Самонастройка для Dashboard + - traefik.enable=true + - traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`) + - traefik.http.routers.traefik.tls.certresolver=letsencrypt + - traefik.http.routers.traefik.service=api@internal + + # HTTP to HTTPS redirect + - traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`) + - traefik.http.routers.http-catchall.entrypoints=web + - traefik.http.routers.http-catchall.middlewares=redirect-to-https + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + + restart: unless-stopped -## Dynamic Configuration -*Конфигурация через Docker labels* +volumes: + traefik_data: + +networks: + proxy: + name: proxy + driver: bridge +``` + +## Command Line Arguments + +### API Configuration +- `--api.dashboard=true` - Включает веб-интерфейс Dashboard +- `--api.insecure=true` - **⚠️ Небезопасно**: Доступ к API без аутентификации на порту 8080 + +### Provider Configuration +- `--providers.docker=true` - Включает Docker provider для автодискавери +- `--providers.docker.exposedbydefault=false` - Сервисы не экспонируются автоматически +- `--providers.docker.network=proxy` - Использует сеть `proxy` для подключения + +### Entrypoints +- `--entrypoints.web.address=:80` - HTTP entrypoint +- `--entrypoints.websecure.address=:443` - HTTPS entrypoint +- `--entrypoints.ssh.address=:2222` - TCP entrypoint для SSH + +### SSL Certificate Management +- `--certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru` - Email для Let's Encrypt +- `--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json` - Файл хранения сертификатов +- `--certificatesresolvers.letsencrypt.acme.tlschallenge=true` - Использует TLS-01 challenge + +## Port Mapping + +| Внешний порт | Внутренний порт | Назначение | +|--------------|-----------------|------------| +| 80 | 80 | HTTP трафик (редирект на HTTPS) | +| 443 | 443 | HTTPS трафик | +| 8080 | 8080 | Dashboard (небезопасно) | +| 2222 | 2222 | SSH для Git operations | + +## Volume Configuration + +### traefik_data +- **Назначение**: Хранение SSL сертификатов и конфигурации +- **Содержимое**: + - `acme.json` - Let's Encrypt сертификаты + - Конфигурационные файлы Traefik + +### Docker Socket +```yaml +volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro +``` +- **Назначение**: Доступ к Docker API для service discovery +- **Режим**: Read-only для безопасности + +## Network Configuration + +### Proxy Network +```yaml +networks: + proxy: + name: proxy + driver: bridge +``` + +**Важно**: Эта сеть должна быть создана заранее и подключена ко всем сервисам, которые должны быть доступны через Traefik. + +## Labels Configuration + +### Self-configuration для Dashboard +```yaml +labels: + - traefik.enable=true + - traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`) + - traefik.http.routers.traefik.tls.certresolver=letsencrypt + - traefik.http.routers.traefik.service=api@internal +``` + +### HTTP to HTTPS Redirect +```yaml +labels: + - traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`) + - traefik.http.routers.http-catchall.entrypoints=web + - traefik.http.routers.http-catchall.middlewares=redirect-to-https + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https +``` + +## Dynamic Configuration Examples + +### Типичные labels для сервиса +```yaml +labels: + - traefik.enable=true + - traefik.http.routers.service-name.rule=Host(`service.aepif.ru`) + - traefik.http.routers.service-name.tls.certresolver=letsencrypt + - traefik.http.services.service-name.loadbalancer.server.port=80 +``` + +### С Authelia middleware +```yaml +labels: + - traefik.enable=true + - traefik.http.routers.protected-service.rule=Host(`protected.aepif.ru`) + - traefik.http.routers.protected-service.tls.certresolver=letsencrypt + - traefik.http.routers.protected-service.middlewares=authelia@docker + - traefik.http.services.protected-service.loadbalancer.server.port=80 +``` + +### TCP routing (для SSH) +```yaml +labels: + - traefik.enable=true + - traefik.tcp.routers.git-ssh.rule=HostSNI(`*`) + - traefik.tcp.routers.git-ssh.entrypoints=ssh + - traefik.tcp.services.git-ssh.loadbalancer.server.port=22 +``` ## SSL/TLS Configuration -*Настройки сертификатов и шифрования* + +### ACME Settings +- **Challenge Type**: TLS-01 (HTTP challenge через порт 443) +- **Storage**: `/data/acme.json` внутри контейнера +- **Email**: Обязательно указать для уведомлений о истечении сертификатов +- **Domains**: Автоматически из Host rules в labels + +### Security Headers (рекомендуемые) +```yaml +labels: + - traefik.http.middlewares.security-headers.headers.frameDeny=true + - traefik.http.middlewares.security-headers.headers.sslRedirect=true + - traefik.http.middlewares.security-headers.headers.browserXssFilter=true + - traefik.http.middlewares.security-headers.headers.contentTypeNosniff=true + - traefik.http.middlewares.security-headers.headers.forceSTSHeader=true + - traefik.http.middlewares.security-headers.headers.stsIncludeSubdomains=true + - traefik.http.middlewares.security-headers.headers.stsPreload=true + - traefik.http.middlewares.security-headers.headers.stsSeconds=31536000 +``` ## Middleware Configuration -*Конфигурация middleware для различных задач* ---- -*Эта страница находится в разработке* \ No newline at end of file +### Redirect to HTTPS +```yaml +- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https +``` + +### Rate Limiting +```yaml +- traefik.http.middlewares.rate-limit.ratelimit.burst=100 +- traefik.http.middlewares.rate-limit.ratelimit.average=50 +``` + +### CORS Headers +```yaml +- traefik.http.middlewares.cors.headers.accessControlAllowOriginList=* +- traefik.http.middlewares.cors.headers.accessControlAllowMethods=GET,OPTIONS,PUT,POST,DELETE +- traefik.http.middlewares.cors.headers.accessControlAllowHeaders=* +``` + +## Environment Variables + +Traefik поддерживает конфигурацию через переменные окружения: + +```yaml +environment: + - TRAEFIK_API_DASHBOARD=true + - TRAEFIK_PROVIDERS_DOCKER=true + - TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80 + - TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=:443 + - TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_EMAIL=your_email@aepif.ru +``` + +## Безопасность конфигурации + +### ⚠️ Проблемы безопасности в текущей конфигурации +1. **Dashboard без аутентификации**: `--api.insecure=true` делает Dashboard доступным без авторизации +2. **Docker socket**: Доступ к Docker API может быть использован для эскалации привилегий + +### 🔒 Рекомендации по улучшению безопасности +1. Убрать `--api.insecure=true` и настроить аутентификацию для Dashboard +2. Добавить middleware для Dashboard: +```yaml +- traefik.http.routers.traefik.middlewares=authelia@docker +``` +3. Использовать Docker socket proxy для ограничения доступа к Docker API + +## Связанные файлы + +- **[[Развертывание]]** - инструкции по первоначальной настройке +- **[[Администрирование]]** - управление и мониторинг +- **[[../Authelia Authentication/Конфигурации]]** - настройка middleware аутентификации \ No newline at end of file diff --git a/Мой сервер/Traefik Reverse Proxy/Развертывание.md b/Мой сервер/Traefik Reverse Proxy/Развертывание.md index f108a8d..811b401 100644 --- a/Мой сервер/Traefik Reverse Proxy/Развертывание.md +++ b/Мой сервер/Traefik Reverse Proxy/Развертывание.md @@ -1,26 +1,325 @@ # Traefik Reverse Proxy - Развертывание -## Пошаговая установка Traefik - -*Документация будет дополнена инструкциями по развертыванию* +← **[[Обзор системы|← Назад к обзору]]** ## Предварительные требования -*Системные требования и зависимости* + +### Системные требования +- **Docker**: версия 20.10+ +- **Docker Compose**: версия 2.0+ +- **Операционная система**: Linux (Ubuntu 20.04+ рекомендуется) +- **RAM**: минимум 512MB для Traefik +- **Дисковое пространство**: 1GB для логов и SSL сертификатов + +### Сетевые требования +- **Публичный IP**: Для Let's Encrypt ACME challenge +- **Открытые порты**: 80, 443, 2222 (для SSH Git), 8080 (Dashboard) +- **Доступ к DNS**: Для настройки A-записей + +### DNS настройка +Перед развертыванием настройте DNS записи: + +```bash +# A записи для всех поддоменов +traefik.aepif.ru IN A YOUR_SERVER_IP +auth.aepif.ru IN A YOUR_SERVER_IP +notes.aepif.ru IN A YOUR_SERVER_IP +git.aepif.ru IN A YOUR_SERVER_IP +webhook.aepif.ru IN A YOUR_SERVER_IP +``` ## Создание сети proxy -*Настройка Docker network* -## Конфигурация Docker Compose -*Подготовка файлов конфигурации* +### Шаг 1: Создание Docker network +```bash +# Создаем external сеть для всех сервисов +docker network create proxy + +# Проверяем создание +docker network ls | grep proxy +``` + +### Важность proxy сети +Сеть `proxy` позволяет: +- Изолировать веб-трафик от внутренних сетей +- Автоматически подключать сервисы к Traefik +- Обеспечить безопасность через сегментацию сети + +## Подготовка файлов + +### Шаг 2: Создание директории +```bash +# Создаем рабочую директорию +mkdir -p /docker/reverse-proxy +cd /docker/reverse-proxy +``` + +### Шаг 3: Создание docker-compose.yml +```yaml +version: '3.8' +services: + traefik: + image: traefik:v3.0 + container_name: traefik + command: + # API и Dashboard + - --api.dashboard=true + - --api.insecure=true + + # Docker Provider + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --providers.docker.network=proxy + + # Entrypoints + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + - --entrypoints.ssh.address=:2222 + + # SSL Configuration - ЗАМЕНИТЕ EMAIL! + - --certificatesresolvers.letsencrypt.acme.email=YOUR_EMAIL@domain.com + - --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json + - --certificatesresolvers.letsencrypt.acme.tlschallenge=true + + # Logging + - --log.level=INFO + - --accesslog=true + + ports: + - "80:80" + - "443:443" + - "8080:8080" + - "2222:2222" + + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - traefik_data:/data + + networks: + - proxy + + labels: + - traefik.enable=true + - traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`) + - traefik.http.routers.traefik.tls.certresolver=letsencrypt + - traefik.http.routers.traefik.service=api@internal + + # Global HTTP to HTTPS redirect + - traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`) + - traefik.http.routers.http-catchall.entrypoints=web + - traefik.http.routers.http-catchall.middlewares=redirect-to-https + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + + restart: unless-stopped + +volumes: + traefik_data: + +networks: + proxy: + external: true +``` + +**⚠️ Важно**: Замените `YOUR_EMAIL@domain.com` на свой email адрес! ## Первый запуск -*Процедура начального запуска* -## Настройка DNS -*Настройка доменных записей* +### Шаг 4: Запуск Traefik +```bash +# Переходим в директорию с конфигурацией +cd /docker/reverse-proxy -## Тестирование -*Проверка работоспособности* +# Запускаем в detached режиме +docker-compose up -d ---- -*Эта страница находится в разработке* \ No newline at end of file +# Проверяем статус +docker-compose ps +``` + +### Шаг 5: Проверка логов +```bash +# Смотрим логи запуска +docker-compose logs -f traefik + +# Должны увидеть сообщения о: +# - Создании routers и services +# - Успешном запуске API +# - Подключении к Docker provider +``` + +## Проверка работоспособности + +### Шаг 6: Тестирование Dashboard +```bash +# Проверяем доступность Dashboard +curl -I http://YOUR_SERVER_IP:8080 + +# Проверяем HTTPS редирект +curl -I http://traefik.aepif.ru +# Должен вернуть 301/302 редирект на HTTPS +``` + +### Шаг 7: Проверка SSL сертификатов +```bash +# Проверяем получение SSL сертификата +curl -I https://traefik.aepif.ru + +# Проверяем детали сертификата +openssl s_client -connect traefik.aepif.ru:443 -servername traefik.aepif.ru | openssl x509 -noout -text +``` + +## Настройка firewall + +### Шаг 8: Конфигурация UFW (Ubuntu) +```bash +# Разрешаем необходимые порты +sudo ufw allow 22/tcp # SSH +sudo ufw allow 80/tcp # HTTP +sudo ufw allow 443/tcp # HTTPS +sudo ufw allow 2222/tcp # Git SSH +sudo ufw allow 8080/tcp # Dashboard (временно) + +# Включаем firewall +sudo ufw enable + +# Проверяем статус +sudo ufw status +``` + +## Мониторинг и диагностика + +### Проверка состояния +```bash +# Статус контейнера +docker ps | grep traefik + +# Использование ресурсов +docker stats traefik --no-stream + +# Логи в реальном времени +docker logs traefik -f +``` + +### Dashboard интерфейс +- **URL**: http://YOUR_SERVER_IP:8080 или https://traefik.aepif.ru +- **Разделы**: + - **HTTP Routers**: Настроенные маршруты + - **HTTP Services**: Backend сервисы + - **HTTP Middlewares**: Промежуточное ПО + - **TLS**: SSL сертификаты + +## Устранение проблем + +### Проблема: Сертификат не получается +```bash +# Проверяем DNS записи +nslookup traefik.aepif.ru + +# Проверяем доступность порта 443 извне +telnet YOUR_SERVER_IP 443 + +# Смотрим логи ACME +docker logs traefik | grep acme +``` + +### Проблема: Dashboard недоступен +```bash +# Проверяем, что контейнер запущен +docker ps | grep traefik + +# Проверяем порт +netstat -tulpn | grep :8080 + +# Проверяем логи +docker logs traefik --tail 50 +``` + +### Проблема: Сервисы не обнаруживаются +```bash +# Проверяем сеть proxy +docker network inspect proxy + +# Проверяем подключение Traefik к Docker socket +docker logs traefik | grep docker + +# Проверяем labels сервисов +docker inspect SERVICE_CONTAINER | grep -A 10 Labels +``` + +## Безопасность после установки + +### Рекомендации по безопасности +1. **Закрыть порт 8080**: Настроить аутентификацию для Dashboard +2. **Ограничить доступ к Docker socket**: Использовать Docker socket proxy +3. **Настроить логирование**: Централизованный сбор логов +4. **Мониторинг**: Настроить алерты на проблемы с сертификатами + +### Закрытие небезопасного Dashboard +После настройки всех сервисов, отредактируйте docker-compose.yml: + +```yaml +command: + - --api.dashboard=true + # Убираем эту строку: + # - --api.insecure=true +``` + +И добавьте middleware для аутентификации: +```yaml +labels: + - traefik.http.routers.traefik.middlewares=authelia@docker +``` + +## Следующие шаги + +После успешного развертывания Traefik: + +1. **[[../Authelia Authentication/Развертывание]]** - Настройка аутентификации +2. **[[../Git Service/Развертывание]]** - Развертывание Git сервера +3. **[[../Second Mind Setup/Развертывание]]** - Настройка системы заметок +4. **[[Администрирование]]** - Ежедневное управление + +## Автоматизация развертывания + +### Скрипт развертывания +```bash +#!/bin/bash +# deploy-traefik.sh + +set -e + +echo "🚀 Развертывание Traefik Reverse Proxy" + +# Проверяем Docker +if ! command -v docker &> /dev/null; then + echo "❌ Docker не установлен" + exit 1 +fi + +# Создаем сеть +docker network create proxy 2>/dev/null || echo "Сеть proxy уже существует" + +# Создаем директорию +mkdir -p /docker/reverse-proxy +cd /docker/reverse-proxy + +# Запрашиваем email +read -p "📧 Введите email для Let's Encrypt: " ACME_EMAIL + +# Создаем docker-compose.yml с введенным email +cat > docker-compose.yml << EOF +# Вставляем конфигурацию с заменой email +EOF + +# Запускаем +docker-compose up -d + +echo "✅ Traefik развернут успешно" +echo "🌐 Dashboard: http://$(curl -s ipinfo.io/ip):8080" +``` + +## Связанные документы + +- **[[Конфигурации]]** - детальные настройки конфигурации +- **[[Администрирование]]** - управление и мониторинг +- **[[../Authelia Authentication/Развертывание]]** - следующий шаг развертывания \ No newline at end of file diff --git a/Мой сервер/Документация сервера aepif.ru.md b/Мой сервер/index.md similarity index 99% rename from Мой сервер/Документация сервера aepif.ru.md rename to Мой сервер/index.md index 87bdf0e..1cd5867 100644 --- a/Мой сервер/Документация сервера aepif.ru.md +++ b/Мой сервер/index.md @@ -1,3 +1,5 @@ +# Документация сервера aepif.ru + Техническая документация инфраструктуры и сервисов домена aepif.ru. Здесь собрана вся информация о развернутых системах. ## Обзор архитектуры