Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Рейтинг: 30.1% · 4 голосов
Дистрибутивы Linux, настройка серверов, сети, systemd, bash-скрипты, безопасность, бэкапы, мониторинг и сопровождение инфраструктуры.
Ответить
Аватара пользователя
rust_sre
Сообщения: 16
Зарегистрирован: 15 май 2026, 23:32

Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Сообщение rust_sre »

Рассказываю, как я месяц кормил весь интернет своим постгресом и не знал.

Сетап: 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 пробовал, отвалилась межконтейнерная сеть, откатил.
👍 ❤️ 🔥 😄 🤔1
✔ Лучший ответ сформирован автоматически — 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. Месяц торчал наружу

Сообщение proxmoxpilot »

классика жанра. это поведение докера задокументировано лет десять как, в доке прямым текстом написано что published ports обходят фаервол хоста. но читать доку конечно не наш метод, наш метод это месяц майнить кому-то монетки
👍 ❤️1 🔥1 😄1 🤔
Аватара пользователя
Austkin
Сообщения: 83
Зарегистрирован: 11 май 2026, 03:40

Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Сообщение Austkin »

✔ Лучший ответ — сформирован автоматически
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 как был, так и остался.
👍1 ❤️ 🔥1 😄 🤔
Аватара пользователя
envoywizard
Сообщения: 14
Зарегистрирован: 11 май 2026, 20:41

Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Сообщение envoywizard »

поэтому podman. без демона, без своих правил в обход, контейнер живёт как обычный процесс и фаервол хоста работает ровно как написан. quadlet-юниты в systemd, compose почти не нужен. перетащил все домашние и половину рабочих хостов, обратно не тянет
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
coder_vlad
Сообщения: 72
Зарегистрирован: 11 май 2026, 01:57

Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Сообщение coder_vlad »

ну началось, в любой теме про докер обязательно придёт человек с подманом. он хорош ровно до момента, когда прилетает чужой compose с хитрым networking, healthcheck и тремя сетями, и начинается пляска с podman-compose, который вечно на полшага позади. На проде, где десяток разношёрстных компоузов от трёх команд, я лучше один раз пропишу DOCKER-USER и забуду
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
kubeaddict
Сообщения: 5
Зарегистрирован: 11 май 2026, 01:56

Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Сообщение kubeaddict »

+1, у меня так редис полгода торчал. узнал, когда Селектел прислал абуз, что с моего IP сканят чужие сети. до сих пор стыдно
👍3 ❤️ 🔥 😄 🤔
Аватара пользователя
Sdgator
Сообщения: 59
Зарегистрирован: 12 май 2026, 01:12

Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Сообщение Sdgator »

а зачем вообще порт публиковать, если ходишь через туннель? ssh -L и так на localhost сервера заходит, докеру наружу ничего отдавать не надо
👍 ❤️ 🔥 😄 🤔2
Аватара пользователя
causious
Сообщения: 30
Зарегистрирован: 13 май 2026, 16:00

Re: Docker молча выставил постгрес в интернет в обход nftables. Месяц торчал наружу

Сообщение causious »

пароль postgres на постгресе в 2026 это отдельный жанр. даже без докера оно рано или поздно нашлось бы через какой-нибудь дырявый pgadmin. поставь scram-sha-256, нормальный пароль из менеджера и подрежь pg_hba до конкретных сетей. тогда дыра в фаерволе превращается из катастрофы в неприятность. слои защиты работают только когда их больше одного
👍1 ❤️ 🔥1 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Linux и системное администрирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость