diff --git a/docs/07-proxy-ssl.md b/docs/07-proxy-ssl.md index 14a0feb..e50bff8 100644 --- a/docs/07-proxy-ssl.md +++ b/docs/07-proxy-ssl.md @@ -1,59 +1,23 @@ # 07. Проксирование и SSL (Nginx Proxy Manager) -Nginx Proxy Manager (NPM) работает на хосте `gateway` (192.168.1.201) в Docker-контейнере. Он является единой точкой входа для всех внешних HTTPS-запросов к доменам `*.zailon.ru`. +## Обзор -## Конфигурация NPM +**Nginx Proxy Manager (NPM)** запущен в Docker-контейнере на хосте `gateway` (192.168.1.201). Он принимает входящие HTTP/HTTPS-запросы на порты 80 и 443 и проксирует их к внутренним сервисам. SSL-сертификаты автоматически выпускаются и обновляются через Let's Encrypt. -- **Версия**: jc21/nginx-proxy-manager:latest (образ) -- **Порты**: 80 (HTTP), 443 (HTTPS), 81 (админка) -- **Хранилище данных**: `/opt/npm/data`, `/opt/npm/letsencrypt` +## Заголовки безопасности -## Доступ к админке NPM +Для защиты веб-сервисов рекомендуется добавлять следующие HTTP-заголовки для каждого проксируемого домена (настройка в интерфейсе NPM → Advanced): -Административный интерфейс доступен по адресу `https://192.168.1.201:81` (только локально). Учётные данные хранятся в зашифрованном виде во встроенной базе данных SQLite. - -## Проксируемые домены - -| Домен | Назначение | Бэкенд | SSL (Let's Encrypt) | -|-----------------------|-----------------------|--------------------------|---------------------| -| ab.zailon.ru | Audiobookshelf | http://192.168.1.203:45132 | ✅ | -| book.zailon.ru | BookStack | http://192.168.1.202:45133 | ✅ | -| bw.zailon.ru | Bitwarden | http://192.168.1.202:45131 | ✅ | -| chat.zailon.ru | Snikket (XMPP) | https://192.168.1.206:8443 | ✅ | -| cloud.zailon.ru | Nextcloud | http://192.168.1.213:45131 | ✅ | -| cook.zailon.ru | Mealie | http://192.168.1.202:45132 | ✅ | -| git.zailon.ru | GitLab | http://192.168.1.209:45130 | ✅ | -| jellyfin.zailon.ru | Jellyfin | http://192.168.1.203:45131 | ✅ | -| mnemozailon.ru | BookStack (альт) | http://192.168.1.202:45133 | ✅ | -| mon.zailon.ru | Grafana | http://192.168.1.208:45132 | ✅ | -| music.zailon.ru | Ampache | http://192.168.1.203:45132 | ✅ | -| nc.zailon.ru | Nextcloud (ВМ) | https://192.168.1.205:443 | ✅ | -| olimp.zailon.ru | Heimdall | http://192.168.1.201:45131 | ✅ | -| oracul.zailon.ru | MeshCentral | http://192.168.1.208:45131 | ✅ | -| photo.zailon.ru | Immich | http://192.168.1.204:45131 | ✅ | -| qb.zailon.ru | qBittorrent | http://192.168.1.211:8080 | ✅ (Offline) | - - -## SSL-сертификаты - -Все сертификаты выдаются Let's Encrypt через NPM автоматически. Для каждого домена настроен: - -- **Провайдер**: Let's Encrypt -- **Срок действия**: 90 дней, автоматическое продление -- **Тип**: Single domain (все домены отдельные) - -## Настройки безопасности - -### Рекомендуемые заголовки для каждого прокси - -В интерфейсе NPM для каждого прокси на вкладке "Advanced" следует добавить: -``` +```nginx add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options SAMEORIGIN always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; -add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; +add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=()" always; ``` + +### Назначение заголовков + | Заголовок | Назначение | |-----------|------------| | **Strict-Transport-Security (HSTS)** | Заставляет браузер всегда использовать HTTPS, предотвращая атаки понижения протокола. | @@ -62,6 +26,53 @@ add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; | **Referrer-Policy** | Контролирует, какая информация о referer передаётся при переходе на другие сайты. | | **Permissions-Policy** | Отключает ненужные API (геолокация, камера, микрофон) для всех страниц. | +## Глобальная конфигурация NPM + +Глобальные настройки находятся в `/etc/nginx/nginx.conf` внутри контейнера. Основные параметры: + +```nginx +client_max_body_size 2000m; # максимальный размер загружаемого файла (2 ГБ) +proxy_read_timeout 90s; # таймаут чтения прокси +set_real_ip_from 10.0.0.0/8; # доверенные подсети для определения реального IP +set_real_ip_from 172.16.0.0/12; +set_real_ip_from 192.168.0.0/16; +real_ip_header X-Real-IP; +real_ip_recursive on; +``` + +- **client_max_body_size 2000m** – позволяет загружать большие файлы (например, видео в Jellyfin). +- **proxy_read_timeout 90s** – защищает от зависания долгих запросов. +- **set_real_ip_from** – определяет реальный IP клиента, что важно для корректной работы логирования и ограничений. + +## Доступ к админке NPM + +Административный интерфейс доступен по адресу `https://192.168.1.201:81` (только локально). Учётные данные хранятся в зашифрованном виде во встроенной базе данных SQLite. + +## Проксируемые домены + +Список всех активных прокси (актуально на 20 марта 2026): + +| Домен | Бэкенд | SSL | Статус | +|-------|--------|-----|--------| +| ab.zailon.ru | http://192.168.1.203:45132 | Let's Encrypt | Online | +| book.zailon.ru | http://192.168.1.202:45133 | Let's Encrypt | Online | +| bw.zailon.ru | http://192.168.1.202:45131 | Let's Encrypt | Online | +| chat.zailon.ru | https://192.168.1.206:8443 | Let's Encrypt | Online | +| cloud.zailon.ru | http://192.168.1.213:45131 | Let's Encrypt | Online | +| cook.zailon.ru | http://192.168.1.202:45132 | Let's Encrypt | Online | +| git.zailon.ru | http://192.168.1.209:45130 | Let's Encrypt | Online | +| jellyfin.zailon.ru | http://192.168.1.203:45131 | Let's Encrypt | Online | +| mnemozailon.ru | http://192.168.1.202:45133 | Let's Encrypt | Online | +| mon.zailon.ru | http://192.168.1.208:45132 | Let's Encrypt | Online | +| music.zailon.ru | http://192.168.1.203:45132 | Let's Encrypt | Online | +| nc.zailon.ru | https://192.168.1.205:443 | Let's Encrypt | Online | +| olimp.zailon.ru | http://192.168.1.201:45131 | Let's Encrypt | Online | +| oracul.zailon.ru | http://192.168.1.208:45131 | Let's Encrypt | Online | +| photo.zailon.ru | http://192.168.1.204:45131 | Let's Encrypt | Online | +| qb.zailon.ru | http://192.168.1.211:8080 | Let's Encrypt | **Offline** | + +> **Проблема:** `qb.zailon.ru` отображается как Offline. Необходимо проверить доступность qBittorrent на порту 8080 и корректность прокси-правила. + ## Мониторинг NPM - Логи NPM собираются **Promtail** (на gateway) и отправляются в **Loki**.