Direkt zum Hauptinhalt

Migration Univention Corporate Server & Kopano nach Zamba AD & Mailcow

Univention Corporate Server durch Zamba AD und Mailcow ersetzen

Migration von Univention UCS und Kopano zu Zamba Active Directory, Mailcow und Proxmox VE. Viele kleinere Unternehmen nutzen Univention Corporate Server hauptsächlich als Domain Controller und Benutzerverwaltung. Wenn UCS nur noch als Active Directory dient und Kopano ohnehin abgelöst werden soll, ist der Betrieb häufig unnötig aufwendig.

Mit Zamba Active Directory, Mailcow, Proxmox VE, optional Proxmox Mail Gateway und Mailpiler lässt sich eine schlanke, moderne Open-Source-Infrastruktur aufbauen, die schneller wartbar ist und sich ideal für kleine und mittlere Unternehmen eignet.

Updates von Mailcow und Zamba AD Controller laufen künftig in wenigen Minuten statt in mehreren Stunden.

Kunden, die Keycloak oder eine vollständig vom Hersteller supportete UCS-Umgebung benötigen, sollten weiterhin bei Univention bleiben.

Passende Kurse finden Sie auf cloudistboese.de unter den Themen Mailcow, Domain Controller ablösen und Alles ohne Windows.


Vorteile der Migration

  • Univention UCS kann in kleinen Umgebungen ersetzt werden
  • Active Directory bleibt mit Samba/Zamba erhalten
  • Mailcow ersetzt Kopano als moderne Groupware
  • Updates werden deutlich einfacher und schneller
  • Proxmox VE ermöglicht Snapshots, Backups und einfache Wiederherstellung
  • LDAP-Anbindung für Mailcow, Mailpiler und weitere Dienste bleibt möglich
  • Die Umgebung wird schlanker, transparenter und besser wartbar

Systemvoraussetzungen

  • Bestehender Univention Corporate Server im AD-Modus
  • Kopano oder vergleichbare Groupware mit IMAP-Zugriff
  • Proxmox VE 8.x oder neuer
  • Linux Container mit installiertem Git
  • Grundkenntnisse in DNS, Active Directory, Mailservern und Proxmox VE

Übersicht der Migration

  1. Zamba Active Directory als zweiten Domain Controller installieren
  2. Active Directory replizieren und prüfen
  3. DNS auf den neuen Domain Controller umstellen
  4. Mailcow installieren
  5. LDAP-Anbindung in Mailcow konfigurieren
  6. Benutzer und Mailboxen synchronisieren
  7. Mails von Kopano nach Mailcow migrieren
  8. Kalender und Kontakte übernehmen
  9. Aliase und Weiterleitungen prüfen
  10. Mailcow produktiv schalten
  11. FSMO-Rollen übernehmen
  12. Univention UCS demoten und abschalten
  13. LDAP-Clients auf den neuen Zamba AD umstellen

Zamba Active Directory als zweiten Domain Controller installieren

Die Installation erfolgt auf dem Proxmox Host, zum Beispiel im Verzeichnis /root.

git clone -b dev https://github.com/bashclub/zamba-lxc-toolbox
cd zamba-lxc-toolbox
cp conf/zamba.conf.example conf/zamba.conf

zamba.conf anpassen

In der Datei conf/zamba.conf werden die Werte an die bestehende Umgebung angepasst.

LXC_TEMPLATE_STORAGE="local"
LXC_ROOTFS_SIZE="32"
LXC_ROOTFS_STORAGE="rpool-data"
LXC_SHAREFS_SIZE="100"
LXC_SHAREFS_STORAGE="rpool-data"

LXC_HOSTNAME="zmb-ad"
LXC_DOMAIN="windomain.local"
LXC_IP="10.0.0.254/24"
LXC_GW="10.0.0.1"
LXC_DNS="10.0.0.4"

LXC_BRIDGE="vmbr0"
LXC_PWD='Admin123'

