diff --git a/docs/backlog/README.md b/docs/backlog/README.md index 8e78528..1dfcef7 100644 --- a/docs/backlog/README.md +++ b/docs/backlog/README.md @@ -26,7 +26,6 @@ _(sec-ревью)_ — три независимых security-ревью на м ## Средний - [Захардить мониторинг-стек (netdata / dozzle / goaccess)](harden-monitoring-stack.md) — netdata/dozzle: лишние привилегии + docker.sock + доверие Remote-User в общей сети; socket-proxy + monitoring_network _(sec-ревью)_ -- [Ограничить эндпоинт `/metrics` Miniflux](miniflux-metrics-restrict.md) — `METRICS_ALLOWED_NETWORKS=0.0.0.0/0` + прокси без ограничения пути отдаёт метрики публично _(sec-ревью)_ - [Закрыть calibre-web forward-auth и проверить дефолтные креды](calibre-forward-auth.md) — домен без forward_auth, защита на встроенной авторизации с дефолтом `admin/admin123` _(sec-ревью)_ - [Понизить log level Authelia с debug до info](authelia-log-level.md) — `debug` в проде утекает детали аутентификации и OIDC через `docker logs`/dozzle _(sec-ревью)_ - [Включить автообновления безопасности](security-autoupdates.md) — патчи openssh/libssl только вручную; окна в недели между CVE и фиксом _(sec-ревью)_ diff --git a/docs/backlog/miniflux-metrics-restrict.md b/docs/backlog/miniflux-metrics-restrict.md deleted file mode 100644 index 89d5277..0000000 --- a/docs/backlog/miniflux-metrics-restrict.md +++ /dev/null @@ -1,16 +0,0 @@ -# Ограничить эндпоинт `/metrics` Miniflux - -**Приоритет:** средний - -В `files/miniflux/docker-compose.template.yml` заданы `METRICS_COLLECTOR=1` и -`METRICS_ALLOWED_NETWORKS=0.0.0.0/0`, а Caddy проксирует весь -`miniflux.vakhrushev.me` без ограничения пути. За прокси Miniflux видит приватный -IP контейнера Caddy (попадает в `0.0.0.0/0`), поэтому -`https://miniflux.vakhrushev.me/metrics` отдаётся публично без аутентификации — -утечка эксплуатационной статистики. Сузить `METRICS_ALLOWED_NETWORKS` до подсети -`monitoring_network` (netdata скрейпит по внутреннему имени) или заблокировать -путь `/metrics` в Caddy. - -Из sec-ревью (fable, 2026-07-13). - -Связано: files/miniflux/docker-compose.template.yml, files/caddyproxy/Caddyfile.template. diff --git a/files/caddyproxy/Caddyfile.template b/files/caddyproxy/Caddyfile.template index e3de83a..00ef4d7 100644 --- a/files/caddyproxy/Caddyfile.template +++ b/files/caddyproxy/Caddyfile.template @@ -136,8 +136,17 @@ miniflux.vakhrushev.me { tls anwinged@ya.ru import access_log - reverse_proxy { - to miniflux_app:8080 + # /metrics наружу не отдаём. METRICS_ALLOWED_NETWORKS тут не помогает: за + # прокси Miniflux видит приватный IP контейнера Caddy, а не адрес клиента. + # Netdata скрейпит miniflux_app:8080/metrics напрямую по докер-сети, мимо Caddy. + handle /metrics { + respond 404 + } + + handle { + reverse_proxy { + to miniflux_app:8080 + } } } diff --git a/files/miniflux/docker-compose.template.yml b/files/miniflux/docker-compose.template.yml index 3c1d989..86c7941 100644 --- a/files/miniflux/docker-compose.template.yml +++ b/files/miniflux/docker-compose.template.yml @@ -33,6 +33,9 @@ services: - OAUTH2_PROVIDER=oidc - OAUTH2_REDIRECT_URL=https://miniflux.vakhrushev.me/oauth2/oidc/callback - OAUTH2_USER_CREATION=1 + # Метрики скрейпит netdata по докер-сети (miniflux_app:8080/metrics). + # Сузить METRICS_ALLOWED_NETWORKS нельзя: netdata и Caddy сидят в одной + # web_proxy_network, по IP их не различить. Наружу /metrics закрыт в Caddy. - METRICS_COLLECTOR=1 - METRICS_ALLOWED_NETWORKS=0.0.0.0/0