Das neue Setup im Überblick

Für Subuser gibt es fast (tm) keinen Unterschied zwischen nerdhammel und mail.hammel. Für die GNUs mit lokalen Unix-Shell-Accounts auf dem nerdhammel sind sie signifkant.

Empfang von Emails

Damit ist der Empfang von Emails für GNUs oder Subuser gemeint, die ihre Mails auf der GNUher.de lesen.

nerdhammel

Auf dem nerdhammel wurden eingehenede Mails durch zwei verschiedene Mechanismen in den Maildirs gespeichert:

  1. Lokale Unix-Benutzer
  2. Festlegung eines Verzeichnisses pro Domain (vdir in der /etc/exim4/vdomains)

Der Dovecot hat die Einträge in der MySQL-Tabelle vuser.users genutzt, um Benutzer zu authentifizieren und Maildirs zuzuordnen. In die MySQL hat der Exim aber nicht geguckt.

mail.hammel

Exim und Dovecot nutzen auf dem mail.hammel die gleiche Benutzerdatenbank (LDAP), um Emails auszuliefern.

Auf dem mail.hammel werden Mails unterhalb von /storage/mails/ in Maildirs gespeichert (damit ein Zugriff auf anderen Rechnern, z.B. admin.hammel bzw. web2.hammel möglich ist).

Dadurch ist allerdings die Zuordnung zwischen Maildir und Unix-Benutzer verloren gegangen. Um diese Zuordnung wieder herzustellen, gibt es mehrere Alternativen:

  1. virtualMailbox im LDAP für mail:user@dolly.gnuher.de anlegen (siehe unten)
  2. Symlink zwischen /home/user/Maildir und /storage/mails/... anlegen.
  3. Eintrag in /etc/aliases machen

Das ist vor allem für Cronjobs wichtig, die ohne weitere Einträge in der crontab an den Unix-Shell-Account user@dolly.gnuher.de ausgeliefert werden.

Versand von Emails über SMTPauth

Beim Versand von Emails auf dem nerdhammel per SMTPauth hat der Exim - wie der Dovecot auch - in die MySQL geguckt und ergänzend die Datei /etc/exim/auth geprüft.

Das ist auf dem mail.hammel identisch.

Mailmigration für eine komplette Domain

  1. Migrationshelfer auf dem Nerdhammel als root ausführen

    nerdhammel# domain=example.com
    nerdhammel# mkdir $domain && cd $domain
    nerdhammel# vusers2ldif $domain
    
  2. DIE LDIFs PRÜFEN - der Migrationshelfer ist eine Alpha-Version

  3. Migrationsartefakte verschieben

  4. LDAP User und Gruppen anlegen

    # als beliebiger User auf admin.hammel
    ldapadd -W -D cn=admin,dc=gnuher,dc=de -f $ldifuserdatei
    
  5. Mailboxen übertragen

    Wenn es Fehlermeldungen gibt, ist das nicht tragisch, solange diese bei einem weiteren Aufruf nicht mehr auftauchen. Der doveadm Aufruf verändert nur die Mailbox auf mail.hammel, nerdhammel wird nicht verändert.

    Anm. Settel: Kommt eine Fehlermeldung wegen einer mailbox customflags, schaut man sich die Datei nerdhammel:$MAILDIR/.customflags an. Enthält sie nur "0000", kann man sie einfach löschen, das ist ein Relikt aus einer sehr frühen Dovecot Version.

    Die Übertragung von 8GB dauert etwa 30 Minuten.

  6. Exim auf mail.hammel konfigurieren

    Den Erfolg kann man auf mail.hammel prüfen, indem man dort per Hand Emails einliefert oder auf der Kommandozeile mit

    > exim -bt user@example.com
    user@example.com
      router = vusers, transport = vusers_maildirs
    
  7. Domain auf dem nerdhammel in /etc/exim4/virthammel_pause_domains eintragen, damit ist der Mailempfang temporär unterbrochen.

    Das kann man mit dem folgendem Kommando auf nerdhammel prüfen:

    > exim -bt user@example.com
    user@example.com cannot be resolved at this time:
    
  8. Nochmal alle Mailboxen übertragen (das geht jetzt sehr viel schneller) Damit werden auch alle Testmails aus Schritt 6 wieder entfernt.

  9. perm_mail in der MySQL auf nerdhammel auf 0 setzen

    update users set perm_mail=0 where domain="example.com";
    

    damit können sich die User dieser Domain nicht mehr per POP/IMAP auf dem nerdhammel einloggen

  10. DNS ändern

  11. Domain aus /etc/exim4/virthammel_pause_domains austragen und in /etc/exim4/virthammel_domains eintragen

  12. Profile in Roundcube migrieren

    auf web1.hammel das in Schritt 1 generierte Skript aufrufen oder per Hand folgendes ausführen:

    # MySQL auf web1.hammel
    UPDATE users SET mail_host='mail.hammel.gnuher.de' WHERE username LIKE '%@example.com';
    
  13. Usern die Änderungen mitteilen

