Bezpieczne połączenie z MySQL - MySQL SSL vs Stunnel vs SSH Tunneling

15

Mamy aplikację PHP, która łączy się z serwerem MySQL i chcemy zabezpieczyć połączenia między serwerami WWW i aplikacjami a bazą danych.

W godzinach szczytu serwery WWW wykonują setki równoczesnych połączeń z bazą danych i wykonują wiele małych odczytów i zapisów. Wiem, że to nie jest optymalne i pracuję nad zmniejszeniem liczby połączeń z bazą danych równolegle z tym.

Obecnie nie mamy stałych połączeń z bazą danych i chociaż zamierzamy to w przyszłości, chciałbym to wdrożyć niezależnie od tego.

Pod względem sprzętowym - serwer MySQL jest dość masywny (16 rdzeni), podobnie jak serwery sieciowe. To serwery dedykowane.

Moje pytanie dotyczy zatem najbardziej wydajnego sposobu zabezpieczania i szyfrowania połączeń z serwerem bazy danych.

Moje dotychczasowe badania sugerują, że głównym obciążeniem związanym z wydajnością jest konfiguracja połączenia SSL - po podłączeniu SSL występuje niewielki spadek wydajności. A oto co mam o każdej metodzie zabezpieczenia połączenia:

  1. Certyfikaty MySQL SSL - działa tak jak normalny SSL. Może używać certyfikatów klienta, aby zapobiegać nieautoryzowanym połączeniom. Brak trwałych połączeń z naszą istniejącą konfiguracją. Nadal muszę mieć MySQL nasłuchujący na otwartym porcie zapory.
  2. stunnel. Skonfiguruj tunel ssl z portu do portu. Nie musisz ponownie konfigurować MySQL. Może zamknąć normalny port nasłuchiwania MySQL, aby zapobiec złośliwym próbom połączenia MySQL. Nie obsługuje trwałych połączeń. Nieznany hit wydajności.
  3. Tunelowanie SSH. Utwórz tunel SSH między klientem a serwerem. Nie musisz ponownie konfigurować MySQL. Może zamknąć normalny port nasłuchiwania MySQL, aby zapobiec złośliwym próbom połączenia MySQL. Obsługuje trwałe połączenia, ale czasami są one przerywane. Nieznany hit wydajności.

To jest tak daleko, jak tylko mogłem. Zdaję sobie sprawę z ograniczeń testów porównawczych - z mojego doświadczenia w ich prowadzeniu bardzo trudno jest symulować ruch w świecie rzeczywistym. Miałem nadzieję, że ktoś ma jakieś porady oparte na własnych doświadczeniach związanych z zabezpieczaniem MySQL?

Dzięki

dastra
źródło
Jaką masz architekturę serwerową / sieciową? Jakiego scenariusza próbujesz zapobiec? Jeśli cała komunikacja między serwerami odbywa się na osobnym przełączniku / sieci VLAN, być może nie potrzebujesz ochrony przed wąchaniem. Jeśli chodzi o wydajność, uruchom openssl speedi wybierz szyfry, które pasują do twoich potrzeb w zakresie ochrony w porównaniu do kompromisu wydajności.
Marcin
@Marcin - dzięki za wskazówkę dotyczącą prędkości openssl. Scenariuszami, którym próbuję zapobiec, są nieautoryzowane połączenia z mysql i szyfrowanie komunikacji między serwerami. Jakakolwiek dalsza pomoc, którą możesz udzielić, porównując trzy podejścia, zostanie przyjęta z wdzięcznością.
dastra
1
do 3) użyj autossh, aby zmniejszyć efekt rezygnacji . Połączy się automatycznie w przypadku rozłączenia. Działa tu dobrze w wielu sytuacjach.
ansi_lumen

Odpowiedzi:

5

Poszedłbym z tunelem ssh i zrobiłbym to z autosshzamiast ssh. Jeśli chodzi o wydajność, powiedziałbym, że protokół SSH jest wysoce konfigurowalny i w razie potrzeby można dostroić połączenie.

Ale nie spodziewałbym się zauważalnego obciążenia po skonfigurowaniu połączenia.

ansi_lumen
źródło
3

Patrząc na testy tego artykułu (MySQL Performance Blog), powinieneś naprawdę unikać natywnej możliwości MySQL w zakresie SSL.

Nicolas BADIA
źródło