Sichere Verbindung zu MySQL herstellen - SSL vs Stunnel vs SSH Tunneling von MySQL


14

Wir haben eine PHP-Anwendung, die eine Verbindung zu einem MySQL-Server herstellt, und wir möchten die Verbindungen zwischen den Web- und Anwendungsservern und der Datenbank sichern.

In Spitzenzeiten stellen die Webserver mehrere hundert gleichzeitige Verbindungen zur Datenbank her und führen viele kleine Lese- und Schreibvorgänge durch. Mir ist bewusst, dass dies nicht optimal ist, und ich arbeite daran, die Anzahl der parallelen Datenbankverbindungen zu verringern.

Wir haben derzeit keine dauerhaften Verbindungen zur Datenbank aktiviert, und obwohl wir dies in Zukunft beabsichtigen, möchte ich dies unabhängig davon implementieren.

In Bezug auf die Hardware - der MySQL-Server ist ziemlich umfangreich (16 Kerne), ebenso wie die Webserver. Sie sind dedizierte Server.

Meine Frage bezieht sich dann auf die performanteste Art und Weise, die Verbindungen zum Datenbankserver zu sichern und zu verschlüsseln.

Meine bisherigen Untersuchungen haben ergeben, dass der Hauptaufwand für die Leistung beim Einrichten der SSL-Verbindung liegt - sobald SSL verbunden ist, gibt es nur geringe Leistungseinbußen. Und hier ist, was ich über jede Methode zum Sichern der Verbindung habe:

  1. MySQL SSL-Zertifikate - funktionieren wie normales SSL. Kann Client-Zertifikate verwenden, um nicht autorisierte Verbindungen zu verhindern. Keine dauerhaften Verbindungen mit unserem bestehenden Setup. Immer noch muss MySQL einen offenen Port der Firewall überwachen.
  2. stunnel. Richten Sie einen Port-to-Port-SSL-Tunnel ein. Sie müssen MySQL nicht neu konfigurieren. Kann den normalen MySQL-Überwachungsport schließen, um böswillige MySQL-Verbindungsversuche zu verhindern. Unterstützt keine dauerhaften Verbindungen. Unbekannter Leistungstreffer.
  3. SSH-Tunneling. Erstellen Sie einen SSH-Tunnel zwischen dem Client und dem Server. Sie müssen MySQL nicht neu konfigurieren. Kann den normalen MySQL-Überwachungsport schließen, um böswillige MySQL-Verbindungsversuche zu verhindern. Unterstützt dauerhafte Verbindungen, die jedoch manchmal unterbrochen werden. Unbekannter Leistungstreffer.

Das ist so weit ich konnte. Ich bin mir der Grenzen von Benchmarks bewusst - meiner Erfahrung nach ist es sehr schwierig, den Verkehr in der realen Welt zu simulieren. Ich hatte gehofft, dass jemand einen Rat hat, der auf seinen eigenen Erfahrungen mit der Sicherung von MySQL basiert.

Vielen Dank


Welche Art von Server- / Netzwerkarchitektur haben Sie? Was für ein Szenario wollen Sie verhindern? Wenn sich Ihre gesamte Server-zu-Server-Kommunikation auf einem separaten Switch / VLAN befindet, benötigen Sie möglicherweise keinen Anti-Sniffing-Schutz. Was die Leistung openssl speedanbelangt, führen Sie die Verschlüsselungen aus und wählen Sie sie aus, die Ihren Anforderungen hinsichtlich des Schutzes vor Leistungseinbußen entsprechen.
Marcin

@Marcin - danke für den openssl speed tip. Die Szenarien, die ich verhindern möchte, sind nicht autorisierte Verbindungen zu MySQL und das Verschlüsseln der Kommunikation zwischen den Servern. Jede weitere Hilfe, die Sie beim Vergleich der drei Ansätze geben können, wäre dankbar.
Dastra

1
bis 3) Verwenden Sie autossh , um den Dropout-Effekt zu reduzieren. Bei einem Verbindungsabbruch wird die Verbindung automatisch wiederhergestellt. Funktioniert hier in vielen Situationen gut.
ansi_lumen

Antworten:


5

Ich würde mit dem SSH-Tunnel gehen und es mit autosshanstelle von tunssh . Über die Leistung würde ich sagen, dass das SSH-Protokoll hochgradig anpassbar ist und Sie Ihre Verbindung bei Bedarf fein abstimmen können.

Ich würde aber keinen merklichen Overhead erwarten, nachdem die Verbindung aufgebaut ist.


2

Wenn Sie sich die Benchmarks dieses Artikels ansehen (MySQL Performance Blog), sollten Sie die native SSL-Fähigkeit von MySQL wirklich vermeiden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.