Installation: Kopano – der „neue“ Stern am Groupwarehimmel – Teil 2 (MTA Installation)

Letztes Update: 27.12.2018
Getestet: 28.10.2018

In Teil 1 meiner Kopanoartikelserie wurde (hoffentlich) klar, dass die Installation im Grunde genommen kein Hexenwerk ist. Kopano läuft, die Komponenten funktionieren. Aber… Ohne einen MTA  – wie zum Beispiel Postfix –  macht eine Groupware keinen Spaß!

Ziel dieses Artikels ist es, die Mailfunktionalität in Kopano zu implementieren. Damit man die Mailaccounts nicht separat anlegen muss, erhält der MTA die benötigten Daten aus der Kopanodatenbank. (= primäre Mailadresse).

Schließlich werden noch ein paar Mechanismen zur Spamabwehr eingebaut.

Dazu kommen wir jedoch später!

Kopanobenutzer, Postfix, Mailadressen… wie passt das zusammen?

Ist man Teil 1 gefolgt, befindet sich zur Zeit ein Benutzer in der Kopanodatenbank. (Benutzername: gestl, Emailadresse: daniel.gestl@it-yourself.at). Nun muss noch ein MTA her, der die Emailkommunikation übernimmt und ankommende Emails an Kopano weitergibt.

Kopano dagent

Die Kommunikationsschnittstelle zwischen dem MTA (z.B. Postfix) und Kopano bildet der sogenannte Kopano-dagent. Er „wartet“ auf eingehende Verbindungen vom MTA. Der Datenaustausch erfolgt über das LMTP (Local Mail Transfer Protocol.)

Wie auch bei der server.cfg ist die Datei dagent.cfg nicht im Verzeichnis /etc/kopano vorhanden und muss erst aus dem Verzeichnis /usr/share/doc/kopano/example-config dorthin kopiert werden.

cp /usr/share/doc/kopano/example-config/dagent.cfg.gz /etc/kopano

cd /etc/kopano

gzip -d dagent.cfg

nano /etc/kopano/dagent.cfg

In der Standardkonfiguration, ist der Port auskommentiert. Ich habe den Eintrag wie folgend angepasst:

lmtp_listen = 2003

Prüfen ob der kopano-dagent läuft / neu starten:

service kopano-dagent stop

service kopano-dagent start

service kopano-dagent status

Der Status sollte auf: active (running) stehen.

Ein weiterer Check, kann mit Telnet durchgeführt werden

telnet 127.0.0.1 2003

und sollte zum Ergebnis haben, dass sich der LTMP Server meldet:

Connected to 127.0.0.1.
Escape character is ‚^]‘.
220 2.1.5 LMTP server is ready

kopano-spooler

Der Kopano-Spooler ist für das Abarbeiten von ausgehenen Emails notwendig. Wenn dieses Service nicht läuft, bleiben ausgehende Emails im Postausgang hängen. Die .cfg Datei muss erst wieder in das entsprechende Verzeichnis kopiert werden:

cp /usr/share/doc/kopano/example-config/spooler.cfg.gz /etc/kopano

gzip -d spooler.cfg.gz

Spooler starten/neu starten:

service kopano-spooler stop

service kopano-spooler start

service kopano-spooler status

Der Status sollte auf: active (running) stehen.

kopano-search

Auch der Kopano-Suchdienst sollte laufen. Wie bereits oben durchgeführt, muss auch hier die Konfigurationsdatei erst in das Verzeichnis /etc/kopano kopiert werden. Die Datei liegt allerdings bereits entpackt im Beispielverzeichnis vor. Abgesehen davon, ist der Kopiervorgang identisch.

Eine entsprechend angepasste search.cfg kann hier heruntergeladen werden.

Auch dieser Dienst sollte als  Status  active (running) aufweisen.

Muss es Postfix sein?

Nein, muss es nicht. Kopano ist vollkommen modular aufgebaut. Dies gilt nicht nur für die Kopanokomponenten, sondern auch für annähernd alle Komponenten, mit denen Kopano interagiert.

Da Postfix aber einfach cool ist, darf es hier auch mitspielen. 😉

Falls Postfix und Postfix-mysql noch nicht am Server installiert wurde, ist dies nachzuholen:

apt-get install postfix postfix-mysql

Die Grundkonfiguration, besteht aus wenigen Schritten:

  • Auswahl von „Internet Site“
  • Angabe des Systemmailnamens. Das ist der Voll qualifizierte Domainname des Mailservers. Also zum Beispiel: mail.it-yourself.at. Mit diesem Namen, gibt sich der Mailserver anderen Mailservern zu erkennen. Hierbei ist es extrem wichtig, dass sowohl A-DNS (forward lookup), DNS-MX (Eintrag wer für die Maildomain der Mailexchanger ist) und Reverse-DNS (reverse DNS Lookup) korrekt konfiguriert wurden.

Kurzer DNS-Exkurs

In der Regel wird es so sein, dass die DNS Einstellungen beim Domainregistrar (dort wo man die Domain registriert hat) durchgeführt werden muss. Hierfür gibt es meistens einen Kundenbereich.

Forward DNS = DNS (A): zb. mail.it-yourself.at -> zeigt auf IP 81.28.243.54

Reverse DNS = PTR: zb. 81.28.243.54 -> zeigt auf mail.it-yourself.at


MX = Welcher Server ist für die Mailzustellung an *@it-yourself.at zuständig = mail.it-yourself.at

Services starten nicht automatisch

Die installierten Services, starten nach der installation nicht automatisch, d.h. nach einem Serverneustart müssen die Services manuell gestartet werden, sofern man den Autostart nicht aktiviert:

systemctl enable kopano-server
systemctl enable kopano-search
systemctl enable kopano-dagent
systemctl enable kopano-spooler

Details zur Posfixkonfiguration

Postfix soll „Final Destination“ für die Emaildomain sein. Ich verwende die Domain it-yourself.at.

Sämtliche Änderungen müssen bitte in der

/etc/postfix/main.cf

vorgenommen werden.

Auskunftssperre für Postfix

Der MTA soll nich all zu viel über sich ausplaudern.

smtpd_banner = $myhostname ESMTP

Virtuelle Domains, Benutzer und Aliase

Die verwendeten Benutzerdaten sollen von Postfix als „virtual“ gehandelt werden. Wir arbeiten nicht mit lokal angelegten Benutzern!

Nicht vergessen: Die Userdaten sollen aus der Kopanodatenbank ausgelesen werden.

Unter Berücksichtigung oben erwähnter Eckdaten, wird  die Postfixkonfiguration angepasst:

virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_maps = mysql:/etc/postfix/mysql-users.cf
virtual_transport = lmtp:[localhost]:2003
virtual_mailbox_domains = it-yourself.at

Danke für den Tipp betreffend [localhost]@Jörg!

virtual_alias_maps: Die Aliasadressen sind in dieser Konfiguraton in einer Datei zu hinterlegen. Die Datei kann so aussehen (/etc/postfix/virtual):

Nachdem die Datei gespeichert wurde, muss sie für Postfix lesbar gemacht werden:

postmap /etc/postfix/virtual

virtual_mailbox_maps: Der Dreh- und Angelpunkt! Hier wird definiert, woher Postfix die Primärmailadresse bezieht.

Der Wert mysql:/etc/postfix/mysql-users.cf verweist auf eine Datei (mysql-users.cf), in der eine MySQL-Abfrage definiert ist, die die Mailadresse aus der Kopanodatenbank ausliest.

Ebenso in der Datei zu hinterlegen, sind die MySQL-Logindaten für die Kopano-MySQL-Datenbank, da sich Postfix sonst nicht mit der Datenbank verbinden und die Abfrage ausführen kann.

user = kopano_usr
password = geheimespasswort
hosts = 127.0.0.1
dbname = kopano_db
query = SELECT value FROM objectproperty where propname = 'emailaddress' and value = '%s';

Der Datei mysql-users.cf sollten aus Sicherheitsgründen die Rechte „600“ gesetzt werden. User und Gruppe auf root setzen!

chmod 600 /etc/postfix/mysql-users.cf
chown root:root /etc/postfix/mysql-users.cf

Danke für den Hinweis @ Heinz!

Was bedeutet %s in der Abfrage?

Dieser Platzhalter wird von Postfix automatisch mit der Empfängeradresse befüllt (mail to:).

Würde eine Email an daniel.gestl@it-yourself.at ergehen, dann erhält Postfix auf die Abfrage eine positive Rückmeldung. (Emailadresse vorhanden -> Die Email wird an den dagent weitergegeben)

Wenn die Abfrage keinen Rückgabewert liefert, wird die Email abgelehnt. (Sinngemäß mit: User unknown in virtual address table)

virtual_transport: Definiert, dass Postix Emails an das LMTP-Port 2003 weitergibt, sofern sie akzeptiert worden sind. D.h. Postfix übergibt die Mails an den dagent von Kopano.

Der dagent ist fähig, die Emails anhand des Benutzernamens, oder der Emailadresse dem entsprechenden Kopanouser zuzuordnen.

