Mrbs in der DMZ

Hallo zusammen,
im Hinblick auf den Wegfall der Belwue-Services bin ich gerade dabei, den externen Dockerhost in die DMZ hinter der Firewall umzuziehen. Dadurch komme ich mit nur einer IP aus…

Der Umzug an sich läuft ganz gut. Die Oberflächen sind alle erreichbar.

Die Nextcloud läuft super. Die Benutzerkönnen sich anmelden und auf ihre Daten zugreifen.
Der ldaps-Zugriff funktioniert also.
Aber jetzt kommts: mrbs und das OpenSchulPortfolio können sich nicht anmelden. Von außen gehts da ist das ldap über ldaps://meineURL:636 erreichbar.
Von innne, also aus der DMZ sollte es doch über ldaps://10.16.1.1:636 erreichbar sein. Ist es auch nur leider heißt es immer „Unbekannter Benutzer“

Gibt es jemanden, der mrbs in der DMZ betreibt oder der mir einen Tip geben kann?

Schonmal vielen Dank für’s Mitdenken.
Gruß,
Mathias

Hallo Mathias,

die DMZ ist doch ein eigenes Subnetz. Somit kannst du aus der DMZ nicht einfach auf die 10.16.1.1 zugreifen. Das ist ja auch der Sinn der DMZ.

Du kannst allerdings in der OPNSense eine Weiterleitung des Traffics zur OPNSense auf Port 636 an den Server einrichten. Die Regel müsste also lauten:

  • Traffic zu: IP der OPNSense in DMZ auf Port 636
  • Weiterleiten zu: IP des Servers in Grün auf Port 636

Somit könntest du über <IP der OPNSense in DMZ>:636 den LDAP des Servers verfügbar machen.

Viele Grüße
Christoph

Hallo Christoph,
vielen Dank für deine schnelle Antwort.

Da hast du natürlich recht. Daher habe ich zu Testzwecken aus der DMZ alles erlaubt.
Das scheint auch zu funktionieren. Die Nextcloud, die auf dem gleichen Dockerhost läuft kann ja ohne Probleme die Benutzer abfragen.
Das MRBS leider nicht. Witzigerweise kommt sofort die Antwort, dass der Benutzer, der sich anmelden möchte ein unbekannter Benutzer ist. Wenn ich dann eine falsche Server IP eingebe, muss man auf eine Antwort wesentlich länger warten?!?

Hier ist ein Ausschnitt meiner /srv/docker/linuxmuster-mrbs/config/raumbuchung.inc.php

// LDAP auth für linuxmuster62 mit einem Workaround, so
// dass man den Zugang auf Gruppen einschränken kann
$auth["type"] = "linuxmuster7"; 

// LDAP Server
// $ldap_host = "ldaps://servername:636";
// $ldap_host = "ldaps://ip-Addr:636";
$ldap_host = "ldaps://10.16.1.1:636";

// Gruppen, die Zugang zum MRBS haben sollen
// $ldap_lmn_accessgroups = array("teachers","p_mrbs");
// Wenn alle Benutzer zugang haben sollen, auskommentieren
$ldap_lmn_accessgroups = array("teachers","p_mrbs");

$ldap_base_dn = "DC=linuxmuster,DC=lan";
$ldap_dn_search_dn = "CN=global-binduser,OU=Management,OU=GLOBAL,DC=linuxmuster,DC=lan";
$ldap_dn_search_password = "12geheim90";
$ldap_dn_search_attrib = "sAMAccountName";

Leider protokollieren weder das MRBS noch das OSP etwas.

Hast du eine noch Idee?

Gruß,
Mathias

… nur so eine Idee: kann es evtl daran liegen, dass du über ldaps (verschlüsselt) gehst? Erwartet das ein gültiges Zertifikat, das es bei Nutzung der IP anstelle des Namens nicht gibt?

Hallo Michael,

das dachte ich auch am Anfang. Allerdings klappt’s bei der Nextcloud?!? Die fragt auch über ldaps://10.16.1.1:636 ab?

