Wie erstelle ich einen sicheren MongoDB-Server?

7

Ich möchte, dass meine Website MongoDB als Datenspeicher verwendet. Ich habe MongoDB in meiner Entwicklungsumgebung ohne Sorgen verwendet, aber ich mache mir Sorgen um die Sicherheit mit einem öffentlichen Server.

Mein Server ist ein VPS mit Arch Linux. Die Webanwendung wird auch darauf ausgeführt, sodass nur Verbindungen von localhost akzeptiert werden müssen. Und keine anderen Benutzer (per SSH oder auf andere Weise) haben direkten Zugriff auf meinen Server.

Was soll ich tun, um meine Instanz von MongoDB zu sichern?

Earlz
quelle

Antworten:

5

Mongo unterstützt nur sehr grundlegende Sicherheit:

  • Authentifizierung konfigurieren. Benutzer mit sicherem Passwort erstellen (ein Benutzername und ein Passwort im Datenbankkontext)
  • binde MongoDB an 127.0.0.0 (die Loopback-Schnittstelle)
  • Standardport ändern
ooshro
quelle
Wenn Benutzer nicht auf meinen Server zugreifen, sollte ich dann trotzdem die Authentifizierung konfigurieren?
Earlz
Ja, da vps mit Website keine vertrauenswürdige Umgebung ist. Ausführen von Mongo ohne Authentifizierung nur für die Entwicklung.
Ooshro
ok ja, das macht Sinn, falls mein Server irgendwie kompromittiert ist, minimiere den Schaden. Ich werde diese Frage noch ein paar Stunden geben, um zu sehen, ob jemand andere interessante Beiträge hat
Earlz
Ich musste mich dem gleichen Problem stellen und es mit SSH-Tunneling lösen. Ich bin diesem Artikel gefolgt .
Jabba
13

Hier ist eine gute Checkliste

  1. Authentifizierung aktivieren - Auch wenn Sie Ihre Mongodb-Server in einem vertrauenswürdigen Netzwerk bereitgestellt haben, empfiehlt es sich, die Authentifizierung zu aktivieren. Es bietet Ihnen "Tiefenverteidigung", wenn Ihr Netzwerk gefährdet ist. Bearbeiten Sie Ihre Mongod-Konfigurationsdatei, um die Authentifizierung zu aktivieren

  2. Setzen Sie Ihre Produktionsdatenbank nicht dem Internet aus. Die Einschränkung des physischen Zugriffs auf Ihre Datenbank ist ein wichtiger Aspekt der Sicherheit. Wenn dies nicht erforderlich ist, setzen Sie Ihre Produktionsdatenbank nicht dem Internet aus. Im Falle eines Kompromisses, wenn ein Angreifer keine physische Verbindung zu Ihrem MongoDB-Server herstellen kann, sind Ihre Daten umso sicherer. Wenn Sie mit AWS arbeiten, können Sie Ihre Datenbanken in einem privaten VPC-Subnetz platzieren. Weitere Informationen finden Sie im Blogbeitrag Bereitstellen von MongoDB in einer VPC.

  3. Firewalls verwenden - Verwenden Sie Firewalls, um einzuschränken, welche anderen Entitäten eine Verbindung zu Ihrem Mongodb-Server herstellen dürfen. Es wird empfohlen, Ihren Anwendungsservern nur Zugriff auf die Datenbank zu gewähren. Wenn Sie auf AWS gehostet werden, verwenden Sie "Sicherheitsgruppen", um den Zugriff einzuschränken. Wenn Sie auf einem Anbieter gehostet werden, der keine Firewall-Konstrukte unterstützt, können Sie diese einfach mithilfe von 'iptables' selbst konfigurieren. Informationen zum Konfigurieren von iptables für Ihr Szenario finden Sie in der Mongodb-Dokumentation.

  4. Verwenden von Schlüsseldateien zum Einrichten des Replikatsatzes - Geben Sie eine gemeinsam genutzte Schlüsseldatei an, um die Kommunikation zwischen Ihren Mongodb-Instanzen in einem Replikatsatz zu ermöglichen. Um dies zu aktivieren, fügen Sie den Schlüsseldateiparameter wie folgt zur Konfigurationsdatei hinzu. Der Inhalt der Datei muss auf allen Computern gleich sein.

  5. HTTP-Statusschnittstelle deaktivieren Mongodb stellt standardmäßig eine http-Schnittstelle bereit, die standardmäßig auf Port 28017 ausgeführt wird und die Statusseite "Home" enthält. Diese Schnittstelle wird für die Verwendung in der Produktion nicht empfohlen und ist am besten deaktiviert. Verwenden Sie die Konfigurationseinstellung "nohttpinterface", um die http-Schnittstelle zu deaktivieren.

  6. Deaktivieren der REST-Schnittstelle Die monogdb-REST-Schnittstelle wird für die Produktion nicht empfohlen. Es wird keine Authentifizierung unterstützt. Es ist standardmäßig deaktiviert. Wenn Sie es mit der Konfigurationsoption "Rest" aktiviert haben, sollten Sie es für Produktionssysteme deaktivieren.

  7. Konfigurieren von Bind_ip Wenn Ihr System über mehrere Netzwerkschnittstellen verfügt, können Sie mit der Option "bind_ip" festlegen, dass Ihr Mongodb-Server nur die relevanten Schnittstellen überwacht. Standardmäßig wird mongodb an alle Schnittstellen gebunden

  8. SSL aktivieren - Wenn Sie kein SSL verwenden, werden Ihre Daten unverschlüsselt zwischen Ihrem Mongo-Client und dem Mongo-Server übertragen und sind anfällig für Abhör-, Manipulations- und "Man in the Middle" -Angriffe. Dies ist besonders wichtig, wenn Sie über unsichere Netzwerke wie das Internet eine Verbindung zu Ihrem Mongodb-Server herstellen.

  9. Rollenbasierte Autorisierung - MongoDB unterstützt die rollenbasierte Authentifizierung, um Ihnen eine genaue Kontrolle über die Aktionen zu geben, die von jedem Benutzer ausgeführt werden können. Verwenden Sie rollenbasierte Konstrukte, um den Zugriff einzuschränken, anstatt alle Benutzer zu Administratoren zu machen. Weitere Informationen finden Sie in der Rollendokumentation.

  10. Enterprise Mongodb & Kerberos Enterprise Mongodb wird zur Authentifizierung in Kerberos integriert. Weitere Informationen finden Sie in der Mongodb-Dokumentation. Benutzername / Passwort-Systeme sind von Natur aus unsicher - verwenden Sie nach Möglichkeit eine auf dem Bordstein basierende Authentifizierung.

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