virtual_mailbox_domains: Für welche Domains ist der Postfixserver zuständig.

Lokale Zustellung

Keine der Emails sollen lokal zugestellt werden. Deshalb, muss der Wert für mydestination auf localhost stehen.

Die Relayingkonfiguration

Ein sehr relevantes Thema. Nur Kopanobenutzer dürfen über den Server relayen. Entweder kann die Webapp, die Deskapp, oder eine Activesyncanbindung genutzt werden (Outlook, Smartphone). Ein direkter SMTP Versand von einem beliebigen Client ist NICHT möglich!

Anmerkung: Mit Deskapp und Z-Push beschäftige ich mich in Artikel 3 der Serie.

mynetworks = 127.0.0.0/8
smtpd_relay_restrictions = permit_mynetworks, reject_unauth_destination

smtpd_recipient_restrictions (main.cf) Achtung, die  Einrückung ist notwendig!

 smtpd_recipient_restrictions = permit_mynetworks,
                                reject_non_fqdn_recipient,
                                reject_non_fqdn_hostname,
                                reject_invalid_hostname,
                                reject_non_fqdn_recipient,
                                reject_non_fqdn_sender,
                                reject_unauth_pipelining,
                                reject_unverified_recipient

Anmerkung: Mit Deskapp und Z-Push beschäftige ich mich in Artikel 3 der Serie.

Funktionsprüfung

Nach jeder Konfigurationsänderung, müssen die betroffenen Dienste neu gestartet werden.

service postfix restart

Abgesehen davon, ist es immer eine gute Idee, den Status eines neu gestarteten Dienstes zu prüfen.

service postfix status

(Nicht irritieren lassen, hier ist u.a. bereits spamassassin aktiv).

Wichtig ist active (running).

Wir senden eine Email und prüfen die Webapp

Finale – Teil 2: Mit einem beliebigen Mailclient senden wir eine Email an die in  Kopano vorhandene Mailadresse. In meinem Fall ist dies daniel.gestl@it-yourself.at.

