Skip to content
VDS · Бази даних

Віддалений доступ до бази даних: як не виставляти її на весь інтернет

Два способи підключитися до бази даних на 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-адреси з розділу «Огляд» — жодної плутанини з двома стеками не буде.