it-swarm.com.de

Sichern des MySQL-Servers vor einer Remoteverbindung

Ich muss den Port für meinen MySQL-Server nach außen öffnen und nach dem, was ich gelesen habe, ist die Standardkonfiguration weder sicher noch verschlüsselt.

Dafür habe ich ein paar Lösungen im Sinn, aber ich würde aus Sicherheitsgründen gerne wissen, ob mir etwas fehlt.

Die ursprüngliche Idee war zunächst, ein SSH-Tunelling einzurichten, aber ich befürchte, dass die Verbindung von Zeit zu Zeit unterbrochen werden könnte (selbst wenn ich ein "Autossh" -System einrichte, um die Verbindung automatisch wiederherzustellen, wenn die Verbindung beendet wird). Mein Hauptanliegen ist, dass ich Angst habe, eine Anfrage zu verlieren (zwischen dem Moment, in dem das SSH-Tunelling aufhört, und dem Zeitpunkt, an dem Autossh eine neue Verbindung aufnimmt).

Also habe ich darüber nachgedacht, MySQL nach außen zu öffnen. Ich bin mir bewusst, dass dies nicht die beste Option ist, ohne daran zu arbeiten, sie zu sichern. Wenn ich diese Schritte hinzufüge, wäre es dann besser?

  1. Ändern Sie den Port nach außen. Dies wird niemanden daran hindern, den richtigen Port zu finden, aber es werden zumindest die Bots gestoppt, die direkt auf 3306 abzielen
  2. Mysql SSL einrichten. Dadurch wird die eindeutige Datenübertragung zwischen Client und Server gestoppt und MitM-Angriffe vermieden.
  3. Nur von bestimmten IPs zulassen. Dadurch wird sichergestellt, dass nur die gewünschten IPs eine Verbindung herstellen können. Dies würde von IPtables verwaltet
  4. root wird nur von localhost verfügbar sein. Alle anderen Benutzer haben eingeschränkten Zugriff (auf ihre Datenbank).

Glauben Sie angesichts dieser Konfiguration, dass MySQL immer noch anfällig ist?

Meine einzige Idee ist, ob jemand auf meinen Webserver zugreifen würde und das Login/Passwort kennt, aber ich glaube, dass die Sicherheit unbrauchbar wird, sobald jemand das Login/Passwort hat (weil bereits verletzt wurde, um die Anmeldeinformationen zu erhalten).

13
Cyril N.

Die spezifischen Probleme hängen in gewissem Maße von den genauen Gründen ab, aus denen Sie den Server auf diese Weise öffnen. Ich bin mir jedoch nicht sicher, was der Unterschied zwischen einem direkten Ausfall einer MySQL-Verbindung (was ohnehin passieren könnte) und einem Ausfall einer SSL-Tunnelverbindung in Bezug auf das Ausmaß der Besorgnis ist.

  1. Das Ändern des Ports ist im Wesentlichen Sicherheit durch Dunkelheit. Es könnte die Anzahl der Angriffe geringfügig verringern, aber ich habe noch nie ein besonders hohes Verkehrsaufkommen gegen Datenbankports gesehen, verglichen mit dem, was beispielsweise bei SSH-Ports üblich ist. Dies schadet nicht, solange dies nicht die einzigen Sicherheitsvorkehrungen sind. Erwarten Sie jedoch nicht, dass jemand auf Ihren Server abzielt.
  2. SSL-Verbindungen für MySQL sind sinnvoll. Stellen Sie sicher, dass Ihre Clients über das zu erwartende spezifische Zertifikat informiert sind. Andernfalls kann ein MitM-Angriff durch Abfangen und erneute Verschlüsselung erfolgen (Client-> Angreifer wird mit dem Angreiferzertifikat verschlüsselt, der Angreifer entschlüsselt und sendet ihn über den Server an den Server cert, Server antwortet dem Angreifer, der die Daten neu verschlüsselt, um sie an den Client zurückzugeben.
  3. IP-Einschränkungen sind gut. Hier können Sie die Tiefenverteidigung anwenden - IPTables, um Verbindungen zum Server zu ermöglichen, und bestimmte Benutzer in MySQL dürfen nur von bestimmten Quell-IPs zugelassen werden. Beachten Sie alle Benutzer, die aus dynamischen oder gemeinsam genutzten IP-Bereichen stammen. Dies gilt hauptsächlich für Benutzer, die in einigen Ländern Zugriff von Mobilgeräten benötigen, kann aber auch aus Unternehmens-NATs resultieren.
  4. Das ist auch gut. Stellen Sie sicher, dass root immer noch ein sicheres Kennwort hat und nicht als einzige Sicherheitsmaßnahme auf den Zugriff von localhost angewiesen ist. Insbesondere ist es eine schlechte Idee, den Zugriff auf bestimmte Hosts wahllos zuzulassen, auch wenn dies localhost ist, da dies die Sicherheitsstufe schwächt zu dem des Benutzers mit den niedrigsten Berechtigungen mit Zugriff auf diesen Host.

Jedoch:

  • Speichern Ihre Kunden Zugriffskennwörter unverschlüsselt? (z. B. verwenden sie Software, um auf das System zuzugreifen, die den Zugriff auf die Kennwörter nicht einschränkt, wenn sie auf "Kennwort speichern" klicken?) Dies kann durch Richtlinien (z. B. "Klicken Sie nicht auf Kennwort speichern") oder durch Technologie behoben werden (Erzwingen eines bestimmten Clients, der diese Funktion nicht hat oder die Funktion sicher implementiert)
  • Sind die gespeicherten Daten empfindlich genug, um eine Verschlüsselung im Ruhezustand zu gewährleisten?
  • Speichern Sie Protokolle für das System und überwachen Sie diese regelmäßig?
  • Hat der Webserver Zugriff auf Daten, die er nicht speziell benötigt? (Wenn beispielsweise die MySQL-Benutzertabelle nicht gelesen werden muss, wurde dies verhindert?)

Im Wesentlichen kann jede Antwort, ohne die spezifischen Details Ihres Setups zu kennen, nur Vorschläge dazu enthalten, was normalerweise als "sicher genug" angesehen wird. Für eine Bank oder für Krankenakten würde ich vorschlagen, dass Ihr Setup nicht sicher genug ist und dass Sie sich an einen Spezialisten wenden sollten, um die vollständige Sicherung zu gewährleisten. Für eine Broschüren-Website ohne Transaktionsdaten und ohne Kundendaten ist dies wahrscheinlich in Ordnung. Für alles zwischen ihnen variiert es.

11
Matthew

Eine Sache, an die ich denken kann: Das Einrichten von SSL kann nicht erzwingen alle Verbindungen SSL sein. Stellen Sie sicher, dass Sie dies überprüfen.

Abgesehen von den oben genannten Bedenken denke ich, dass es nur anfällig wäre, wenn es einen Fehler in MySQL selbst gäbe. Wenn Sie dies abmildern möchten, verwenden Sie ein VPN (was dem SSH-Tunneling nicht unähnlich ist, da es einen zusätzlichen potenziellen Fehler darstellt) und weisen Sie MySQL an, nur an die vitruale Netzwerkschnittstelle des VPN zu binden (z. B. tun0).

4
P.Péter