Der SSH-Tunnel (Portweiterleitung) verlangsamt meine MySQL-Abfragen erheblich

7

Ich teste derzeit einige Konfigurationen mit vagrant (virtuelle Box), um 2 Server (derzeit VM) über einen SSH-Tunnel miteinander zu verbinden. Das Ziel ist es, meine Web-App sicher mit der Datenbank zu verbinden.

Das Problem ist, dass meine Abfragen beim Abfragen der Datenbank über einen SSH-Tunnel 5 bis 80 Mal langsamer sind als wenn ich keinen Tunnel verwende. Hier ist der Befehl, den ich benutze:

ssh -N -L 3306:127.0.0.1:3306 [email protected]

Nach dem, was ich gelesen habe, sollte der Overhead nicht so hoch sein, deshalb habe ich ein paar Dinge versucht, um die Übertragungen zu beschleunigen. Ich finde heraus, dass, wenn ich die -NOption entferne , die Abfragen so schnell sind, als ob ich keinen Tunnel benutze, aber ich werde im Terminal als 'sshuser' angemeldet (und das Hinzufügen eines &am Ende des Befehls seltsam) Dinge ...).

Da ich das weiß, habe ich ein paar Fragen:

  • Sind meine Daten noch verschlüsselt, wenn ich die -NOption entferne ?

  • Wenn ja, was kann ich tun, um die Leistung aufrechtzuerhalten, ohne in der Konsole als "sshuser" protokolliert zu werden?

  • Gibt es Optionen, mit denen ich die Verschlüsselung beschleunigen kann?

Vielen Dank im Voraus für Ihr Licht.

Nicolas BADIA
quelle
Verschlüsseln Sie den Datenverkehr nicht. Wenn ein Angreifer Ihren internen Netzwerkverkehr sehen kann, müssen Sie sich viel mehr Sorgen machen.
Nathan C
Ich verschlüssele mein lokales Setup nicht aus Sicherheitsgründen, sondern nur zum Testen.
Nicolas BADIA

Antworten:

8

Der SSH-Tunnel ist als dauerhafte Lösung keine wirklich gute Idee. SSH basiert auf TCP. Die meisten Dinge, die Sie in SSH tunneln können, basieren auf TCP (einschließlich MySQL). Das Tunneln von TCP über TCP kann Auswirkungen auf die Leistung haben. Weil Ihr System versucht, das Backoff und dergleichen auf beiden Verbindungen gleichzeitig zu handhaben.

Wenn Sie eine sichere dauerhafte Verbindung zwischen zwei Hosts im selben Netzwerk wünschen, sollten Sie mit ziemlicher Sicherheit besser untersuchen, was zum Einrichten von IPSEC erforderlich ist. Oder wenn IPSEC für Sie nicht funktioniert, verwenden Sie ein VPN-Setup, das nicht über TCP transportiert wird.

In Bezug auf die Leistung Ihres SSH-Tunnels würde ich mir die von Ihnen verwendeten Chiffren ansehen. Einige sind schneller als andere. Vielleicht können Sie eine schnellere / schwächere Chiffre akzeptieren. Möglicherweise möchten Sie fast überprüfen, ob die Komprimierung deaktiviert ist. Wenn Sie sich auf einer schnellen Verbindung befinden, gibt es wirklich keinen Wert zum Komprimieren, aber es kann zu einer zusätzlichen Latenz für die Komprimierung / Dekomprimierung kommen. Wenn Sie nach dem Ändern immer noch keine Verbesserungen erhalten, möchten Sie wahrscheinlich tcpdump / wireshark auslösen und sehen, ob Sie sehen können, woher die Verzögerungen kommen.

