# 07. Проксирование и SSL (Nginx Proxy Manager) Nginx Proxy Manager (NPM) работает на хосте `gateway` (192.168.1.201) в Docker-контейнере. Он является единой точкой входа для всех внешних HTTPS-запросов к доменам `*.zailon.ru`. ## Конфигурация NPM - **Версия**: jc21/nginx-proxy-manager:latest (образ) - **Порты**: 80 (HTTP), 443 (HTTPS), 81 (админка) - **Хранилище данных**: `/opt/npm/data`, `/opt/npm/letsencrypt` ## Доступ к админке NPM Административный интерфейс доступен по адресу `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" следует добавить: ``` 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; ``` | Заголовок | Назначение | |-----------|------------| | **Strict-Transport-Security (HSTS)** | Заставляет браузер всегда использовать HTTPS, предотвращая атаки понижения протокола. | | **X-Content-Type-Options** | Запрещает браузеру выполнять MIME-sniffing, снижая риск атак типа XSS. | | **X-Frame-Options** | Защищает от clickjacking, разрешая встраивание только в страницы того же источника. | | **Referrer-Policy** | Контролирует, какая информация о referer передаётся при переходе на другие сайты. | | **Permissions-Policy** | Отключает ненужные API (геолокация, камера, микрофон) для всех страниц. | ## Мониторинг NPM - Логи NPM собираются **Promtail** (на gateway) и отправляются в **Loki**. - В Grafana настроены дашборды для отслеживания ошибок и статистики запросов. - Ключевые метрики: количество запросов, коды ответов (4xx, 5xx), загрузка сертификатов. ## Проблемы и рекомендации ### 🔴 Отсутствие заголовков безопасности Большинство прокси не имеют настроенных заголовков HSTS, X-Content-Type-Options и других. Это повышает риски атак. **Рекомендуется** добавить заголовки для всех публичных доменов через интерфейс NPM (вкладка Advanced). ### 🟡 Использование тега `latest` Образ NPM (`jc21/nginx-proxy-manager:latest`) обновляется неконтролируемо. **Рекомендуется** зафиксировать версию в `docker-compose.yml` (например, `jc21/nginx-proxy-manager:2.12.3`). ### 🟠 Прокси с Offline статусом `qb.zailon.ru` недоступен. Проверьте: - Запущен ли контейнер qBittorrent на хосте `torrent`? - Слушает ли он порт 8080 (`ss -tulnwp | grep 8080`)? - Корректно ли правило прокси (IP и порт)? ### 🟢 Мониторинг Убедитесь, что логи NPM попадают в Loki. Проверьте конфигурацию Promtail на gateway. В Grafana создайте дашборд для отслеживания ошибок 5xx и истечения сертификатов. --- **Связанные разделы:** - [Сервисы и порты](06-services.md) - [Сеть и доступ](04-network.md) - [Мониторинг и логирование](08-monitoring.md) - [Безопасность](10-security.md)