Die Email sollte – sofern alles korrekt konfiguriert ist – in der Webapp von Kopano erscheinen. (http://<FQDN oder IP>/webapp)

Perfekt, läuft!

Probleme?

Sofern Probleme auftreten, kann die Logdatei von Postfix überprüft werden.

tail -f /var/log/mail.log

= Echtzeitdarstellung der Logdatei.

Noch ein paar Worte…

Dies ist das Ende von Teil 2 der Kopanoinstallation. In Teil 3 möchte ich mich mit einigen weiteren Modulen von Kopano beschäftigen.

Ebenso ist das Aktivieren des HTTPS-Protokolles ein Thema.

Die Dokumentation

Aufgrund der Vielzahl an Möglichkeiten die diese Groupware bietet, lohnt sich auf jeden Fall ein Blick in die hervorragende Dokumentation.

Hier gehts zu Teil 3…

5 Gedanken zu „Installation: Kopano – der „neue“ Stern am Groupwarehimmel – Teil 2 (MTA Installation)“

  1. Hi Zusammen,

    super how to…jep wirklich…ich habe die ganze Sache auf einem Univention Server laufen und soweit funzt auch alles.
    Ich habe nur ein Problem, wenn ich die Mailkonten der User, die z.T. gmail und co nutzen und andere mit eigener Domain laufen, dass es bei Versenden der Mails Loops gibt.

    Ein Ziel ist, dass die Mails der User auf dem System nicht über extern gehen, zum einen um Trafic zu sparen, ja auch wenn der nichts kostet und zum anderen wegen der schnelleren Zustellung und Datenschutz.

    Any way, soweit funktioniert es mit den gmail und co Adressen nur bei einem User mit einer richtigen Domain und dem Versand an gmail gibt es einen Loop.

    May 12 12:10:08 ucs postfix/smtpd[18153]: connect from localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/smtpd[18153]: 011B263E83A: client=localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/cleanup[18154]: 011B263E83A: message-id=<kcim.59158a00.46e6
    May 12 12:10:09 ucs postfix/qmgr[18119]: 011B263E83A: from=, size=1060, nrcpt=1 (queue active)
    May 12 12:10:09 ucs postfix/smtpd[18153]: disconnect from localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/smtpd[18159]: connect from localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/smtpd[18159]: 8584463E83B: client=localhost[127.0.0.1], orig_queue_id=011B263E83A, orig_client=localhost[127.0.0.
    May 12 12:10:09 ucs postfix/cleanup[18154]: 8584463E83B: message-id=<kcim.59158a00.46e6
    May 12 12:10:09 ucs postfix/qmgr[18119]: 8584463E83B: from=, size=1748, nrcpt=1 (queue active)
    May 12 12:10:09 ucs amavis[17597]: (17597-01) Passed CLEAN {RelayedInternal}, LOCAL [127.0.0.1]:41636 -> , Queue-ID: 011B263E83A, Message-ID: <kcim.59158a00.46e6.055910fa7bMay 12 12:10:08 ucs postfix/smtpd[18153]: connect from localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/smtpd[18153]: 011B263E83A: client=localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/cleanup[18154]: 011B263E83A: message-id=<kcim.59158a00.46e6
    May 12 12:10:09 ucs postfix/qmgr[18119]: 011B263E83A: from=, size=1060, nrcpt=1 (queue active)
    May 12 12:10:09 ucs postfix/smtpd[18153]: disconnect from localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/smtpd[18159]: connect from localhost[127.0.0.1]
    May 12 12:10:09 ucs postfix/smtpd[18159]: 8584463E83B: client=localhost[127.0.0.1], orig_queue_id=011B263E83A, orig_client=localhost[127.0.0.
    May 12 12:10:09 ucs postfix/cleanup[18154]: 8584463E83B: message-id=<kcim.59158a00.46e6
    May 12 12:10:09 ucs postfix/qmgr[18119]: 8584463E83B: from=, size=1748, nrcpt=1 (queue active)
    May 12 12:10:09 ucs amavis[17597]: (17597-01) Passed CLEAN {RelayedInternal}, LOCAL [127.0.0.1]:41636 -> , Queue-ID: 011B263E83A, Message-ID: <kcim.59158a00.46e6.055910fa7b
    May 12 12:10:09 ucs postfix/smtp[18155]: 011B263E83A: to=, relay=127.0.0.1[127.0.0.1]:100
    May 12 12:10:09 ucs postfix/qmgr[18119]: 011B263E83A: removed
    May 12 12:10:10 ucs postfix/smtp[18123]: 8584463E83B: SASL authentication failed; server smtp.gmail.com[74.125.206.109] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mai x126sm4620887wme.12 – gsmtp
    May 12 12:10:10 ucs postfix/smtp[18123]: 8584463E83B: to=, relay=smtp.gmail.com[74.125.20smtp.gmail.com[74.125.206.108] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mai a73sm3279842wrc.58 – gsmtp)
    May 12 12:10:09 ucs postfix/smtp[18155]: 011B263E83A: to=, relay=127.0.0.1[127.0.0.1]:100
    May 12 12:10:09 ucs postfix/qmgr[18119]: 011B263E83A: removed
    May 12 12:10:10 ucs postfix/smtp[18123]: 8584463E83B: SASL authentication failed; server smtp.gmail.com[74.125.206.109] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mai x126sm4620887wme.12 – gsmtp
    May 12 12:10:10 ucs postfix/smtp[18123]: 8584463E83B: to=, relay=smtp.gmail.com[74.125.20smtp.gmail.com[74.125.206.108] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mai a73sm3279842wrc.58 – gsmtp)

    Jemand eine Idee?
    Irgendwie wäre es toll, wenn der dagent merkt, ups dass ist eine interne Mail und erst ganricht den postfix bemüht.
    Denke der kreiert den Loop.

    Gruss Theo

    Antworten
  2. Vielen vielen herzlichen Dank für die ausführliche und umfangreiche Anleitung.
    Sie hat mir nicht nur geholfen, kopano aufzusetzen, sondern auch, postfix ein Stück weit zu verstehen…

    Was ich aber noch vermisse, ist der Sendeweg.
    Wie konfiguriere ich Kopano, damit es über Postfix sendet, und Postfix, dass er an einen definierten Smarthost sendet?

    Beim Sendeversuch über Kopano bleibt das Log des Postfix schweigsam, im Kopano kommt nur „Recipients that failed permanently“

    Vielen Dank nochmal!

    Antworten
    • Nachtrag:
      Habe es jetzt doch gefunden, nochmal alle Dienste neu gestartet, dann hat sich auch der Postfix gemeldet. Allerdings musste ich zu mynetworks noch [::1]/128 hinzufügen, da von dieser localhost-Adresse kopano an postfix herangegangen ist.

      Außerdem habe ich mit dem Switch „relayhost“ meine vorgeschaltete MTA/Sophos UTM angeben können, klappt!

      Antworten

Schreibe einen Kommentar

* Zustimmung zur Datenspeicherung lt. DSGVO

*

Ich bin damit einverstanden