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 Zamba Active Directory als zweiten Domain Controller installieren Active Directory replizieren und prüfen DNS auf den neuen Domain Controller umstellen Mailcow installieren LDAP-Anbindung in Mailcow konfigurieren Benutzer und Mailboxen synchronisieren Mails von Kopano nach Mailcow migrieren Kalender und Kontakte übernehmen Aliase und Weiterleitungen prüfen Mailcow produktiv schalten FSMO-Rollen übernehmen Univention UCS demoten und abschalten 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/// Kalender oder Aufgabenordner im Benutzerpostfach http://kopano:8080/caldav/// Selbst erstellter Unterkalender http://kopano:8080/caldav/// Freigegebener Kalender eines anderen Benutzers http://kopano:8080/caldav/public// Öffentlicher Kalender http://kopano:8080/caldav// 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 " 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