Mongo DB Express auf Port :8081 zum Laufen kriegen. Was mach ich falsch?

2 Antworten

und hab es nach sehr langem Herumprobieren sogar geschafft mit einem kleinen .sh Script den Port :8081 zu öffnen, sodass dieser zumindest in den IP-Tables angezeigt wird.

Rumprobieren ist einfach kein geeignetes Vorgehen. Die Aussage bezüglich des Öffnen des Ports ist nicht hinreichend eindeutig - es wäre gut, wenn Du das etwas detailierter ausführst, denn es kann keiner hellsehen.

, teils erst nach dem Setzen einiger Umgebungsvariablen setzen

auch das hier spricht nicht gerade dafür, daß die Dinge richtig angegangen wurden, ansich sollte das mittelbar durchs Initsystem erfolgen.

Wenn man ein solches Problem hat, dann sollte man es schrittweise analysieren, dazu gehören dann ggf. auch Logs.

  • Laufen MongoBD und mongo-express
  • Lauschen sie an den richtigen Sockets
  • Funktioniert ein lokaler Aufruf

Wenn lokale alles klappt und man andere Verbindungen zum Server hat, die funktionieren, dann kann man relattiv sicher sein, daß man sich die FW-Konfiguration nochmal anschauen sollte.

Rexxxxx 
Fragesteller
 12.04.2024, 20:39

Also zu dem .sh Script: Ich hab auf dem Server im Ordner /etc/network/if-up.d eine kleine ausführbare Shelldatei erstellt die folgenden Inhalt hat:

#!/bin/bash

iptables -A INPUT -p tcp --dport 8081 -j ACCEPT

Der Port ist danach in dem IP-Table gelistet worden und wartet scheinbar auf eingehende Verbindungen. Stimmt das so oder hab ich jetzt kompletten Murks gebaut?

MongoDB und mongo-express laufen bzw. werden zumindest als aktive Prozesse gefunden.

0
KarlRanseierIII  12.04.2024, 21:11
@Rexxxxx

Default Policy ist DROP?

Im Prinzip passt das, Du solltest sicherheitshalber schauen, ob davor eien andere Rule ggf. verhindert, daß diese greift:

iptables -L INPUT.

----

Ich nutze kein Debian, hab das mal kurz getestet:

 ~ # systemctl start mongodb
 ~ # systemctl status mongodb
● mongodb.service - High-performance, schema-free document-oriented database
     Loaded: loaded (/usr/lib/systemd/system/mongodb.service; disabled; preset: disabled)
     Active: active (running) since Fri 2024-04-12 20:56:08 CEST; 20s ago
   Main PID: 1558138 (mongod)
        CPU: 2.251s
     CGroup: /system.slice/mongodb.service
             └─1558138 /usr/bin/mongod --quiet --config /etc/mongodb.conf

Apr 12 20:56:08 stratus systemd[1]: Started High-performance, schema-free document-oriented database.

mongodb läuft soweit, schauen wir mal mit netstat nach:

~ # netstat -lop|grep mongo
tcp        0      0 localhost:27017         0.0.0.0:*               LISTEN      1558138/mongod       off (0.00/0/0)
unix  2      [ ACC ]     STREAM     LISTENING     6792448  1558138/mongod       /tmp/mongodb-27017.sock

Lauscht auf TCP Port 27017 und auf unix domain socket, soweit so gut.

Installation von mongo-express habe ich mit npm gemacht, das ist insofern krüppelig, da er am eigentlichen PM der Distri vorbeitpfuscht und auch die Eigenheiten der Platform nicht korrekt honoriert - aber das ist ein anderes Thema und soll hier nicht stören.

npm install -g mongo-express

Und danach starten mit:

# mongo-express
No custom config.js found, loading config.default.js
Welcome to mongo-express
------------------------


Mongo Express server listening at http://localhost:8081
basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!

Wie man sieht, ich war sogar zu faul ne Konfiguration festzulegen. Schauen wir mit netstat:

~ # netstat -lnop |grep node
tcp6       0      0 ::1:8081                :::*                    LISTEN      1558188/node         off (0.00/0/0)

Du siehst, standardmässig ist hier NUR an die IPv6 des Loopback gebunden.

Wie dem auch sei, öffne ich nen Webbrowser und rufe localhost:8081 auf, erreiche ich die Landign Page von mongo-express.

Ich habe mir jetzt nich die Mühe gemacht mongo-express ordentlich als Service einzurichten.

Auf dem Server lokal kannst du für nen Test auch sowas wie lynx oder links nutzen, es geht ja nur darum zu sehen OB mongo-express erstmal grundlegend läuft.

