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

6.7 KiB
Raw Blame History

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 и истечения сертификатов.


Связанные разделы: