17 апреля 2024 18 апреля 2024 Linux docker stunnel4


Серверную часть тонеля stunnel4 не имеет смысла описывать, а вот создания контейнера шифрующего трафика ещё ни где особо не описано. Итак

В директори services/stunnel4 размещаем 3 файла

  • [remote-ip].pem - файл сертификат, [remote-ip]  я использую для быстрой идентификации IP сервера к которому идёт подключение
  • stunnel.conf - настройка stunnel4
  • Dockerfile - файл образа

в файле stunnel.conf пишем примерно такое

client = yes
pid = /var/run/stunnel.pid
foreground = yes

[postgres]
accept = 0.0.0.0:55432
connect = [remote-ip]:15432
cert = /etc/stunnel/[remote-ip].pem

Разумеется [remote-ip]  заменяем на свой

В файле Dockerfile пишем вот такое

from avccvut/stunnel4:0.1-5.44

COPY ./[remote-ip].pem /etc/stunnel/
COPY ./stunnel.conf /etc/stunnel/

CMD ["stunnel4", "/etc/stunnel/stunnel.conf"]

В файле docker-compose.yml добавляем новый такой контейнер:

  postgres:
    # ...

  stunnel4:
    container_name: ${APP_NAME}-stunnel4
    build:
      context: services/stunnel4
    ports:
      - 55432:55432

После того как контейнер будет запущен обращаться к продакшен базе вот так

docker-compose exec postgres psql postgresql://user:psswrd@stunnel4:55432/dbname

Или например вот так можно скорпировать таблицу из внешней базы в локальный контейнер

docker-compose exec postgres pg_dump postgresql://user:psswrd@stunnel4:55432/dbname -t auth_user | docker-compose exec postgres psql dbname