Насколько плохо настроить привязку адреса MySQL к 0.0.0.0?

35

Я пытаюсь разрешить удаленному серверу доступ к экземпляру MySQL, который в настоящее время использует сервер Linux совместно с веб-приложением. Согласно документации, единственный способ, которым это было бы возможно (если я не правильно понимаю), это если директива bind-address установлена ​​в 0.0.0.0 , что приводит к тому , что MySQL разрешает доступ с любого IP, который может создать действительного пользователя.

Итак, два вопроса:

  1. Насколько это может быть вредно для безопасности?
  2. Есть ли лучший подход к разрешению как локального, так и удаленного взаимодействия с MySQL?
jonathanatx
источник

Ответы:

36

Я думаю, что вы немного неправильно понимаете настройку адреса привязки . Это локальные адреса, которые MySQL будет прослушивать для соединений. По умолчанию это 0.0.0.0, который является всеми интерфейсами. Этот параметр не ограничивает, какие IP-адреса могут обращаться к серверу, если вы не указали 127.0.0.1 только для localhost.

Если вам необходимо ограничить определенные пользователь из определенных IP - адресов, использовать создание / пользователь гранта , как этоCREATE USER 'bobdole'@'192.168.10.221';

Дуг Люксем
источник
+1, но просто обратите внимание, что адрес прослушивания по умолчанию зависит от того, как установлен MySQL.
Джон Гарденье
Спасибо, Даг, я думаю, что по умолчанию в этом случае был мой локальный хост, но приятно знать, что пользователи определенной базы данных по-прежнему ограничены IP.
jonathanatx
@jonathanatx bind-адрес MySQL по умолчанию (в 5.6 и насколько я знаю) есть 0.0.0.0. Хотя я думаю, что для многих установок лучшим вариантом будет только локальное связывание. Не открывайте дверь, если вы не хотите, чтобы кто-нибудь проходил через нее.
ebyrob
1

а. Это плохо. Несмотря на то, что вы можете ограничить доступ пользователей по ip для каждой базы данных, я думаю, что безопаснее иметь все подключения локально. На моих серверах я разрешаю MySQL принимать только локальные соединения, 127.0.0.1, как конфигурация по умолчанию. Для удаленного доступа к базе данных все, что вам нужно сделать, это создать туннель ssh перед подключением к базе данных, а затем подключиться локально. Если вы пишете с php, это довольно легко сделать. Если вы используете настольное приложение, это легко сделать в Linux (посмотрите ssh tunnel), В Windows я обычно использую программу типа Putty для создания туннеля для меня.

Джейсон Джаст
источник
7
Это довольно безумно. Стандартный способ сделать это - создать пользователей, к которым можно получить доступ только с определенных имен хостов или IP-адресов. Заставить каждый веб-сервер создать SSH-туннель к базе данных - это намного больше работы, чем нужно.
TheLQ
3
Ваш веб-сервер и сервер базы данных не всегда одно и то же устройство. Конечно, не позволяйте подключаться через Интернет, но есть безопасные способы разработки решений с доступом к сети MySQL.
Шейн Мэдден
1
Для небольшой установки (один дБ, один www) вы можете сделать ssh туннелирование. Для реальной настройки ваши vpns и брандмауэры будут защищать вас, поэтому вы должны открыться через 0.0.0.0, чтобы разрешить удаленный доступ.
Соня Гамильтон
2
Для всех, кто думает, что идея SSH-туннеля сумасшедшая, учтите, что основная часть трафика MySQL в чистом виде. Если по какой-либо причине вам необходимо подключиться через ненадежную сеть (например, Интернет), рассмотрите SSH или сделайте это через VPN. Запустите Wireshark или какой-нибудь другой анализатор пакетов, если вы хотите увидеть, о чем я говорю.
Брэд
2
@Brad MySQL поддерживает шифрование, поэтому это не правильно.
Марти Марков