ZMB_REALM="WINDOMAIN.LOCAL"
ZMB_DOMAIN="WINDOMAIN"
ZMB_ADMIN_USER="administrator"
ZMB_ADMIN_PASS='Admin123'

Hinweis: LXC_DNS zeigt zunächst auf den alten UCS-DNS-Server. Bei Windows-Domänen sollte vorher gegebenenfalls das Funktionslevel geprüft werden.

Zamba AD Join starten

bash install.sh -i 100

Im Menü wird Zamba-AD-Join gewählt.

Replikation prüfen

Nach der Installation kann der Container betreten und die Replikation geprüft werden.

pct enter 100
su -
wbinfo -u
wbinfo -g

Wenn alle Benutzer und Gruppen angezeigt werden, ist der Join grundsätzlich erfolgreich.

Empfehlung: In Proxmox sollte anschließend der alte UCS-DNS-Server aus der Hostkonfiguration entfernt werden, sobald der neue Zamba AD DNS zuverlässig funktioniert.

smb.conf anpassen

Folgende Anpassungen können in der smb.conf hilfreich sein:

vi /etc/samba/smb.conf
[global]
ldap server require strong auth = no
dns forwarder = 1.1.1.1 1.0.0.1

DNS auf den neuen Domain Controller umstellen

DNS ist bei Active Directory fast immer der kritischste Punkt. Sobald der neue Zamba Domain Controller sauber repliziert, werden feste IP-Konfigurationen und DHCP-Einstellungen angepasst.

  • Alle Server mit statischer IP erhalten den neuen Zamba AD als DNS-Server
  • Im DHCP-Server wird der alte UCS-DNS durch den neuen DC ersetzt
  • Alte UCS-DNS-Einträge werden später bereinigt
  • RSAT DNS-Konsole zur Kontrolle verwenden

Merksatz: It was DNS.


Mailcow installieren

Für Mailcow wird ein weiterer LXC verwendet. Die Installation erfolgt ebenfalls über die Zamba LXC Toolbox.

cp conf/zamba.conf.example conf/zamba.conf

Für Mailcow müssen insbesondere Hostname und Netzwerkeinstellungen angepasst werden.

bash install.sh -i 101

Im Menü wird Mailcow gewählt.

Mailcow aktualisieren

pct enter 101
su -
cd /opt/mailcow-dockerized
apt install jq
./update.sh

Danach wird das Mailcow-Webinterface geöffnet:

https://10.0.0.253/admin

Grundkonfiguration von Mailcow

Unbedingt notwendige Schritte

  • Admin-Passwort ändern: System / Konfiguration / Administrator bearbeiten
  • Alle Maildomains eintragen: E-Mail / Konfiguration / Domains
  • Schwellwerte und Quotas beachten
  • LDAP-Bind-User im AD anlegen: zum Beispiel bind-mailcow

LDAP in Mailcow konfigurieren

Die LDAP-Anbindung erfolgt unter:

System / Konfiguration / Zugang / Identity Provider

  • Identity Provider: LDAP
  • Host: IP des neuen Zamba AD
  • Port: 636
  • Benutze SSL: an
  • Ignoriere SSL Fehler: an
  • Base DN: CN=Users,DC=windomain,DC=local
  • Username Feld: mail
  • Attribute Feld: mail
  • Bind DN: CN=bind-mailcow,CN=Users,DC=windomain,DC=local
  • Bind Passwort: Passwort des Bind-Users
  • Attribute Mapping: Standardvorlage / Default
  • Benutzer beim Login erstellen: an
  • Vollsynchronisation: an
  • Importiere Benutzer: an
  • Sync / Import interval: für den Anfang 1 Minute

Der Erfolg wird unter E-Mail / Mailboxen kontrolliert.


E-Mails von Kopano nach Mailcow migrieren

Die Migration erfolgt über IMAP-Synchronisation.