Das MRBS auf dem externen Dokerhost ist über mrbs.staufer-gymnasium.de erreichbar und das MRBS auf dem Dockerhost in der DMZ ist unter wwwmc.staufer-gymnasium.de erreichbar. Ich habe den CNAME-Eintrag noch nicht auf unseren Server gesetzt. Daher arbeite ich unter wwwmc.staufer-gymnasium.de.
Ob’s irgendwie daran liegt?
Gruß,
Mathias

Hi.
Versuche es doch mal von einer Shell aus – was sagt denn openssl s_client -connect 10.16.1.1:636 ?

Und danach ein:

ldapsearch -b "ou=default-school,ou=SCHOOLS,dc=linuxmuster,dc=meine-domain,dc=de" -H ldaps://server:636 -x -D global-binduser@linuxmuster.meine-domain.de -w super-geheimes-Passwort '(&(!(sophomorixAdminClass=attic))(|(sophomorixRole=student)))' |grep -e sAMAccountName -e sophomorixUnid

Das läuft hier sowohl über den Namen server als auch über die IP 10.16.1.1 und listet alle User-Accounts + deren UIDs … bei Dir auch?

Viele Grüße,
Michael

Hallo Michael,

Zeigt:

CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 O = Staufer-Gymnasiuim Pfullendorf, OU = LINUXMUSTER, CN = server.linuxmuster.lan, subjectAltName = server.linuxmuster.lan
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = Staufer-Gymnasiuim Pfullendorf, OU = LINUXMUSTER, CN = server.linuxmuster.lan, subjectAltName = server.linuxmuster.lan
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:O = Staufer-Gymnasiuim Pfullendorf, OU = LINUXMUSTER, CN = server.linuxmuster.lan, subjectAltName = server.linuxmuster.lan
   i:O = Staufer-Gymnasiuim Pfullendorf, OU = LINUXMUSTER, CN = LINUXMUSTER.LAN, subjectAltName = LINUXMUSTER.LAN
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDfDCCAmQCFGcZ4y1x0wAmoteHvurThK7pUDkGMA0GCSqGSIb3DQEBCwUAMHMx


dmhgyjTShvIvYrqH6gM4vzP+ULlazPkmNwZhKrAeVGI=
-----END CERTIFICATE-----
subject=O = Staufer-Gymnasiuim Pfullendorf, OU = LINUXMUSTER, CN = server.linuxmuster.lan, subjectAltName = server.linuxmuster.lan

issuer=O = Staufer-Gymnasiuim Pfullendorf, OU = LINUXMUSTER, CN = LINUXMUSTER.LAN, subjectAltName = LINUXMUSTER.LAN

---
Acceptable client certificate CA names
O = Staufer-Gymnasiuim Pfullendorf, OU = LINUXMUSTER, CN = LINUXMUSTER.LAN, subjectAltName = LINUXMUSTER.LAN
Client Certificate Types: RSA sign, DSA sign, ECDSA sign
Requested Signature Algorithms: RSA+SHA256:ECDSA+SHA256:RSA+SHA384:ECDSA+SHA384:RSA+SHA512:ECDSA+SHA512:RSA+SHA224:ECDSA+SHA224:RSA+SHA1:ECDSA+SHA1
Shared Requested Signature Algorithms: RSA+SHA256:ECDSA+SHA256:RSA+SHA384:ECDSA+SHA384:RSA+SHA512:ECDSA+SHA512:RSA+SHA224:ECDSA+SHA224
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
--- hier habe ich ein bisschen gekürzt --- 
SSL handshake has read 1561 bytes and written 421 bytes
Verification error: unable to verify the first certificate
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 8BCCBA7D9F79F29463425388506E5838A442961D44C5AE91ABA56FD2234BDA9D
    Session-ID-ctx: 
    Master-Key: AF4C14D4ADD064B42E162810C6256F6CD9D67BF7429815E30D921C953BE8236E7389B020FF3C28B8261F87E7C254B90C
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1622307772
    Timeout   : 7200 (sec)
    Verify return code: 21 (unable to verify the first certificate)
    Extended master secret: yes