Mailmigration für einen einzelnen Benutzer

Zu beachten ist: Da es mehr als einen Nutzer für diese Domain gibt, muss man den mail.hammel noch zusätzlich konfigurieren, damit man sich innerhalb der Domain weiter Emails schicken kann (da sowohl der nerdhammel, als auch der mail.hammel die Domain sonst als lokal betrachten würden (siehe unten, letzter Schritt). Die Aliase werden in diesen Fällen weiter auf nerdhammel aufgelöst.

Die Prozedur ist der für komplette Domains sehr ähnlich, folgende Modifikationen sind notwendig:

Zur Verifikation kann man exim -bt nutzen. Auf dem nerdhammel:

$ exim -bt user@example.com
user@example.com
  router = virthammel_redirector_user, transport = remote_smtp
  host 144.76.235.56 [144.76.235.56]

$ exim -bt nichtmigrierteruser@example.com
nichtmigrierteruser@example.com
  router = vusers, transport = vusers_maildirs

Auf mail.hammel:

$ exim -bt user@example.com
user@example.com
  router = vusers, transport = vusers_maildirs

$ exim -bt nichtmigrierteruser@example.com
nichtmigrierteruser@example.com
  router = nerdhammel_redirector_user, transport = remote_smtp
  host 88.198.0.170 [88.198.0.170]

Forward Migration

Die alten Forward-Dateien funktionieren weiter, allerdings sucht der Exim auf mail.hammel jetzt an einer anderen Stelle: $homeDirectory/forward - ohne Punkt. HomeDirectory wird aus dem virtualMailbox Eintrag aus dem LDAP geladen.

Wenn ihr Mails per save in anderen Mailboxen speichern wollt, dann sollte die Angabe im save Kommando relativ erfolgen, z.B. mit save .spam.

SpamAssassin User Config

Die SpamAssassin Config Datei wird aus dem Verzeichnis /storage/mails/blocklists/$email/spamassassin/user_prefs geladen. $email ist dabei die Emailadresse des Empfängers, in der alle "gefährlichen" Zeichen durch Unterstriche ersetzt worden sind (diese Regexp wird benutzt s/[^-A-Za-z0-9+.\,\@\=]//gs).

Für übliche Emailadressen ist das also die normale Emailadresse. Den Fallback auf die Domain gibt es nicht mehr. Bitte großzügig Symlinks anlegen.

Passwort ändern

Das Passwort für IMAP und SMTP-auth wird im zugehörigen LDAP Benutzerobjekt gespeichert und kann vom Anwender über die Webmailoberfläche geändert werden. Admins können das Passwort mit dem Befehl ldappasswd zurücksetzen:

 ldappasswd -x -W -D cn=admin,dc=gnuher,dc=de 'cn=herbert@example.com,uid=SUBUSER,ou=Users,dc=gnuher,dc=de' -s geheim

Cheatsheet

 doveadm -f table mailbox status -u user@example.com "messages vsize" %

 doveadm mailbox create -u user@example.com INBOX