VDS · Базы данных

Удалённое подключение к базе: как не открыть её всему интернету

Три способа подключиться к базе на VDS с рабочего компьютера: SSH-туннель, VPN и открытый порт с ограничениями. Что выбрать и как проверить.

Обновлено 23 августа 2026 г.

База, слушающая 0.0.0.0 с паролем root, живёт до первого сканирования — а сканируют весь диапазон адресов непрерывно. При этом подключаться к базе с ноутбука через клиент удобно и часто нужно. Есть три способа, и только у одного нет минусов.

Способ 1: SSH-туннель (рекомендуемый)

База остаётся привязанной к 127.0.0.1, наружу не торчит ничего, кроме SSH. На своём компьютере:

ssh -L 5433:127.0.0.1:5432 root@ВАШ_АДРЕС -N
ssh -L 3307:127.0.0.1:3306 root@ВАШ_АДРЕС -N

Теперь в DBeaver, TablePlus или psql подключайтесь к 127.0.0.1:5433. Для базы это выглядит как локальное соединение.

Большинство клиентов умеют поднимать туннель сами: в настройках подключения есть вкладка «SSH». Укажите адрес машины из «Обзора» панели /hosting/vds/<id> и свой ключ.

Плюс способа: ничего не нужно менять в конфигурации базы и брандмауэра.

Способ 2: VPN

Если подключаться нужно нескольким людям или другим сервисам, поднимите WireGuard и разрешите базе слушать адрес внутри VPN:

listen_addresses = 'localhost,10.8.0.1'
host  all  all  10.8.0.0/24  scram-sha-256

Из интернета порт по-прежнему недоступен.

Способ 3: открытый порт с ограничениями

Крайний вариант — когда подключается внешний сервис с известным постоянным адресом. Обязательны все шаги сразу:

ufw allow from 203.0.113.10 to any port 5432 proto tcp

Для PostgreSQL: listen_addresses = '*' и строка hostssl all all 203.0.113.10/32 scram-sha-256 в pg_hba.conf. Для MySQL: bind-address = 0.0.0.0 и пользователь, привязанный к конкретному адресу:

CREATE USER 'app'@'203.0.113.10' IDENTIFIED BY 'длинный-пароль';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'203.0.113.10';

Без TLS такое соединение передаёт данные открытым текстом. ufw allow 5432 без указания источника — это и есть «открыть всему интернету».

Проверка

С другой машины:

nmap -Pn -p 3306,5432,6379,27017 ВАШ_АДРЕС

Ожидаемый ответ — filtered или closed по всем портам. Локально смотрите, что и где слушает:

ss -tulpn | grep -E '3306|5432|6379'

Частые ошибки

СимптомПричина
Клиент не подключается через туннельЛокальный порт занят — возьмите другой
Host ... is not allowed to connectПользователь MySQL привязан к localhost
no pg_hba.conf entry for hostНет правила под ваш адрес
Порт открыт, но пустоБаза слушает только 127.0.0.1
Всё работало, пересталоУ вас динамический адрес провайдера — ещё один довод за туннель

IPv6 на машинах нет, второго адреса тоже. Все правила пишите под один публичный адрес IPv4 из «Обзора» — путаницы с двумя стеками не будет.