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.
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
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!
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!
Hallo Christoph,
vielen Dank für die Rückmeldung.
Das hast du ja selbst lösen können.
Sobald der MTA auf Port 25 lauscht, sollte er sich auch melden bzw. die Mail versenden.