Do not map db ports
Проброс порта для базы данных (например, 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, не открывая порты на сервере. Это повышает уровень безопасности, так как данные передаются через зашифрованное соединение и доступны только через локальный туннель.