Eine PostgreSQL-Datenbank im Internet verfügbar machen

7

Ich habe auf DBA und anderen Websites gesehen, dass das Aussetzen einer Datenbank gegenüber dem Internet eine besonders schlechte Idee ist, aber ich habe festgestellt, dass PostgreSQL nur über SSL-Zertifikate verfügt. Ist es dadurch sicherer, eine Datenbank dem Internet zugänglich zu machen (nur Zertifikatsauthentifizierung von nicht lokalen Host-Verbindungen), oder wäre es immer noch besser, ein VPN einzurichten oder über SSH usw. zu tunneln?

Wenn letzteres sicherer ist, was genau macht es sicherer? Ich habe das Gefühl, in dieser Hinsicht etwas offensichtlich Offensichtliches zu übersehen.

Ich habe bereits eine Handvoll Datenbanken eingerichtet, musste jedoch nie eine einrichten, für die eine Remoteverwaltung erforderlich ist (in diesem Fall „remote“ bedeutet dies über das Internet oder WAN anstelle eines LAN).

Dreamlax
quelle

Antworten:

9

Es geht nicht wirklich darum, dass es im Allgemeinen eine schlechte Idee ist, sondern vielmehr, dass es nur sehr wenige Fälle gibt, in denen Sie Ihre Datenbank wirklich einer öffentlichen Schnittstelle aussetzen müssen .

Bei viel Sicherheit geht es darum, die Anzahl der exponierten Angriffsflächen zu verringern. Wenn Ihre Anwendung absolut nicht haben Ihre Datenbank der Öffentlichkeit aussetzen , dann können Sie es verstecken sich hinter einer Firewall und haben ein anderes Maß an Schutz vor möglichen Exploit, der in der Zukunft erscheinen.

Ich würde "Remoteverwaltung" nicht als Grund genug betrachten, Postgres zu entlarven. Wie du sagst; Sie benötigen bereits SSH-Zugriff auf Ihre Box, damit Sie Postgres problemlos hinter einer Firewall aufbewahren und über diese problemlos darauf zugreifen können.

RE: SSL-Verbindungen. Dies wäre ein Muss, es sei denn, Sie wären zufrieden damit, dass Dritte Ihre Daten nur lesen, während Sie sie über das Kabel senden. Die Überlegungen hier sind die gleichen wie bei jedem Verkehr über das öffentliche Internet.

Chris Farmiloe
quelle
Das macht Sinn. Wenn ich zum Beispiel bereits ein Front-End entwickelt hätte, um direkte Verbindungen zur Datenbank herzustellen, wäre es immer noch besser, diese über eine VPN- oder SSH-Verbindung zu tunneln?
Dreamlax
1
@dreamlax Nein, solange Sie PostgreSQL auf dem neuesten Stand halten (wie bei jedem anderen Dienst), ist es ziemlich sicher, SSL direkt zu verwenden, insbesondere wenn Sie auch ein gültiges Client-Zertifikat benötigen, den Benutzer auf minimale Zugriffsrechte usw. beschränken gepatcht ist wichtig: Sicherheitslücken in Pg sind selten, aber es gab kürzlich eine böse: postgresql.org/support/security/faq/2013-04-04
Craig Ringer
Ich markiere dies als Antwort, weil Sie erklärt haben, wie Sie "Angriffsflächen" minimieren können, aber ich verstehe immer noch nicht, welche Vorteile es hat, die Sicherheit an einen anderen Ort zu verlagern. Ich bin geneigt, dem Rat von @ CraigRinger zu folgen.
Dreamlax
Nur als Hinweis: Heroku-DBs werden über das öffentliche Netzwerk verfügbar gemacht.
Ron E
1

Das einzige Szenario, das ich mir vorstellen kann, in dem es erforderlich sein könnte, Ihre Datenbank dem Internet auszusetzen, ist für Replikations- oder Clusterzwecke. In diesem Fall sollten Sie den Zugriff nur auf die zusätzlichen Hosts über die Firewall beschränken.

Für andere Zwecke würde ich empfehlen, Webdienste zu erstellen, die als Gateways für den Zugriff auf die Datenbank dienen. Diese Dienste bieten genau die Funktionen, die Sie benötigen, und Sie sind für deren Sicherheit und Integrität verantwortlich.

Tatsächlich macht jedes Web-Front-End, das eine Verbindung zu einer Datenbank herstellt, diese Art von Dingen, indem die Skripte auf dem Webserver als RESTful-Webdienste verwendet werden.

jap1968
quelle
2
Wie ist der Webdienst von Natur aus sicherer? Warum ist die Verlagerung der Sicherheit auf einen Webserver sicherer als das Verlassen der Datenbank, insbesondere wenn die Datenbank nur Verbindungen von Personen mit gültigen Zertifikaten akzeptiert? Das Problem ist, wenn ich die Datenbank über einen Webdienst verfügbar machen muss, muss viel Code im vorhandenen Front-End (das nicht webbasiert ist) geändert werden. Wenn dies der einzige Weg ist, muss ich es nur tun, aber ich muss wissen, welche Risiken mit der Offenlegung einer Datenbank verbunden sind, wenn sie nur für die Annahme von SSL-zertifizierten Verbindungen konfiguriert ist.
Dreamlax
2
Wenn IMO dies tut, tauscht es nur ein Sicherheitsrisiko gegen ein anderes aus. Es bringt Ihnen nichts über eine ordnungsgemäß gesperrte Seite, die über SSL mit einem Remotebenutzer spricht, dessen Konto so konfiguriert wurde, dass es über die erforderlichen Mindestzugriffsrechte verfügt, um das zu tun, was sie benötigen.
Craig Ringer
Sie können Ihre Webdienste sicher machen und nur Kunden mit gültigen Zertifikaten zur Verfügung stellen. Der Vorteil ist, dass der Webdienst nicht den gesamten Funktionsumfang der Datenbank bietet. Ihr Webdienst sollte nur die vom Kunden erforderlichen Aktionen anbieten. Ein anderer Vorgang sollte über den Webdienst nicht möglich sein.
jap1968
Das hört sich immer noch nicht so an, als ob der Webdienst einen großen Vorteil gegenüber einem Datenbankbenutzer bietet, der nur einen kleinen Satz von Funktionen aufrufen darf (dh dieselben "Aktionen", die der Webdienst bietet). Darüber hinaus erfordern Änderungen an der Datenbank auch Änderungen am Webdienst sowie am Front-End.
Dreamlax
Möglicherweise ist die Schlüsselfrage die Art des Frontends. Ich gehe eher von einem webbasierten Front-End aus: Es kann nicht als nativer Datenbankclient kommunizieren, dh es benötigt eine Art zusätzlichen Webdienst, um auf die Datenbank zuzugreifen.
jap1968