Удалённое подключение к базе: как не открыть её всему интернету
Три способа подключиться к базе на 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 из «Обзора» — путаницы с двумя стеками не будет.