Введение
При разработке и аналитике на коробочной версии Битрикс24 часто возникает необходимость получить прямой доступ к базе данных MySQL извне. Это может потребоваться для подключения BI-систем (Yandex DataLens, PowerBI, Tableau), построения кастомной аналитики, выгрузки данных в корпоративное хранилище или использования сторонних инструментов администрирования .
Однако по умолчанию в BitrixVM доступ к MySQL заблокирован из соображений безопасности — подключиться можно только с локального хоста (localhost) . В этой статье мы подробно разберем, как открыть удаленный доступ к базе данных для определенных IP-адресов на примере CentOS 9 и BitrixVM.
Область применения
Настройка удалённого доступа к MySQL необходима в следующих случаях:
| Сценарий | Описание |
|---|---|
| Yandex DataLens | Подключение базы MySQL напрямую для построения дашбордов и аналитики |
| Другие BI-системы | PowerBI, Tableau, Google Looker Studio, Yandex DataLens, Apache Superset, Metabase и другие инструменты визуализации |
| Внешние приложения | Подключение CRM к внешним системам на уровне БД |
| Администрирование | Использование HeidiSQL, DBeaver, Sequel Pro и других клиентов |
| Выгрузка в хранилище | Регулярный экспорт данных в корпоративное DWH |
Примечание: Поскольку Yandex DataLens является одной из самых востребованных BI-систем для работы с Битрикс24 в российской экосистеме, именно под него в статье приведён полный пример настройки.
Предостережения по безопасности
⚠️ Важно! Открытие удалённого доступа к базе данных — ответственная операция. Настоятельно рекомендуется:
Разрешать доступ только с конкретных IP-адресов, а не для всех (
%)Использовать сложные пароли
После настройки ограничить доступ на уровне iptables
Рассмотреть альтернативу — использование SSH-туннеля (для Yandex DataLens, к сожалению, не подходит)
Пошаговая инструкция
Шаг 1. Подключение к серверу по SSH
bashssh root@your_server_ip
Шаг 2. Проверка текущих правил iptables
В BitrixVM по умолчанию используется iptables. Проверьте текущие правила:
iptables -L -n -v
Шаг 3. Открытие порта 3306 в iptables для конкретного IP
Рекомендуемый способ — разрешить доступ только с определённого IP-адреса (например, с IP Yandex DataLens или вашего офиса):
bash# Разрешаем доступ с конкретного IP-адреса iptables -I INPUT -s xxx.xxx.xxx.xxx/32 -p tcp --dport 3306 -j ACCEPT
Если нужно открыть доступ для всех (не рекомендуется):
bashiptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT
Шаг 4. Сохранение правил iptables
Чтобы правила не сбросились после перезагрузки сервера, их необходимо сохранить:
bash# Сохраняем правила service iptables save # Или /etc/init.d/iptables save # Проверяем, что правила сохранились cat /etc/sysconfig/iptables
Шаг 5. Настройка MySQL/MariaDB для приёма внешних подключений
По умолчанию MySQL слушает только 127.0.0.1 (localhost). Необходимо изменить параметр bind-address.
Откройте конфигурационный файл MySQL:
bash# Для BitrixVM / CentOS nano /etc/my.cnf # Или если используется MariaDB nano /etc/my.cnf.d/server.cnf
Найдите строку bind-address и измените её:
# Было (только локальные подключения) bind-address = 127.0.0.1 # Стало (принимаем подключения со всех интерфейсов) bind-address = 0.0.0.0 # Или закомментируйте строку # bind-address = 127.0.0.1
Важно: В BitrixVM также может присутствовать параметр
skip-name-resolve— он отключает обратное DNS-разрешение. При подключении с внешних адресов это может быть полезно, но убедитесь, что вы используете IP-адреса для подключения, а не доменные имена.
Шаг 6. Перезапуск MySQL
После изменения конфигурации перезапустите MySQL:
bashsystemctl restart mysql # или systemctl restart mariadb # или /etc/init.d/mysql restart
Шаг 7. Создание пользователя для удалённого доступа
Зайдите в консоль MySQL:
bashmysql -u root -p
Вариант А: Создание нового пользователя с доступом с любого хоста (менее безопасно):
sqlCREATE USER 'user_dl'@'%' IDENTIFIED BY 'j38fi3dDUjVmE@D2!'; GRANT ALL PRIVILEGES ON sitemanager.* TO 'user_dl'@'%'; FLUSH PRIVILEGES;
Вариант Б: Создание пользователя с доступом только с конкретного IP (рекомендуется):
sql-- Доступ только с IP, который мы добавили в iptables CREATE USER 'user_dl'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'j38fi3dDUjVmE@D2!'; GRANT ALL PRIVILEGES ON sitemanager.* TO 'user_dl'@'xxx.xxx.xxx.xxx'; FLUSH PRIVILEGES;
Вариант В: Предоставление доступа существующему пользователю:
sql-- Добавляем существующему пользователю возможность подключаться извне GRANT ALL PRIVILEGES ON sitemanager.* TO 'bitrix0'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
Шаг 8. Проверка созданных прав
sql-- Просмотр прав пользователя SHOW GRANTS FOR 'user_dl'@'localhost'; SHOW GRANTS FOR 'user_dl'@'%'; SHOW GRANTS FOR 'user_dl'@'xxx.xxx.xxx.xxx';
Шаг 9. Проверка подключения извне
С удалённой машины проверьте подключение:
bash# Через командную строку mysql -h your_server_ip -u user_dl -p # С указанием порта mysql -h your_server_ip -P 3306 -u user_dl -p
Полный пример для Yandex DataLens
Ниже приведён полный рабочий пример настройки для подключения Yandex DataLens к базе данных Битрикс24.
bash# 1. Заходим на сервер ssh root@your-bitrix-server.ru # 2. Открываем порт в iptables для IP-диапазонов Yandex DataLens # Актуальные IP-адреса Yandex DataLens лучше уточнить в документации Яндекс.Облака iptables -I INPUT -s 84.201.0.0/16 -p tcp --dport 3306 -j ACCEPT iptables -I INPUT -s 178.176.0.0/16 -p tcp --dport 3306 -j ACCEPT # 3. Сохраняем правила iptables service iptables save # 4. Меняем bind-address в /etc/my.cnf sed -i 's/bind-address = 127.0.0.1/bind-address = 0.0.0.0/g' /etc/my.cnf # 5. Перезапускаем MySQL systemctl restart mysql # 6. Заходим в MySQL и создаём пользователя mysql -u root -p <<EOF CREATE USER 'datalens_user'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT SELECT ON sitemanager.* TO 'datalens_user'@'%'; FLUSH PRIVILEGES; EOF
После этого в Yandex DataLens при создании подключения нужно указать:
| Параметр | Значение |
|---|---|
| Тип БД | MySQL |
| Хост | IP вашего сервера |
| Порт | 3306 |
| Имя БД | sitemanager |
| Пользователь | datalens_user |
| Пароль | SecurePass123! |
Альтернативный способ: SSH-туннель
Если вы не хотите открывать MySQL-порт в интернет, можно использовать SSH-туннель:
bash# Создаём SSH-туннель с локального компьютера ssh -L 3307:localhost:3306 user@your-server.ru -N # Теперь подключаемся к localhost:3307 как к удалённой БД mysql -h 127.0.0.1 -P 3307 -u user_dl -p
Важно: Для Yandex DataLens этот способ не подходит, так как DataLens не поддерживает создание SSH-туннеля. Только прямое подключение по TCP.
Типичные ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
Host 'xxx.xxx.xxx.xxx' is not allowed to connect
|
Пользователь не имеет прав с этого IP |
Выполнить GRANT ... TO 'user'@'xxx.xxx.xxx.xxx'
|
Can't connect to MySQL server on 'host' (113)
|
Порт 3306 закрыт в iptables |
Проверить правила: iptables -L -n -v | grep 3306
|
Can't connect to MySQL server on 'host' (111)
|
MySQL слушает только localhost |
Проверить bind-address в /etc/my.cnf
|
Access denied for user
|
Неверный пароль или имя пользователя |
Проверить логин/пароль и права через SHOW GRANTS
|
Заключение
Открытие удалённого доступа к MySQL в BitrixVM — задача несложная, но требующая внимания к безопасности. Главные моменты, которые нужно запомнить:
-
В BitrixVM по умолчанию используется iptables, а не firewalld
-
Всегда ограничивайте доступ конкретными IP-адресами
-
Не забывайте сохранять правила iptables после изменения
-
Меняйте
bind-addressс127.0.0.1на0.0.0.0в конфигурации MySQL -
Создавайте отдельного пользователя для удалённого доступа с минимально необходимыми правами
Эти настройки позволят вам подключать Yandex DataLens и другие BI-системы напрямую к вашей базе данных Битрикс24 для построения аналитики и дашбордов.
