One place for hosting & domains

      Remotezugriffs

      Konfigurieren des Remotezugriffs für MongoDB unter Ubuntu 20.04


      Eine frühere Version dieses Tutorials wurde von Melissa Anderson verfasst.

      Einführung

      MongoDB, auch als Mongo bekannt, ist eine Open-Source-Dokumentendatenbank, die für gewöhnlich in modernen Webanwendungen verwendet wird. Standardmäßig erlaubt sie nur Verbindungen, die von demselben Server stammen, auf dem sie installiert ist. Wenn Sie MongoDB aus der Ferne verwalten oder die Datenbank mit einem separaten Anwendungsserver verbinden möchten, müssen Sie einige Änderungen an der Standardkonfiguration vornehmen.

      In diesem Tutorial konfigurieren Sie eine MongoDB-Installation so, dass der Zugriff von einem vertrauenswürdigen Remotecomputer aus sicher möglich ist. Dazu aktualisieren Sie Ihre Firewall-Regeln, um dem Remotecomputer Zugriff auf den Port zu gewähren, auf dem MongoDB auf Verbindungen lauscht, und aktualisieren dann ihre Konfigurationsdatei, um ihre IP-Bindungseinstellung zu ändern. Als letzten Schritt testen Sie dann, dass Ihr Remotecomputer die Verbindung zu Ihrer Datenbank erfolgreich herstellen kann.

      Voraussetzungen

      Um dieses Tutorial zu absolvieren, benötigen Sie:

      • Einen Server, auf dem Ubuntu 20.04 ausgeführt wird. Dieser Server sollte über einen administrativen non-root user und eine mit UFW konfigurierte Firewall verfügen. Sie können dies einrichten, indem Sie unserem Leitfaden zur Ersteinrichtung des Servers mit Ubuntu 20.04 folgen.
      • MongoDB, das auf Ihrem Server installiert ist. Dieses Tutorial geht davon aus, dass Sie MongoDB 4.4 oder eine neuere Version installiert haben. Sie können diese Version installieren, indem Sie unserem Leitfaden zum Installieren von MongoDB unter Ubuntu 20.04 folgen.
      • Einen zweiten Computer, von dem Sie auf Ihre MongoDB-Instanz zugreifen. Aus Gründen der Einfachheit geht dieses Tutorial davon aus, dass es sich bei diesem Computer um einen weiteren Ubuntu 20.04-Server handelt, der mit einem administrativen non-root user und einer UFW-Firewall gemäß unserem Leitfaden zur Ersteinrichtung des Servers mit Ubuntu 20.04 konfiguriert ist. Schritt 1 und 2, die das eigentliche Verfahren zur Aktivierung des Remote-Zugriffs auf den Datenbankserver beschreiben, funktionieren jedoch unabhängig davon, unter welchem Betriebssystem der Remotecomputer ausgeführt wird.

      Auch wenn es zum Abschließen dieses Tutorials nicht erforderlich ist, empfehlen wir außerdem dringend, dass Sie Ihre MongoDB-Installation sichern, indem Sie ein administratives Benutzerkonto für die Datenbank erstellen und die Authentifizierung aktivieren. Folgen Sie dazu unserem Leitfaden Sichern von MongoDB unter Ubuntu 20.04.

      Schritt 1 — Anpassen der Firewall

      Unter der Annahme, dass Sie dem Leitfaden zur Ersteinrichtung des Servers aus den Voraussetzungen gefolgt sind und eine UFW-Firewall auf Ihrem Server aktiviert haben, ist Ihre MongoDB-Installation vom Internet nicht zugänglich. Wenn Sie MongoDB nur lokal mit Anwendungen verwenden möchten, die auf dem gleichen Server ausgeführt werden, ist dies die empfohlene und sichere Einstellung. Wenn Sie jedoch eine Verbindung mit Ihrem MongoDB-Server von einem entfernten Ort herstellen möchten, müssen Sie eingehende Verbindungen zu dem Port zulassen, auf dem die Datenbank lauscht, indem Sie eine neue UFW-Regel hinzufügen.

      Überprüfen Sie zunächst mit dem Befehl lsof, auf welchem Port Ihre MongoDB-Installation lauscht. Dieser Befehl gibt normalerweise eine Liste mit jeder offenen Datei in einem System aus. Wenn er jedoch mit der Option -i kombiniert wird, listet er nur netzwerkbezogene Dateien oder Datenströme auf.

      Der folgende Befehl leitet die von lsof -i erstellte Ausgabe an einen grep-Befehl weiter, der nach einer Zeichenfolge namens mongo sucht:

      • sudo lsof -i | grep mongo

      Diese Beispielausgabe zeigt, dass MongoDB den Verbindungen auf ihrem Standard-Port 27017 lauscht:

      Output

      mongod 82221 mongodb 11u IPv4 913411 0t0 TCP localhost:27017 (LISTEN)

      In den meisten Fällen sollte nur von bestimmten vertrauenswürdigen Orten auf MongoDB zugegriffen werden, wie z. B. von einem anderen Server, der eine Anwendung hostet. Um dies zu konfigurieren, besteht unter anderem die Möglichkeit, den folgenden Befehl auf Ihrem MongoDB-Server auszuführen. Dieser erlaubt den Zugriff auf den Standardport von MongoDB, lässt dabei jedoch nur die IP-Adresse des anderen vertrauenswürdigen Servers zu.

      Führen Sie den folgenden Befehl aus und ersetzen Sie hierbei trusted_server_ip mit der IP-Adresse des vertrauenswürdigen Remotecomputers, den Sie für den Zugriff auf Ihre MongoDB-Instanz nutzen möchten:

      Anmerkung: Wenn die Ausgabe des vorherigen Befehls gezeigt hat, dass Ihre Installation von MongoDB auf einem nicht standardmäßigen Port lauscht, verwenden Sie in diesem Befehl diese Portnummer anstelle von 27017.

      • sudo ufw allow from trusted_server_ip to any port 27017

      Wenn Sie in Zukunft von einem anderen Computer auf MongoDB zugreifen möchten, führen Sie diesen Befehl erneut mit der IP-Adresse des neuen Computers anstelle von trusted_server_ip aus.

      Sie können die Änderung der Firewall-Einstellungen mit ufw überprüfen:

      Die Ausgabe zeigt an, dass der Datenverkehr zum Port 27017 vom Remoteserver nun zugelassen wird:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 27017 ALLOW trusted_server_ip OpenSSH (v6) ALLOW Anywhere (v6)

      Weitere erweiterte Firewall-Einstellungen zum Einschränken des Zugriffs auf Dienste finden Sie in UFW-Grundlagen: gebräuchliche Firewall-Regeln und -Befehle.

      Als Nächstes binden Sie MongoDB an die öffentliche IP-Adresse des Servers, damit Sie von Ihrem Remotecomputer darauf zugreifen können.

      Schritt 2 — Konfigurieren einer öffentlichen bindIP

      Obwohl der Port geöffnet ist, ist MongoDB derzeit an 127.0.0.1 gebunden, die lokale Loopback-Netzwerkschnittstelle. Das bedeutet, dass MongoDB nur Verbindungen akzeptieren kann, die von dem Server stammen, auf dem die Datenbank installiert ist.

      Um Remoteverbindungen zu ermöglichen, müssen Sie die Konfigurationsdatei von MongoDB — /etc/mongod.conf — bearbeiten, um MongoDB zusätzlich an die öffentlich routbare IP-Adresse Ihres Servers zu binden. Auf diese Weise kann Ihre MongoDB-Installation auf Verbindungen zu Ihrem MongoDB-Server von Remotecomputern lauschen.

      Öffnen Sie die MongoDB-Konfigurationsdatei in Ihrem bevorzugten Editor. Das folgende Beispiel verwendet nano:

      • sudo nano /etc/mongod.conf

      Finden Sie den Abschnitt network interfaces und dann den bindIp-Wert:

      /etc/mongod.conf

      . . .
      # network interfaces
      net:
        port: 27017
        bindIp: 127.0.0.1
      
      . . .
      

      Hängen Sie dieser Zeile ein Komma an, gefolgt von der öffentlichen IP-Adresse Ihres MongoDB-Servers:

      /etc/mongod.conf

      . . .
      # network interfaces
      net:
        port: 27017
        bindIp: 127.0.0.1,mongodb_server_ip
      
      . . .
      

      Speichern und schließen Sie die Datei. Wenn Sie nano verwendet haben, drücken Sie STRG+X, Y, dann die EINGABETASTE.

      Starten Sie dann MongoDB neu, um diese Änderung umzusetzen:

      • sudo systemctl restart mongod

      Danach kann Ihre MongoDB-Installation Remoteverbindungen von allen Computern akzeptieren, denen Sie Zugriff auf Port 27017 gewährt haben. Als abschließenden Schritt können Sie testen, ob der vertrauenswürdige Remoteserver, den Sie in Schritt 1 über die Firewall erlauben, die MongoDB-Instanz auf Ihrem Server erreichen kann.

      Schritt 3 — Testen der Remotekonnektivität

      Nachdem Sie Ihre MongoDB-Installation so konfiguriert haben, dass sie auf Verbindungen lauscht, die von ihrer öffentlich routbaren IP-Adresse stammen, und Ihrem Remotecomputer Zugriff über die Firewall Ihres Servers auf den Standardport von Mongo gewährt haben, können Sie testen, ob der Remotecomputer in der Lage ist, sich zu verbinden.

      Anmerkung: Wie im Abschnitt Voraussetzungen erwähnt, geht dieses Tutorial davon aus, dass Ihr Remotecomputer ein anderer Server ist, auf dem Ubuntu 20.04 ausgeführt wird. Das in den Schritten 1 und 2 beschriebene Verfahren zur Aktivierung von Remoteverbindungen sollte unabhängig davon funktionieren, welches Betriebssystem auf Ihrem Remotecomputer ausgeführt wird. Die in diesem Schritt beschriebenen Testmethoden funktionieren jedoch nicht universell bei allen Betriebssystemen.

      Eine Möglichkeit, zu testen, dass Ihr vertrauenswürdiger Remoteserver eine Verbindung mit der MongoDB-Instanz herstellen kann, besteht in der Verwendung des nc-Befehls. nc, kurz für netcat, ist ein Dienstprogramm, das zum Erstellen von Netzwerkverbindungen mit TCP oder UDP verwendet wird. Er ist für Tests in Fällen wie diesen nützlich, da Sie sowohl eine IP-Adresse als auch eine Portnummer angeben können.

      Melden Sie sich zunächst mit SSH bei Ihrem vertrauenswürdigen Server an:

      • ssh sammy@trusted_server_ip

      Führen Sie dann den folgenden nc-Befehl aus, der die Option -z enthält. Dadurch wird nc darauf beschränkt, nur nach einem lauschenden Daemon auf dem Zielserver zu suchen, ohne diesem Daten zu senden. Erinnern Sie sich aus der Installationsanleitung in den Voraussetzungen, dass MongoDB als Dienst-Daemon ausgeführt wird. Daher ist diese Option nützlich zum Testen der Konnektivität. Außerdem enthält er die Option v, der die Ausführlichkeit des Befehls erhöht und bewirkt, dass netcat eine Ausgabe ausgibt, was sonst nicht geschehen würde.

      Führen Sie den folgenden nc-Befehl von Ihrem vertrauenswürdigen Remoteserver aus und stellen Sie sicher, mongodb_server_ip durch die IP-Adresse des Servers, auf dem Sie MongoDB installiert haben, zu ersetzen:

      • nc -zv mongodb_server_ip 27017

      Wenn der vertrauenswürdige Server auf den MongoDB-Daemon zugreifen kann, wird seine Ausgabe angeben, dass die Verbindung erfolgreich war:

      Output

      Connection to mongodb_server_ip 27017 port [tcp/*] succeeded!

      Wenn Sie eine kompatible Version der mongo-Shell auf Ihrem Remoteserver installiert haben, können Sie sich nun direkt mit der auf dem Hostserver installierten MongoDB-Instanz verbinden.

      Eine Möglichkeit zur Verbindung bietet eine URI-Verbindungszeichenfolge wie diese:

      • mongo "mongodb://mongo_server_ip:27017"

      Anmerkung: Wenn Sie dem empfohlenen Leitfaden Sichern von MongoDB unter Ubuntu 20.04 gefolgt sind, haben Sie den Zugriff auf Ihre Datenbank für nicht authentifizierte Benutzer geschlossen. In diesem Fall müssen Sie eine URI verwenden, die so wie die folgende einen gültigen Benutzernamen angibt:

      • mongo "mongodb://username@mongo_server_ip:27017"

      Die Shell wird Sie automatisch dazu auffordern, das Passwort des Benutzers einzugeben.

      Damit haben Sie bestätigt, dass Ihr MongoDB-Server Verbindungen vom vertrauenswürdigen Server akzeptieren kann.

      Zusammenfassung

      Sie können nun von einem Remoteserver auf Ihre MongoDB-Installation zugreifen. Jetzt können Sie Ihre Mongo-Datenbank von dem vertrauenswürdigen Server aus der Ferne verwalten. Alternativ können Sie eine Anwendung so konfigurieren, dass sie auf dem vertrauenswürdigen Server ausgeführt wird und die Datenbank aus der Ferne verwendet.

      Wenn Sie keinen administrativen Benutzer konfiguriert und die Authentifizierung nicht aktiviert haben, kann jeder, der Zugriff auf Ihren Remoteserver hat, auch auf Ihre MongoDB-Installation zugreifen. Sollten Sie es bisher nicht getan haben, empfehlen wir Ihnen dringend, unserem Leitfaden Sichern von MongoDB unter Ubuntu 20.04 zu folgen, und für eine erhöhte Absicherung einen administrativen Benutzer hinzuzufügen.



      Source link