Главное. Строка IPAddressAllow=any обесценивала весь список запретов ниже,
и заявленная защита от SSRF существовала только на бумаге. Из cgroup
сервиса оставались доступны Proxmox API на 10.20.0.1:8006 и соседняя
виртуальная машина — проверено установлением соединения. Сбивало с толку
то, что адрес метаданных 169.254.169.254 при этом блокировался, поэтому
прежняя проверка выглядела успешной.
Когда список состоит только из запретов, фильтр работает: внутренняя сеть
закрыта, внешняя и DNS продолжают работать. Всё проверено отдельными
запусками через systemd-run до применения на боевом юните.
Петля не закрывается сознательно. Фильтр systemd не различает направление,
и запрет 127.0.0.0/8 обрывает ВХОДЯЩИЕ соединения nginx к этому же
сервису — проверено: слушатель внутри такой cgroup становится недоступен
снаружи, то есть сайт лёг бы. Службы на 127.0.0.1 остаются достижимы;
закрыть их можно, только переведя связку nginx→приложение на unix-сокет.
Дисковый бюджет. Юнит вчетверо поднимал квоту относительно кода (20 ГБ
против 5 ГБ) при 35 ГБ свободного на разделе гипервизора, где живут
виртуальные машины. Приведено к 5 ГБ.
/readyz больше не витрина. Наружу уходит только признак готовности;
свободное место, глубина очереди и версия yt-dlp отдаются лишь локальному
мониторингу — сайт публичный.
Статика кэшируется на месяц: стили и восемь файлов шрифта отдаются этим же
процессом, а потоки здесь дефицитны из-за SSE, и браузер ревалидировал все
девять файлов на каждой навигации.
Согласованы сроки хранения: карточка задачи считается от создания, а файл —
от окончания скачивания, поэтому при равных TTL карточка истекала раньше
файла, и файл оставался недостижимым, занимая квоту. Срок карточки поднят
до 240 минут против 120 у файла.
Также: .gitkeep больше не удаляется уборщиком по TTL (при подметании на
старте он уже исключался), README приведён в соответствие с config.py —
три значения по умолчанию были указаны неверно, тринадцать переменных не
описаны вовсе.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwY2Cg54RK7WZdvMaLV5Di