Do not map db ports

42 Created on 12 February 2025 at 13:56
  Backend     It  

Проброс порта для базы данных (например, 5432 для PostgreSQL) на хостовую систему может сделать систему уязвимой для разного рода атак.

Для взаимодействия с базой данных из внешней сети или с другой машины лучше использовать безопасные методы, такие как SSH-туннели, которые обеспечивают дополнительный слой безопасности.

  • Можно еще настроить VPN.
  • Нужно подойти с умом, так как популярные ппротоколы блокируются "товарищами " из Роскомнадзора
  • Или нужно регистрировтаь организацию.

Шаги по настройке удаленного доступа через SSH-туннель

Нужно найти IP-адрес контейнера PostgreSQL в Docker сети.

  • Чтобы подключиться к базе данных, необходимо знать IP-адрес контейнера PostgreSQL внутри сети Docker.
  • Конечно, будет проще, если изначально был прокинут порт на loopback интерфейс системы.

Сначала нужно убедится, что контейнер работает:

docker ps

Далее нужнополучить IP-адрес контейнера:

docker inspect <container_name_or_id> | grep IPAddress
$ IPAddress": 192.168.10.1

  • Здесь 192.168.10.1 — это IP-адрес контейнера PostgreSQL в Docker-сети.

Настройка SSH-туннеля

Чтобы взаимодействовать с базой данных, не открывая порты на сервере, используется SSH-туннелирование.

ssh -L 5432:192.168.10.1:5432 <user>@<server_ip>

  • L: Указывает, что идет перенаправление на локальный порт.
  • 5432: Локальный порт на машине.
  • 192.168.10.1: IP-адрес контейнера PostgreSQL внутри Docker-сети.
  • 5432: Порт, на котором работает PostgreSQL внутри контейнера.
  • <user>@<server_ip>: Пользователь и IP-адрес удаленного сервера.

Это создаст туннель, который перенаправит все подключения с порта 5432 на локальном компьютере на порт 5432 контейнера PostgreSQL.

ssh -f -N -L 5432:192.168.16.4:5432 <user>@<server_ip>

  • f: Переводит SSH-сессию в фоновый режим.
  • N: Говорит SSH не запускать удаленные команды, только устанавливать туннель.

Настроить DBeaver для работы с PostgreSQL

Теперь, когда SSH-туннель настроен, можно настроить DBeaver для подключения к базе данных.

Database -> New Database Connection.

Выбрать PostgreSQL.

Ввести следующие данные подключения:

  • Host: localhost
  • Port: 5432
  • Database: имя целевой базы данных.
  • Username: PostgreSQL пользователь.
  • Password: PostgreSQL пароль пользователя.

Важно: DBeaver будет подключаться к базе данных через локальный порт, который проброшен через SSH к удаленному серверу.

Можно нажать Test Connection для проверки соединения.

  • Если все настроено правильно, DBeaver установит соединение с базой данных.
  • Нельзя закрывать SSH тунель в терминале, пока работает соединение в DBeaver.

Заключение

Использование SSH-туннелей позволяет обеспечить безопасное подключение к контейнеру PostgreSQL, не открывая порты на сервере. Это повышает уровень безопасности, так как данные передаются через зашифрованное соединение и доступны только через локальный туннель.