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

Version 18.1 von jonasmayer@sbede am 2022/05/23 10:30

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

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 LXC-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="87.130.28.26"               #  <- Ö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 nächsten Schritt öffnen Sie mit einem Editor Ihrer Wahl die internet.conf

nano /etc/logodidact/internet.conf

Hier fügen Sie nun den Port 1636 im Abschnitt FromInternetAllowTCP hinzu

FromInternetAllowTCP 1636

Im Anschluß daran starten Sie die Firewall neu

ldfirewall restart

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