Как правильно натянуть презерватив

Вот поставил ты docker, запустил на нем контейнер, пробросил порты, збс! Только вот есть одно НО. Проброшенные порты торчат жопой наружу и любой желающий может получить к ним доступ.

Хуйня! У меня например на хостовой машине стоит nginx, который прокси-пасит по урлам на нужные приложения, например:

curl https://bashdays.ru/vault/

И оно проксирует на localhost:8002, на этом порту крутится контейнер с vault hashicorp.

Но если сделать так:

curl XXX.XXX.XXX.XXX:8002

Ты сразу попадешь в контейнер, минуя nginx и все его правила. Говно!

Напрашивается iptables, но в связке с docker это то еще приключение.

Есть решение гораздо изящнее. Рассмотрим пример с gitea.

Это урезанный docker-compose.yml:

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:latest
    networks:
      - gitea
    volumes:
      - gitea:/data
    ports:
      - "127.0.0.1:3000:3000"
      - "127.0.0.1:2221:22"

Смотрим секцию с портами и видим там биндинг на 127.0.0.1. Вот это оно и есть. То есть ты и порты пробрасываешь на хостовую машину и наружу ими не светишь.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
То есть ты и порты пробрасываешь на хостовую машину и наружу ими не светишь.

Nginx на хостовой машине отлично сходит на 127.0.0.1:3000, но вот если снова выполнить:

curl XXX.XXX.XXX.XXX:3000

То тебе покажут письку!

Вроде элементарно, но как оказалось дохуя специалистов этого не знают и продолжают трахаться с iptables.

И да, оказывается многие (в основном деды) не знают, что docker-compose (тот что бинарник) это легаси и файлики docker-compose.yml теперь можно запускать так:

docker compose up -d

А вообще если у тебя всё в контейнерах крутится, выкинь nginx и замени на traefik и никакие порты по умолчанию жопой наружу торчать не будут + автоматическое получение SSL для доменов.

Пользуйтесь!