Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу
Рейтинг: 30.1% · 4 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу
Рассказываю, как я месяц кормил весь интернет своим постгресом и не знал.
Сетап: VPS на Селектеле за 1100 руб, 2 vCPU, Debian 12, фаервол на nftables, всё по уму. В table inet filter политика drop, наружу только 443 и ssh на нестандартном порту. Гонял nmap снаружи, всё закрыто, спал спокойно.
Потом поднял docker compose с приложухой и постгресом 16. В компоузе как у всех:
ports:
- "5432:5432"
чтобы с локальной машины через ssh-туннель ходить. Ну вы поняли, да. Docker не ходит через INPUT. Он пишет свои правила в iptables-nft, цепочки DOCKER и DOCKER-USER, и пакеты на опубликованный порт уходят через FORWARD с dnat ещё до того, как мой красивый inet filter их увидит. Политика drop для него пустой звук.
Месяц спустя CPU на сервере упёрся в потолок. В контейнере постгреса процесс kinsing, классический майнер. Зашли через 5432, пароль у постгреса был postgres, потому что "это же только для туннеля". В логах перебор с десятков адресов, шодан такие порты индексирует за пару дней.
Что сделал: снёс контейнер, перекатил VPS с нуля, в компоузе теперь 127.0.0.1:5432:5432, плюс правило в DOCKER-USER на всякий. Но осадок остался. Почему в 2026 dockerd по дефолту публикует на 0.0.0.0 и молча продырявливает фаервол хоста, для меня загадка.
Кто как с этим живёт? daemon.json с "iptables": false пробовал, отвалилась межконтейнерная сеть, откатил.
Сетап: VPS на Селектеле за 1100 руб, 2 vCPU, Debian 12, фаервол на nftables, всё по уму. В table inet filter политика drop, наружу только 443 и ssh на нестандартном порту. Гонял nmap снаружи, всё закрыто, спал спокойно.
Потом поднял docker compose с приложухой и постгресом 16. В компоузе как у всех:
ports:
- "5432:5432"
чтобы с локальной машины через ssh-туннель ходить. Ну вы поняли, да. Docker не ходит через INPUT. Он пишет свои правила в iptables-nft, цепочки DOCKER и DOCKER-USER, и пакеты на опубликованный порт уходят через FORWARD с dnat ещё до того, как мой красивый inet filter их увидит. Политика drop для него пустой звук.
Месяц спустя CPU на сервере упёрся в потолок. В контейнере постгреса процесс kinsing, классический майнер. Зашли через 5432, пароль у постгреса был postgres, потому что "это же только для туннеля". В логах перебор с десятков адресов, шодан такие порты индексирует за пару дней.
Что сделал: снёс контейнер, перекатил VPS с нуля, в компоузе теперь 127.0.0.1:5432:5432, плюс правило в DOCKER-USER на всякий. Но осадок остался. Почему в 2026 dockerd по дефолту публикует на 0.0.0.0 и молча продырявливает фаервол хоста, для меня загадка.
Кто как с этим живёт? daemon.json с "iptables": false пробовал, отвалилась межконтейнерная сеть, откатил.
✔ Лучший ответ сформирован автоматически — Austkin
DOCKER-USER и есть штатный ответ, она для того и существует. У меня на всех хостах через ансибл раскатано: iptables -I DOCKER-USER -i ens3 ! -s 10.8.0.0/24 -p tcp -dport 5432 -j DROP и аналогично на остальные внутренние порты. Цепочка переживает рестарт демона, докер её не перезаписывает, только прыгает в неё первой из FORWARD. Минус в том, что это iptables-синтаксис поверх nft-бэкенда, в чистом …
- proxmoxpilot
- Сообщения: 13
- Зарегистрирован: 11 май 2026, 02:49
Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу
классика жанра. это поведение докера задокументировано лет десять как, в доке прямым текстом написано что published ports обходят фаервол хоста. но читать доку конечно не наш метод, наш метод это месяц майнить кому-то монетки
Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу
✔ Лучший ответ — сформирован автоматически
DOCKER-USER и есть штатный ответ, она для того и существует. У меня на всех хостах через ансибл раскатано:
iptables -I DOCKER-USER -i ens3 ! -s 10.8.0.0/24 -p tcp -dport 5432 -j DROP
и аналогично на остальные внутренние порты. Цепочка переживает рестарт демона, докер её не перезаписывает, только прыгает в неё первой из FORWARD. Минус в том, что это iptables-синтаксис поверх nft-бэкенда, в чистом nftables-конфиге этих правил не видно, и держишь два мира в голове.
И да, с Docker 28 непубликованные порты перестали быть доступны с соседних хостов через прямую маршрутизацию, гайки чуть прикрутили. Но published на 0.0.0.0 как был, так и остался.
iptables -I DOCKER-USER -i ens3 ! -s 10.8.0.0/24 -p tcp -dport 5432 -j DROP
и аналогично на остальные внутренние порты. Цепочка переживает рестарт демона, докер её не перезаписывает, только прыгает в неё первой из FORWARD. Минус в том, что это iptables-синтаксис поверх nft-бэкенда, в чистом nftables-конфиге этих правил не видно, и держишь два мира в голове.
И да, с Docker 28 непубликованные порты перестали быть доступны с соседних хостов через прямую маршрутизацию, гайки чуть прикрутили. Но published на 0.0.0.0 как был, так и остался.
- envoywizard
- Сообщения: 14
- Зарегистрирован: 11 май 2026, 20:41
Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу
поэтому podman. без демона, без своих правил в обход, контейнер живёт как обычный процесс и фаервол хоста работает ровно как написан. quadlet-юниты в systemd, compose почти не нужен. перетащил все домашние и половину рабочих хостов, обратно не тянет
- coder_vlad
- Сообщения: 72
- Зарегистрирован: 11 май 2026, 01:57
Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу
ну началось, в любой теме про докер обязательно придёт человек с подманом. он хорош ровно до момента, когда прилетает чужой compose с хитрым networking, healthcheck и тремя сетями, и начинается пляска с podman-compose, который вечно на полшага позади. На проде, где десяток разношёрстных компоузов от трёх команд, я лучше один раз пропишу DOCKER-USER и забуду
- kubeaddict
- Сообщения: 5
- Зарегистрирован: 11 май 2026, 01:56
Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу
пароль postgres на постгресе в 2026 это отдельный жанр. даже без докера оно рано или поздно нашлось бы через какой-нибудь дырявый pgadmin. поставь scram-sha-256, нормальный пароль из менеджера и подрежь pg_hba до конкретных сетей. тогда дыра в фаерволе превращается из катастрофы в неприятность. слои защиты работают только когда их больше одного
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
-
- Лето, дача, удалёнка: как организовать интернет и рабочее место за городом?
5 ответов · 15 просмотров
-
- Отвалился интернет на даче — и я понял, что без ИИ-автокомплита разучился писать код. У кого так же?
5 ответов · 9 просмотров
-
- Сэкономили 19к на реплике постгреса, итог: 9 часов даунтайма и минус жирный клиент
7 ответов · 6 просмотров
-
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость