Samba4 Verzeichnisdienst direkt im Internet freigeben (ohne Stream via rev-proxy)

Zuletzt geändert von Jonas Mayer am 2022/05/23 10:48

Wichtig
Diese Art der Verzeichnisdienst-Freigabe wird von SBE nicht empfohlen, da hier die Freischaltung ohne zertifikatsgesicherte Transportverschlüsselung erfolgt.
Wir empfehlen Ihnen stattdessen, dieser Anleitung zu folgen, um den LDAP-Dienst auf sichere Art mit Lets' Encrypt SSL-Zertifikaten freizugeben!


Wenn Sie den Verzeichnisdienst des Samba4-Containers direkt (d.h. nicht über einen Tunnel via rev-proxy / nginx) im Internet freigeben wollen, folgen Sie bitte dieser Anleitung.

  1. Schritte im Container ldhost
  2. Schritte im Container logosrv
  3. Schritte am vorgeschalteten Router für den Internetzugriff

Schritte im Container ldhost

Öffnen Sie die die Datei /etc/nano/shorewall/rules mit einem Editor Ihrer Wahl und fügen Sie am Anfang folgende Zeile hinzu.
Da der LDAPS Port 636  schon durch den OpenLDAP-Dienst belegt ist, wird mit nachfolgendem Shorewall-Eintrag der Port serverintern zunächst auf einen anderen Port umgemappt.

# TCP-Port 636 vom Internet-Router entgegennehmen und auf benutzerdefiniertem Port 1636 zum LXC-Container logosrv weiterleiten
DNAT        ext        dmz:172.28.29.2:1636   tcp        636

Im Anschluß daran starten Sie mit folgendem Befehl die Shorewall neu:

shorewall restart

Schritte im Container logosrv

Erstellen Sie die Datei /usr/sbin/ldfirewall.custom mit einem Editor Ihrer Wahl.

nano /usr/sbin/ldfirewall.custom

Kopieren Sie nun folgenden Text in die Datei.

Hinweis: Sollte die Datei schon mit anderweitigen Regeln existieren, bearbeiten Sie stattdessen den Inhalt in geeigneter Form und fügen Sie die relevanten Regeln darin ein. Es handelt sich um die rot & orange markierten Zeilen.

#!/bin/bash

DRYRUN=no
VERBOSE=no
ipt=do_iptables
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/bin:/usr/local/bin/support"

do_iptables()
{
  run iptables "$@"
}
run()
{
  if [ "$VERBOSE" = "yes" ]; then
    echo "$@"
  fi
  if [ "$DRYRUN" = "no" ]; then
    "$@"
  fi
}

case "$1" in
  start|restart)

    # Zugelassene externe IP-Adressen (falls mehrere IP-Adressen nötig, diese per Leerzeichen trennen)
    # -------
    # Beispiele:
    # * BelWue-Moodle-Server IPs: 129.143.69.1 129.143.232.18 129.143.255.2
    # * Webuntis Server in Österreich IP: 213.208.138.146

    SOURCEIP="129.143.69.1 129.143.232.18 129.143.255.2 213.208.138.146"
    IP_LOGOSRV_DMZ=172.28.29.2
    IP_SAMBA4_SERVERNET=172.28.28.30


    for ipaddr in $SOURCEIP
    do
    echo -n "Adding custom rules to allow ldaps connections (tcp/1636) from host '${ipaddr}' and redirect to 'samba4-ad:636'... "
      $ipt -t nat -I PREROUTING -i dmz -p tcp -s ${ipaddr} -d ${IP_LOGOSRV_DMZ} --dport 1636 -j DNAT --to-destination ${IP_SAMBA4_SERVERNET}:636
      $ipt -t mangle -I mf_internet_cp -p tcp -s ${ipaddr} -d ${IP_LOGOSRV_DMZ} --dport 1636 -g mark_from_internet_allowed
      echo "OK"
    done

    ;;
  stop)
    ;;
  *)
    echo "Benutzung: $0 {start|restart}"
    exit 1
    ;;
esac

Info: Durch die letzte iptables-Regel wird der temporär verwendete, benutzerdefinierte TCP-Port 1636 serverintern wieder auf Port 636 zurückgemappt, bevor die Verbindung zum Ziel-Container samba4-ad weitergeleitet wird. An diesen Port ist der Samba4 Verzeichnisdienst gebunden.

In der Datei /usr/sbin/ldfirewall.custom müssen nun folgende Werte an die eigene Umgebung angepasst werden:

SOURCEIP="213.208.138.146"            #  <- Öffentliche IP(s), von denen aus Verbindungen erlaubt werden. In der Regel handelt es sich um IPv4-Adressen von Webservern, z.B. eine extern gehostete Moodle-Instanz
IP_LOGOSRV_DMZ=172.28.29.2            #  <- ifconfig im logosrv aufrufen, dort die IP-Adresse der Schnittstelle "dmz" anschauen und hier in der Variable eintragen
IP_SAMBA4_SERVERNET=172.28.28.30      #  <- ifconfig im samba4-ad Container aufrufen, dort die IP-Adresse der Schnittstelle "servernet" anschauen und hier in der Variable eintragen

Danach müssen Sie das Skript noch ausführbar machen, damit sie im Zuge eines Firewall-Restarts automatisch verarbeitet wird:

chmod +x /usr/sbin/ldfirewall.custom

Führen Sie nun das Skript einmal im Vordergrund aus und stellen Sie sicher, dass keine Fehlermeldungen an der Konsole ausgegeben werden (Syntaxkontrolle):

bash /usr/sbin/ldfirewall.custom restart

Im Anschluß daran starten Sie die Firewall komplett neu, um die Regeln zu laden:

ldfirewall restart

Schritte am vorgeschalteten Router für den Internetzugriff

Damit die Freigabe des Samba4-LDAP im Internet funktioniert, ist es außerdem noch wichtig, die Portfreigabe (TCP-Port 636) am vorgeschalteten Router zum LogoDIDACT Server hinzuzufügen:

1653294111427-417.png

Hinweise:
- Bei der IP-Adresse 192.168.1.254 in der Abbildung handelt es sich um die Schnittstelle p_extern des LogoDIDACT Servers
Neben dem Port 636 (LDAP-Freigabe wie im Artikel hier beschrieben) werden hier in der Abbildung außerdem noch die Ports 80+443 zur Freischaltung von LogoDIDACT Webdiensten durch den Router weitergeleitet