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