Haftungsausschluss: Ich bin der Gründer von scalegrid.io

Dharshan
quelle
2

Dieselbe Abfrage wurde hier ausführlich besprochen ~ /security/7610/how-to-secure-a-mongodb-instance/7655#7655

Einige sehr erste Dinge, an die man sich erinnern sollte, sind:

Remove IP Binding from all to just the IP (private or localhost), you expect to get Connection Request
Change the default Port Bindings
Give only required permissions (like no update/delete permissions to select query users)
Setup ssh keys for required master-slave connection, removing involvement of passwords
You can even setup an encrypted tunnel for connection between your application and mongodb

Tatsächlich gelten sie für alle DataStorage-Dienste

PS: sehr begrenzte Mongodb-Erfahrung

AbhishekKr
quelle
0

Aus Sicherheitsgründen ist es besser, einen externen Zugriff auf den MongoDB-Knoten zu verhindern. Sie können die App und MongoDB auf verschiedenen Knoten ausführen. Auf den App-Knoten kann von außen zugegriffen werden, während der MongoDB-Knoten nur den MongoDB-Port für den App-Knoten öffnet.

Befolgen Sie auch die offizielle Sicherheitscheckliste von MongoDB, um MongoDB zu schützen.

FireCamp automatisiert es für Sie in der Cloud, z. B. AWS. FireCamp erzwingt die Sicherheit. 1) Die AppAccessSecurityGroup ist die einzige, die auf MongoDB zugreifen darf. Bitte erstellen Sie Ihren Anwendungsknoten in der AppAccessSecurityGroup und die VPC, auf der der MongoDB-Knoten ausgeführt wird. 2) Ein Bastion-Knoten wird erstellt und ist der einzige, der SSH an die MongoDB-Knoten senden kann. 3) Die MongoDB-Benutzerauthentifizierung und die Zugriffssteuerung zwischen Mitgliedern eines ReplicaSet sind aktiviert.

CloudStax
quelle