Вот поставил ты
docker, запустил на нем контейнер, пробросил порты, збс! Только вот есть одно НО. Проброшенные порты торчат жопой наружу и любой желающий может получить к ним доступ.ㅤ
Хуйня! У меня например на хостовой машине стоит
nginx, который прокси-пасит по урлам на нужные приложения, например:curl https://bashdays.ru/vault/
И оно проксирует на
localhost:8002, на этом порту крутится контейнер с vault hashicorp.Но если сделать так:
curl XXX.XXX.XXX.XXX:8002
Ты сразу попадешь в контейнер, минуя
nginx и все его правила. Гавно!Напрашивается
iptables, но в связке с docker это то еще приключение. Про эти моменты писал в этом и этом посте.
Есть решение гораздо изящнее. Рассмотрим пример с gitea.
Это урезанный
docker-compose.ymlversion: "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. Вот это оно и есть. То есть ты и порты пробрасываешь на хостовую машину и наружу ими не светишь.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 для доменов.Пользуйтесь!
tags: #devops #docker #security
—
🔔 @bashdays➡️ @gitgate