---

Das liefert: Can't contact LDAP server (-1)

Gruß,
Mathias

… und wenn du da die IP oder den FQDN nimmst?
Das Zertifikat ist ja offenbar selbst-signiert…

Hallo Michael,

die habe ich genommen…

Hallo zusammen,

jetzt klappts…

Ich habe in der /srv/docker/linuxmuster-mrbs-sik/config/raumbuchung.inc.php

// If you want to use TLS, change the following to true.
// This can be an array.
$ldap_tls = false;

auf false gesetzt.

Warum das von außen auch mit true finktioniert, ist mir ein Rätsel.

Aber ok, das ist die Lösung.

Gruß,
Mathias

Hallo Mathias,

naja, eher ein Workaround - denn so laufen die Anfragen halt
unverschlüsselt. Das kann man je nach Netzwerktopologie aber auch so lassen.

Wenn die Anfragen so funktionieren, dann liegt es entweder an einem
gesperrten Port oder am Zertifikat. Eine gute Lösung wäre:

„Von außen“ hattest Du einen FQDN für den LMN-Server (genauer: die
Firewall, von der aus die Anfragen per Portweiterleitung zum Server
gelangen) für die Ldap-Abfrage verwendet. Du sorgst dafür, dass in der
DMZ dieser FQDN auf die 10.16.1.1 aufgelöst wird. Dann richtest Du auf
der Firewall eine Regel ein: „Zugriffe aus der DMZ nach 10.16.1.1 auf
Port 636 sind erlaubt“.

Und dann musst Du noch klären, dass Dein Zertifikat (also das, dass der
LDAP verwendet) auf dem neuen Host akzeptiert wird. Entweder, Du nimmst
ein richtiges Zertifikat, oder Du schaltest beim LDAP-Client auf dem
neuen Host die Zertifikatsprüfung ab.

So sollte es wieder mir der alten Konfiguration gehen.

Beste Grüße

Jörg

Hallo Jörg,

ich dachte, dass $ldap_tls = false; die Zertifikatsprüfung abschaltet.
Immerhin ist $ldap_host = "ldaps://10.16.1.1:636";

Weist du wie man die Zertifikatsprüfung abschaltet?

Gruß,
Mathias

Hallo Mathias,

das deaktiviert tatsächlich die Verwendung von TLS.

Die Überprüfung von Zertifikaten bei kann man normalerweise verhindern,
wenn man in der Datei /etc/ldap/ldap.conf die folgende Option
einträgt:

TSL_REQCERT never

Allerdings würde ich bevorzugen, auf dem Server ein gültiges Zertifikat
zu verwenden, z. B. von Let’s Encrypt - das ist schnell eingerichtet. So
musst Du auf jedem Client erneut Hand anlegen, auch ist die Fehlersuche
oft mühsam, weil die Fehlermeldungen oft nicht wirklich weiterhelfen.

Zum Testen empfehle ich auch immer Ldapsearch. Wenn es damit Probleme
gibt, dann liegt es an Ports oder Zertifikaten. Wenn es damit geht und
im eigentlichen Tool wie MRBS nicht, dann liegt es an den Einstellungen
innerhalb des Tools - so kann man das getrennt analysieren.

Beste Grüße

Jörg

Hallo Jörg,

Ich war mal im Container und hab mir die /etc/ldap/ldap.conf angeschaut. Da war TSL_REQCERT never schon gesetzt.

Am Zertifikat ligts also nicht.

Naja, unsere Firewall ist von Außen unter server.staufer-gymnasium.de erreichbar. Intern haben wir die Domäne linuxmuster.lan. staufer-gymnasium.de war als Domäne wohl für Samba zu lang.

Da werde ich noch etwas rumspielen …

Vielen Dank schon mal für deine guten Tips.

Gruß,
Mathias