Zoredache
quelle
Vielen Dank für den Vorschlag, ich denke, ich werde versuchen, SSH dafür zu vermeiden, dann ...
Nicolas BADIA
3
Normales SSH-Port-Tunneling ist nicht TCP über TCP. In dem Artikel, auf den Sie verlinkt haben, wird PPP über SSH explizit erwähnt, was eine ganz andere Sache ist.
JPC
1
Ich bin nicht sicher, ob das Problem TCP über TCP für SSH-Tunnel gilt. Weitere
jmng
Das Zitieren von TCP über TCP-Artikel ist nicht wirklich korrekt, da der Artikel dies im Kontext von PPP sagt. Beim SSH-Tunneling gibt es keine TCP-Überlastung, Paketnummerierung, Wiederholungsversuche usw. Weil alle Probleme des Streams bereits durch die von SSH selbst verwendete TCP-Schicht gelöst sind. Wenn also das Tunneln verwendet wird, wird die TCP-Verbindung durch SSH beendet, der Byte-Stream wird über SSH übertragen und dann an einen anderen TCP weitergeleitet. Der Leistungsverlust wird also durch 3 TCP-Verbindungen anstelle von 1 und durch Verschlüsselung verursacht.
Tomáš
1

Die -NOption verhindert lediglich, dass SSH einen Remote-Befehl ausführt, nicht die Verschlüsselung. Ihr Tunnel wird trotzdem verschlüsselt.

Wenn Sie verwenden -N, erstellt ssh nur den Tunnel, nicht die Shell und alle Umgebungsvariablen auf der anderen Seite. Es ist viel schneller.

Ich glaube nicht, dass das Hinzufügen eines SSH-Tunnels zu Ihrem Setup Ihre Sicherheit erhöht, sondern sogar drastisch verringert.

Wenn Sie Ihre Webanwendung direkt mit der Datenbank verbinden, verfügt jeder potenzielle Angreifer nur über die Anmeldeinformationen, die Ihre Anwendung verwendet. Wenn Sie einen Tunnel erstellen, kann der Angreifer den Tunnel möglicherweise ausnutzen, um Zugriff auf den Datenbankhost zu erhalten und alle Daten auf diesem Server zu gefährden.

In Ihrem Setup müssen Sie den Tunnel manuell starten und werden ihn wahrscheinlich automatisieren und die Anmeldeinformationen irgendwie speichern. Ein Angreifer kann die Anmeldeinformationen finden und verwenden, um Zugriff auf den Datenbankserver zu erhalten.

Wenn sich Ihr Datenbankserver und Ihr Anwendungsserver im selben Subnetz befinden, ist der Sicherheitsgewinn bei der Verwendung verschlüsselter SSH-Tunnel für den Zugriff auf die Daten vernachlässigbar. Es würde Sie nur vor einem Angreifer schützen, der sich bereits im Netzwerk befindet. In diesem Fall ist es nur eine Frage der Zeit, bis er Zugang zu allem hat.

ThoriumBR
quelle
4
Entschuldigung, aber sagen Sie, dass die SSH-Verschlüsselung nutzlos ist? Ich kann nicht wirklich sehen, wie ein Angreifer einen SSH-Tunnel ausnutzen könnte (außer durch Brute-Force-Suche, was mehr als unwahrscheinlich ist). Wie erklären Sie sich, dass das Entfernen der -NOption meinen Leistungsverlust verhindert?
Nicolas BADIA
Entschuldigung, diese Antwort macht nicht viel Sinn. Die Frage betrifft die sichere Verbindung zwischen App Server und DB. Es gibt viele Fälle, in denen ein App-Server möglicherweise eine Verbindung zu einer Datenbank außerhalb seines eigenen Subnetzes herstellen muss. Wenn Sie sagen, dass SSH-Tunnel leicht ausgenutzt werden können als nicht getunnelte Verbindungen, geben Sie bitte auch einige Hinweise an.
Rineez
Wie gesagt you will end up probably automating it, and store the credentials: Sie erstellen ein Skript, um den Tunnel zu starten und die Anmeldeinformationen zu speichern. Später nutzt ein Angreifer die Web-App aus und erhält eine Shell, findet das Skript und die SSH-Anmeldeinformationen (oder stiehlt die privaten SSH-Schlüssel). Wir wissen, was als nächstes passiert.
ThoriumBR