Безопасное подключение к MySQL - SSL MySQL против Stunnel против SSH Tunneling

15

У нас есть приложение PHP, которое подключается к серверу MySQL, и мы хотим защитить соединения между веб-сервером, серверами приложений и базой данных.

В пиковые периоды времени веб-серверы осуществляют много сотен одновременных подключений к базе данных и выполняют множество небольших операций чтения и записи. Я знаю, что это не оптимально, и параллельно работаю над сокращением количества подключений к базам данных.

В настоящее время у нас нет постоянных подключений к базе данных, и хотя мы намерены в будущем, я хотел бы реализовать это независимо от этого.

Аппаратно - сервер MySQL довольно компактен (16 ядер), как и веб-серверы. Это выделенные серверы.

Мой вопрос касается наиболее эффективного способа защиты и шифрования соединений с сервером базы данных.

Мое исследование до сих пор показало, что основное снижение производительности связано с настройкой SSL-соединения - когда SSL-соединение установлено, производительность снижается незначительно. И вот что я имею о каждом методе защиты соединения:

  1. MySQL SSL Certificates - работает так же, как обычный SSL. Может использовать клиентские сертификаты для предотвращения несанкционированных подключений. Нет постоянных соединений с нашей существующей установкой. Тем не менее MySQL должен прослушивать открытый порт брандмауэра.
  2. Stunnel. Настройте порт для порта ssl туннель. Не нужно перенастраивать MySQL. Может закрыть обычный порт прослушивания MySQL, чтобы предотвратить попытки злонамеренного подключения MySQL. Не поддерживает постоянные соединения. Хит производительности неизвестен.
  3. Туннелирование SSH. Создайте туннель SSH между клиентом и сервером. Не нужно перенастраивать MySQL. Может закрыть обычный порт прослушивания MySQL, чтобы предотвратить попытки злонамеренного подключения MySQL. Поддерживает постоянные соединения, но иногда они выпадают. Хит производительности неизвестен.

Это насколько я смог получить. Я знаю об ограничениях тестов - по моему опыту их очень сложно симулировать трафик в реальном мире. Я надеялся, что у кого-то есть какой-нибудь совет, основанный на их собственном опыте защиты MySQL?

Благодарность

dastra
источник
Какой тип серверной / сетевой архитектуры у вас есть? Какой сценарий вы пытаетесь предотвратить? Если вся ваша межсерверная связь осуществляется через отдельный коммутатор / VLAN, вам может не потребоваться защита от прослушивания. Что касается производительности, запускайте openssl speedи выбирайте шифры, которые соответствуют вашим потребностям в защите и снижают производительность.
Марчин,
@Marcin - спасибо за совет по скорости openssl. Сценарии, которые я пытаюсь предотвратить, - это неавторизованные соединения с MySQL и шифрование связи между серверами. Любая дополнительная помощь, которую вы можете оказать, сравнивая эти три подхода, будет с благодарностью получена.
Дастра
1
3) использовать autossh, чтобы уменьшить эффект отсева. Он отключится автоматически в случае отключения. Хорошо работает здесь во многих ситуациях.
ansi_lumen

Ответы:

5

Я бы пошел с ssh-туннелем и сделал бы это autosshвместо ssh. Что касается производительности, я бы сказал, что протокол SSH очень настраиваемый, и вы можете при необходимости точно настроить ваше соединение.

Но я не ожидал бы заметных накладных расходов после того, как соединение установлено.

ansi_lumen
источник
3

Взглянув на тесты этой статьи (MySQL Performance Blog), вы действительно должны избегать встроенных в MySQL возможностей SSL.

Николас Бадия
источник