Und dann schau insbesondere mit netstat nach wo Dein mongo-express wirklich lauscht.

0
Rexxxxx 
Fragesteller
 13.04.2024, 05:09
@KarlRanseierIII

Default Policy ist ACCEPT. Ich konnte es jetzt durch einen entsprechenden Eintrag in den Apache Konfigurationsdateien (ports.conf, apache.conf und 000-default.conf so lösen, dass sich der Browser immerhin mit dem Port (8081) verbinden kann und es keinen Netzwerkfehler mehr gibt. Dafür gibt es jetzt einen 403 Forbidden Error und ein versuchter Neustart von MongoDB Express spuckt die Warnung aus, dass der Port belegt ist. Das hier sind die Prozesse, die scheinbar den Port blockieren:

apache2 1241486    root   6u IPv6 1907164896     0t0 TCP *:tproxy (LISTEN)

apache2 1241487 www-data   6u IPv6 1907164896     0t0 TCP *:tproxy (LISTEN)

apache2 1241488 www-data   6u IPv6 1907164896     0t0 TCP *:tproxy (LISTEN)

apache2 1241489 www-data   6u IPv6 1907164896     0t0 TCP *:tproxy (LISTEN)

apache2 1241490 www-data   6u IPv6 1907164896     0t0 TCP *:tproxy (LISTEN)

apache2 1241491 www-data   6u IPv6 1907164896     0t0 TCP *:tproxy (LISTEN)

apache2 1241494 www-data   6u IPv6 1907164896     0t0 TCP *:tproxy (LISTEN)

Das obige Shellscript hab ich gelöscht und dafür IP-Tables installiert und dort nochmal den Port als Eintrag in die rules.v4 eingefügt. Versucht MongoDB evtl. schon per Default diesen Port zu aktivieren und das Ganze hier ist doppelt gemoppelt?

0
KarlRanseierIII  13.04.2024, 05:52
@Rexxxxx

Was hat apache bei Dir in der Gleichung denn zu suchen?

mongo-express läuft doch auf NodeJS.

0
Rexxxxx 
Fragesteller
 13.04.2024, 13:07
@KarlRanseierIII

Es geht ja um den Port. Ich hab den Eindruck, dass bei mir die Verzeichnisse die nicht von Apache gewhitelisted sind überhaupt nicht ansurfbar sind. (Hab das Ganze auch schon mit anderen Dateien & Scripten probiert)

0
KarlRanseierIII  13.04.2024, 21:42
@Rexxxxx

Apache ist ein HTTP-daemon (Webserver), NodeJS ist ein Laufzeitumgebung für Javascript und bringt einen eigenen Webserver mit.

Sofern Du nicht irgendein besonderes Konstrukt hast (das Du noch nicht genannt hast) ist apache für mongoDB und mongo-express außen vor. Natürlich darf er nicht den Port binden, den node (respektive mongo-express) nutzen will.

Um noch kurz auf etwas anderes hinzuweisen, wenn Deine Default Policy ACCEPT ist, dann brauchst Du ansich für mongo-express auch keien Rule in der table.

0
Rexxxxx 
Fragesteller
 13.04.2024, 21:44
@KarlRanseierIII

OK dann müsste evtl. der Webserver von NodeJS separat gestartet / konfiguriert werden? Hängt es evtl. damit zusammen?

0
KarlRanseierIII  13.04.2024, 22:05
@Rexxxxx

Nein, das macht mongo-express alles. Im Prinzip ist das einfach nur das instanziieren eines HTTPServer-Objektes, Handler registrieren, listen() ausführen.

0
sogar geschafft mit einem kleinen .sh Script den Port :8081 zu öffnen

Dann ist der Port belegt, und du kannst ihn mit dem Server nicht mehr nutzen.

Davon abgesehen gibt es bessere Möglichkeiten, mit einer Datenbank zu interagieren, als über ein Webinterface.

Woher ich das weiß:Studium / Ausbildung – Informatik
Rexxxxx 
Fragesteller
 12.04.2024, 20:42

Könnte der Port durch obige Shelldatei blockiert werden? (Ich hab nur befolgt was mir geraten wurde)

0
Waldelb3  12.04.2024, 20:48
@Rexxxxx

Ein Port kann immer nur von einem Programm genutzt werden. Das Shellscript ist ein Programm. Wenn es den Port nutzt, kann dein Server den Port nicht mehr nutzen.

0
Waldelb3  12.04.2024, 20:50
@Rexxxxx

Nochmal zur Klarstellung: Du kannst den Port zuerst mit dem Shellscript, und danach mit dem Server nutzen. Es ist lediglich nicht möglich, dass das Shellscript und der Server den Port gleichzeitig nutzen.

0