Віддалений доступ до бази даних: як не виставляти її на весь інтернет
Два способи підключитися до бази даних на VDS з робочого комп'ютера: SSH-тунель і відкритий порт з обмеженнями. Що вибрати і як перевірити.
Оновлено 23 серпня 2026 р.
База даних, що слухає 0.0.0.0 з паролем root, живе лише до першого сканування — а весь діапазон адрес сканують безперервно. Водночас підключення до бази даних із ноутбука через клієнт зручне й часто необхідне. Є два способи, і лише один із них не має недоліків.
Спосіб 1: SSH-тунель (рекомендовано)
База даних залишається прив'язаною до 127.0.0.1, а назовні відкрито лише SSH. На вашому комп'ютері:
ssh -L 5433:127.0.0.1:5432 root@YOUR_ADDRESS -N
ssh -L 3307:127.0.0.1:3306 root@YOUR_ADDRESS -N
Тепер підключайтеся до 127.0.0.1:5433 у DBeaver, TablePlus або psql. З погляду бази даних це виглядає як локальне підключення.
Більшість клієнтів уміють налаштовувати тунель самостійно: у параметрах підключення є вкладка «SSH». Вкажіть адресу машини з розділу «Огляд» панелі /hosting/vds/m/<id> та свій ключ.
Перевага цього способу: вам не потрібно нічого змінювати в базі даних чи конфігурації фаєрвола.
Спосіб 2: відкритий порт з обмеженнями
Це крайній захід — для випадків, коли підключається зовнішній сервіс із відомою статичною адресою. Кожен крок нижче обов'язковий:
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 'long-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'203.0.113.10';
Без TLS таке підключення передає дані у відкритому вигляді. ufw allow 5432 без зазначення джерела — це саме те, що означає «відкрити його всьому інтернету».
Перевірка
З іншої машини:
nmap -Pn -p 3306,5432,6379,27017 YOUR_ADDRESS
Очікувана відповідь — 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-адреси з розділу «Огляд» — жодної плутанини з двома стеками не буде.