Mailcow Sync Job erstellen

In Mailcow:

E-Mail / Synchronisationen / Neuen Sync Job erstellen

  • Host: IP des Kopano-Servers
  • Port: 993
  • Benutzername: Windows-Loginname
  • Elemente ausschließen: Regex-Inhalt entfernen, da zu gefährlich
  • --delete2duplicates nur verwenden, solange Mails noch auf Kopano laufen

Kopano hat standardmäßig IMAP teilweise deaktiviert. In der server.conf nach disable suchen oder in UMC beim Benutzer unter Kopano IMAP aktivieren.

Der Erfolg der Synchronisation sollte im Dialog und in den Logs kontrolliert werden.


Kalender aus Kopano exportieren

Kopano stellt Kalender über CalDAV bereit. Beispiele:

http://kopano:8080/caldav/<user>/<folder-name>/ Kalender oder Aufgabenordner im Benutzerpostfach
http://kopano:8080/caldav/<user>/<sub-folder>/ Selbst erstellter Unterkalender
http://kopano:8080/caldav/<other-user>/<folder-name>/ Freigegebener Kalender eines anderen Benutzers
http://kopano:8080/caldav/public/<foldername>/ Öffentlicher Kalender
http://kopano:8080/caldav/<user>/ Standardkalender des Benutzers

Die exportierten Dateien können anschließend im SOGo-Frontend oder in einem Mailclient importiert werden.


Kontakte exportieren und importieren

Kontakte exportieren

Der Export kann über den alten Mailclient erfolgen. Alternativ kann ein Python-Script mit Kopano-MAPI genutzt werden.

sudo apt install python3-kopano
mkdir export
wget https://raw.githubusercontent.com/bashclub/trmm-scripts/refs/heads/main/kopano-export-contacts.py
python3 kopano-export-contacts.py

Das Script exportiert Kontakte in Unterordner pro Benutzer, da Kopano kein echtes CardDAV für diesen Zweck bereitstellt.

Kontakte importieren

  • Outlook kann beim Export oder Import Probleme verursachen
  • SOGo importiert Kontakte oft nur einzeln
  • eM Client war in der Praxis häufig die beste Lösung für den Import vieler VCF-Dateien per Drag & Drop

Beispiel für CardDAV-Anbindung:

https://kunde.dyndns.org/SOGo/dav/user@domain.de/Contacts/personal/

Aliase und Weiterleitungen übernehmen

Aliase finden

univention-ldapsearch -LLL | grep @ | grep mailAlternative

Aliase werden in Mailcow unter E-Mail / Aliasse / Alias hinzufügen eingetragen.

Weiterleitungen finden

univention-ldapsearch -LLL | grep mailForward

Weiterleitungen werden im SOGo-Webfrontend unter E-Mail konfiguriert, nicht direkt in Mailcow.


Mailcow produktiv schalten

NAT und Portweiterleitungen

Auf der Firewall, zum Beispiel OPNsense, können Aliase verwendet werden.

p_mailcow: 80 443 465 993 4190
h_mailcow: 10.0.0.253

Port Forwarding:

any > WAN IP > p_mailcow > h_mailcow

Mailcow neu starten

pct enter 101
su -
rm /opt/mailcow-dockerized/data/conf/nginx/redirect.conf
cd /opt/mailcow-dockerized
docker compose down

Optional: Greylisting deaktivieren

vi /opt/mailcow-dockerized/data/conf/rspamd/local.d/greylist.conf
enabled = false;

Optional: Let’s Encrypt Einstellungen

vi /opt/mailcow-dockerized/mailcow.conf
SKIP_LETS_ENCRYPT=n
SKIP_HTTP_VERIFICATION=y
docker compose up -d

Let’s Encrypt kontrollieren

docker compose logs --tail=200 -f acme-mailcow

Alternativ eigenes Zertifikat verwenden

Eigene Zertifikate können hier abgelegt werden:

