Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Подключение к базе данных через SSH-туннель: Безопасный доступ из DBeaver/Navicat
Вы когда-нибудь пытались зайти в банковский сейф через уличную дверь, а не через бронированный вход? Так же глупо подключаться к базе данных напрямую, минуя SSH-туннель — это как оставлять ключи от сервера под ковриком. В этом уроке вы научитесь настраивать безопасное удалённое подключение к MySQL/PostgreSQL через DBeaver или Navicat, используя проброс портов по SSH. Это защитит ваши данные от перехвата и даст доступ к базам, которые "спрятаны" за фаерволом.
Почему нельзя подключаться напрямую?
Представьте, что ваша база данных — это дом с окнами:
- Прямое подключение (без туннеля) = окна открыты, и любой может заглянуть или пробраться внутрь.
- Подключение через SSH-туннель = все окна закрыты, а вход только через секретный лаз (зашифрованный канал).
| Уязвимость | Риск без SSH-туннеля | Решение с SSH-туннелем |
|---|---|---|
| Перехват трафика | Логины/пароли и данные могут быть украдены (MITM-атака) | Все данные шифруются по SSH |
| Блокировка фаерволом | Порт базы (3306/5432) закрыт для внешнего мира | Туннель использует порт 22 (SSH), который обычно открыт |
| Атаки на слабые пароли | Брутфорс по открытому порту | Аутентификация по SSH-ключу + паролю |
Важно: Многие хостеры (например, AWS RDS, DigitalOcean) по умолчанию запрещают внешние подключения к базам. SSH-туннель — единственный безопасный способ обойти это ограничение.
Что такое SSH-туннель и как он работает?
SSH-туннель (или проброс портов) — это технология, которая перенаправляет трафик с вашего локального компьютера на удалённый сервер через зашифрованный канал SSH.
Аналогия с почтовой службой
- Вы отправляете письмо (запрос к базе) в конверте.
- Вместо того чтобы бросить его в почтовый ящик напрямую (риск потерять), вы отдаёте его курьеру (SSH).
- Курьер относит письмо в секретный почтовый отдел (ваш сервер) и возвращает ответ тем же путём.
Схема работы
[Ваш компьютер] ←(локальный порт 3307)→ [SSH-туннель] ←(порт 22)→ [Ваш сервер] ←(порт 3306)→ [База данных]
- Локально вы подключаетесь к 127.0.0.1:3307 (например), но на самом деле трафик идёт через SSH на сервер, а оттуда — в базу.
Подготовка: Что вам понадобится
Перед настройкой убедитесь, что у вас есть:
- SSH-доступ к серверу (логины/пароль или приватный ключ).
- Установленный DBeaver/Navicat (или другой SQL-клиент).
- Права на подключение к базе (имя пользователя, пароль, имя базы).
- Открытый порт 22 на сервере (проверьте фаервол:
sudo ufw status).
Совет: Если вы используете AWS EC2, убедитесь, что в Security Group разрешён входящий трафик на порт 22 (SSH) с вашего IP.
Шаг 1: Создание SSH-туннеля вручную (для понимания)
Прежде чем настраивать DBeaver, давайте создадим туннель через терминал (Linux/macOS) или PuTTY (Windows). Это поможет понять механику.
Для Linux/macOS (Terminal)
ssh -L 3307:localhost:3306 пользователь@ваш_сервер -N
-L 3307:localhost:3306— пробрасываем локальный порт 3307 на 3306 (MySQL) на сервере.пользователь@ваш_сервер— ваши SSH-креды.-N— не выполнять команды, только туннель.
Пример: Если база на другом хосте (не
localhost), используйте:ssh -L 3307:10.0.0.2:3306 пользователь@ваш_сервер -Nгде
10.0.0.2— внутренний IP сервера с базой.
Для Windows (PuTTY)
- Откройте PuTTY.
- Введите хост и порт (22) в Session.
- Перейдите в Connection → SSH → Tunnels.
- В поле Source port введите
3307. - В поле Destination введите
localhost:3306(или10.0.0.2:3306, если база на другом сервере). - Нажмите Add, затем Open.
- Введите логин/пароль от SSH.
Проверка: После создания туннеля откройте новый терминал и выполните:
telnet 127.0.0.1 3307Если соединение установлено — туннель работает!
Шаг 2: Настройка подключения в DBeaver
Теперь настроим DBeaver (аналогично для Navicat).
1. Создайте новое подключение
- Откройте DBeaver → Создать подключение → Выберите MySQL (или PostgreSQL).
- Вкладка Основное:
- Хост:
localhost(или127.0.0.1). - Порт:
3307(тот, что пробросили в туннеле). - База данных: имя вашей базы.
- Пользователь/пароль: данные от базы (не от SSH!).
- Хост:
2. Настройка SSH-туннеля в DBeaver
- Перейдите на вкладку SSH.
- Отметьте галочку Use SSH tunnel.
- Заполните поля:
- SSH Host: IP или домен вашего сервера.
- SSH Port:
22. - User: ваш SSH-пользователь (например,
rootилиubuntu). - Authentication Method:
- Password — если используете пароль.
- Public Key — если подключаетесь по ключу (рекомендуется!).
- Укажите путь к приватному ключу (например,
~/.ssh/id_rsa).
- Укажите путь к приватному ключу (например,
- Local Port:
3307(должен совпадать с портом в подключении к базе).
Важно: Если база находится не на том же сервере, где SSH, укажите Remote Host (например,
10.0.0.2) и Remote Port (3306).
3. Тестирование подключения
- Нажмите Test Connection.
- Если всё настроено верно — увидите сообщение "Success".
- Нажмите Finish и подключитесь к базе.
Шаг 3: Настройка в Navicat
Процесс аналогичен DBeaver, но с небольшими отличиями.
- Создайте новое подключение (MySQL/PostgreSQL).
- В поле Host укажите
127.0.0.1, порт —3307. - Перейдите на вкладку SSH.
- Включите Use SSH Tunnel и заполните:
- SSH Host: IP вашего сервера.
- Port:
22. - User: SSH-пользователь.
- Authentication: выберите Password или Public Key.
- Нажмите Test Connection → OK.
Шаг 4: Автоматизация (опционально)
Чтобы не создавать туннель вручную каждый раз, можно:
- Сохранить сессию в PuTTY (для Windows).
- Использовать
autossh(Linux/macOS) для автоматического переподключения:autossh -M 0 -f -N -L 3307:localhost:3306 пользователь@ваш_сервер - Настроить запуск туннеля при старте системы (через
cronилиsystemd).
Распространённые ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
| "Connection refused" при тесте в DBeaver | Туннель не создан или порт занят | Проверьте, запущен ли SSH-туннель (netstat -tulnp \| grep 3307) |
| "Access denied for user" | Неправильные креды к базе | Убедитесь, что пользователь имеет права на подключение с localhost |
| "SSH connection failed" | Неправильный ключ/пароль | Проверьте путь к ключу или пароль от SSH |
| "Port 22: Connection timed out" | Фаервол блокирует SSH | Разрешите порт 22 в фаерволе (sudo ufw allow 22) |
| "Host key verification failed" | Изменился SSH-ключ сервера | Удалите старый ключ из ~/.ssh/known_hosts |
Безопасность: 5 правил для защиты
- Отключите подключение к базе извне:
-- Для MySQL DROP USER 'user'@'%'; CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; - Используйте SSH-ключи, а не пароли.
- Закройте ненужные порты в фаерволе:
sudo ufw deny 3306 # Для MySQL sudo ufw allow 22 # Только SSH - Настройте fail2ban для защиты от брутфорса:
sudo apt install fail2ban sudo systemctl enable fail2ban - Используйте нестандартный SSH-порт (опционально):
sudo nano /etc/ssh/sshd_config # Измените Port 22 на Port 2222 sudo systemctl restart sshd
Практика для закрепления
Упражнение 1: Теория
- Почему подключение к базе через SSH-туннель безопаснее, чем напрямую?
- Какие порты задействованы в схеме:
[Локальный компьютер] → [SSH-туннель] → [Сервер с базой]? - Что такое
-Lв командеssh -L 3307:localhost:3306...?
Упражнение 2: Настройка вручную
- Создайте SSH-туннель через терминал (или PuTTY) для подключения к тестовой базе.
- Проверьте его работу с помощью
telnet 127.0.0.1 3307. - Подключитесь к базе через
mysql -u пользователь -p -h 127.0.0.1 -P 3307.
Упражнение 3: DBeaver/Navicat
- Настройте подключение к базе через SSH-туннель в DBeaver.
- Экспортируйте структуру одной из таблиц в SQL-файл.
- Создайте нового пользователя в базе с правами только на чтение (
GRANT SELECT...).
Упражнение 4: Диагностика
- Предположим, при тесте подключения вы видите ошибку:
SSH connection failed: Authentication failed.Перечислите возможные причины и способы их устранения.
Упражнение 5: Безопасность
- Напишите команду для фаервола (
ufw), которая:- Закроет доступ к MySQL (порт 3306) для всех, кроме
localhost. - Откроет SSH (порт 22) только для вашего IP (например,
123.123.123.123).
- Закроет доступ к MySQL (порт 3306) для всех, кроме
Итоги
- Вы научились безопасно подключаться к базе через SSH-туннель, минуя блокировки фаервола.
- Теперь вы можете управлять базами на AWS RDS, DigitalOcean, VPS без риска перехвата данных.
- SSH-туннель — это ваш "секретный лаз" в мир защищённых подключений.
Дополнительный материал:
Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно