Unifi Controller – Mailversand schlägt fehl

Der Unifi Controller unterstützt mittlerweile nicht nur das StartTLS sonder prüft auch das Zertifikat des Mail Servers. Was erstmal in die Kategorie „Captain Obvious“ fallen sollte, wird interessant, weil frühere Versionen das nicht gemacht haben und die Zertifikatsprüfung auch gemacht wird, wenn man 127.0.0.1 als Mailserver verwendet.

Konkret: auch wenn man in der Controller-Config angibt, dass der Mailserver ohne SSL/TLS anzusprechen ist, wird beim Verbindungsaufbau ein StartTLS gesendet und das Zertifikat geprüft. Das Zertifikat muss zur verwendeten MailServer-Addresse passen. Wer den MailServer lokal betreibt oder direkt mit IP anspricht, muss das Zertifikat entsprechend anpassen oder die korrekte DNS-Adresse verwenden.

Kolab Postfix stellt google mails nicht zu.

Wenn man postfix mit einem Kolab backend betreibt kommt vor dem Zustellen der Mails das Python-Script kolab_smtp_access_policy zum Einsatz.

Dieses prüft ob Sender- oder Empfänger-Adresse im LDAP hinterlegt ist. Das Prüfergebnis wird anschließend gecached. Und hier fängt der Ärger an. Das Script als auch das DB-Design sehen 64 Zeichen für eine E-Mail-Adresse vor. 254 Zeichen dürfen es aber sein. Google verwendet für die Verification Mail nun aber mehr als 90 Zeichen.

Um den Fehler zu beheben muss man zuerst in der kolab-Datenbank die tabelle policy_result bearbeiten. Die Spalten sender und recipient müssen auf 254 erweitert werden.

alter table policy_result modify sender varchar(254);
alter table policy_result modify recipient varchar(254);

anschließend muss man das /usr/lib/postfix/kolab_smtp_access_policy bearbeiten. Dort muss man den Eintrag policy_result_table wie folgt anpassen.

policy_result_table = Table(
        'policy_result', metadata,
        Column('id', Integer, Sequence('seq_id_result'), primary_key=True),
        Column('key', String(16), nullable=False),
        Column('value', Boolean, nullable=False),
        Column('sender', String(254), nullable=True),
        Column('recipient', String(254), nullable=False),
        Column('sasl_username', String(64)),
        Column('sasl_sender', String(64)),
        Column('created', Integer, nullable=False),
        Column('data', PickleType, nullable=True),
    )

kolab_smtp_access_policy debugen

Ich betreibe seit ein paar Tagen eine Kolab-Server und bin dabei über die ein oder andere Baustelle gestolpert. Am meisten probleme hat mit die kolab_smtp_access_policy bereitet.

Diese wird vom postfix aufgerufen um zu prüfen ob eine Mail angenommen werden darf. Bei kolab_smtp_access_policy handelt es sich um ein Python Script, das ohne weiteres schwer von der Console aufgerufen werden kann.

Leider logt das Script standartmäßig nichts. Um das Logging zuzuschalten muss man unter /etc/postfix/master.conf dem scritpaufruf parameter mitgeben.

recipient_policy_incoming unix  -       n       n       -       -       spawn
    user=kolab-n argv=/usr/lib/postfix/kolab_smtp_access_policy --verify-recipient --allow-unauthenticated -l debug -d 9

Das „-l debug -d 9“ sorgt dafür, dass das Logfile /var/log/kolab/pykolab.log gefüllt wird. Jetzt kann man mit der Fehlersuche beginnen…