/opt/mailcow-dockerized/data/assets/ssl
  • cert.pem
  • key.pem

Danach DNS-Werte beim Provider kontrollieren:

E-Mail / Domains / DNS


Abschluss der Migration

  • Synchronisationen nach erfolgreicher Migration deaktivieren
  • Optional Proxmox Mail Gateway auf Mailcow verweisen
  • Alten Univention Corporate Server abschalten
  • FSMO-Rollen auf Zamba AD übertragen
  • Alte UCS-Fragmente bereinigen
  • LDAP-Clients auf neuen Zamba AD umstellen

FSMO-Rollen übernehmen

pct enter 100
su -
samba-tool fsmo transfer --role=all -Uadministrator
samba-tool domain demote --remove-other-dead-server=UCS
rm /etc/cron.d/sysvol-sync

Bereinigung

  • RSAT DNS-Konsole nach alten Fragmenten durchsuchen
  • Alte DNS-Einträge entfernen
  • Optional Metadata Cleanup durchführen

LDAP-Clients anpassen

Für bestehende LDAP-Clients werden neue Bind-User pro Rolle angelegt. Anschließend werden die LDAP-Parameter angepasst.

  • IP: neuer Zamba AD
  • Port: von 7389 auf 636 mit SSL ändern
  • UID auf sAMAccountName ändern
  • Bind DN von uid auf cn ändern

Proxmox Mail Gateway mit Mailcow verbinden

Greylisting in Mailcow deaktivieren

vi /opt/mailcow-dockerized/data/conf/rspamd/local.d/greylist.conf
enabled = false;
docker compose restart rspamd-mailcow

Routing in Mailcow

  • Konfiguration / Routing / Networks
  • ipvompmg:26
  • Greylisting deaktivieren

Senderabhängige Transport Maps

  • Für alle Maildomains, die PMG nutzen
  • ID 1: ipvompmg:26

Proxmox Mail Gateway

  • Configuration / Mail Proxy
  • Relay Domain setzen
  • Transport zur Mailcow konfigurieren
  • Kein MX für internen Transport verwenden

Beim DNS-Provider werden die PMG-Werte statt der direkten Mailcow-Werte gesetzt.


Mailpiler als Mailarchiv integrieren

Mailpiler kann ebenfalls über die LXC Toolbox installiert werden.

Mailcow für Archivweiterleitung vorbereiten

  • System / Konfiguration / Einstellungen / Weiterleitungs-Hosts
  • IP des Mailpilers eintragen

BCC an das Archiv

  • System / Konfiguration / Routing / Transport
  • Ziel: piler.windomain.local
  • Next Hop: 10.0.0.x

BCC-Maps einrichten

Unter:

E-Mail / Konfiguration / Adressumschreibung / BCC-Maps

Für jede Maildomain jeweils eingehend und ausgehend:

  • Lokales Ziel: sysops.tv
  • BCC-Ziel: piler@piler.windomain.local
  • Domain: sysops.tv

Kontrolle im Mailpiler:

tail -f /var/log/mail.log

Eine LDAP-Anpassung im Mailpiler wäre in config-site.php möglich, funktioniert jedoch nicht zuverlässig für Aliase.


Doppelte Mails bei mehrfacher Kopano-Synchronisation vermeiden

Die IMAP-Kompatibilität von Kopano ist in der Praxis oft problematisch. Wenn Mails doppelt oder dreifach erscheinen, kann eine gezielte Bereinigung und erneute Synchronisation helfen.

apt install kopano-migration-imap
nano migrate.sh
#!/bin/bash

set -euo pipefail

if [ "$#" -ne 6 ]; then
  echo "Verwendung:"
  echo "$0 <host1> <host2> <user1> <pass1> <user2> <pass2>"
  exit 1
fi

HOST1="$1"
HOST2="$2"
USER1="$3"
PASS1="$4"
USER2="$5"
PASS2="$6"

