Docs/docs/07-proxy-ssl.md
2026-03-20 15:39:27 +05:00

94 lines
6.7 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.

# 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)