MAILCOW_DOVECOT_CONTAINER="565cef8dac49"

echo "=========================================="
echo "Bereinige Zielordner auf Mailcow"
echo "=========================================="

docker exec "$MAILCOW_DOVECOT_CONTAINER" \
  doveadm expunge -u "$USER2" mailbox "Gesendet" ALL || true

docker exec "$MAILCOW_DOVECOT_CONTAINER" \
  doveadm mailbox delete -u "$USER2" "Sent" || true

docker exec "$MAILCOW_DOVECOT_CONTAINER" \
  doveadm mailbox delete -u "$USER2" "Gesendete Objekte" || true

docker exec "$MAILCOW_DOVECOT_CONTAINER" \
  doveadm mailbox delete -u "$USER2" "Gesendete Objekte/Gesendete Objekte" || true

echo "=========================================="
echo "Starte IMAP Sync"
echo "=========================================="

kopano-migration-imap \
  --host1 "$HOST1" \
  --host2 "$HOST2" \
  --user1 "$USER1" \
  --password1 "$PASS1" \
  --user2 "$USER2" \
  --password2 "$PASS2" \
  --ssl1 \
  --ssl2 \
  --regextrans2 's#^Gel&APY-schte Objekte$#Papierkorb#' \
  --useheader Message-Id \
  --addheader \
  --usecache \
  --syncinternaldates \
  --skipsize \
  --nofoldersizes \
  --nofoldersizesatend \
  --delete2 \
  --delete2folders \
  --delete2duplicates \
  --exclude '(?i)^trash$|^junk$|^spam$|^unwanted$|^&U3CPbg-($|/)'

echo "=========================================="
echo "Migration abgeschlossen"
echo "=========================================="

Ausführen mit:

bash migrate.sh quellip zielip login passwortucs email@adresse.de passwortmailcow

Das Beispiel nimmt keine Papierkörbe oder Spam-Ordner mit. Dies wird über --exclude gesteuert.


Optionale DNS-Einträge für Autokonfiguration

Für Thunderbird, eM Client und weitere Programme können SRV-Records gesetzt werden, damit Mail, Kalender und Kontakte automatisch gefunden werden.

_autodiscover._tcp  IN  SRV  0 0 443 q.deine-domain.de.
_caldavs._tcp       IN  SRV  0 1 443 q.deine-domain.de.
_carddavs._tcp      IN  SRV  0 1 443 q.deine-domain.de.
_imaps._tcp         IN  SRV  0 1 993 q.deine-domain.de.
_matrix._tcp        IN  SRV  0 1 465 matrix.deine-domain.de.
_sieve._tcp         IN  SRV  0 1 4190 mail.deine-domain.de.
_smtps._tcp         IN  SRV  0 1 465 q.deine-domain.de.
_submissions._tcp   IN  SRV  0 1 465 q.deine-domain.de.

Fazit

Mit Zamba Active Directory, Mailcow und Proxmox VE lässt sich eine bestehende Univention-/Kopano-Umgebung vollständig durch moderne Open-Source-Komponenten ersetzen. Für kleine und mittlere Unternehmen entsteht eine schlanke, wartbare und zukunftssichere Infrastruktur.

  • Active Directory bleibt erhalten
  • Kopano wird durch Mailcow ersetzt
  • Updates werden deutlich schneller
  • Proxmox VE ermöglicht einfache Snapshots und Backups
  • Mailpiler und Proxmox Mail Gateway können integriert werden
  • Der Betrieb wird transparenter und besser kontrollierbar

Passende Schulungen

Wenn Sie die Migration unter Anleitung durchführen möchten, finden Sie passende Live-Schulungen auf cloudistboese.de:

  • Windows Domain Controller mit Samba/Zamba ablösen
  • Open-Source Mailserver mit Mailcow betreiben
  • Alles ohne Windows
  • Proxmox produktiv mit ZFS betreiben
  • Replikationen und Backups trojanersicher