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

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.

In der Standardkonfiguration, verwendet dagent den Port 2003 und wartet auf einen Verbindungsaufbau.

Die Konfiguration von dagent, kann in der Datei:

/etc/kopano/dagent.cfg

angepasst werden. Will man die Standardkonfiguration übernehmen, ist in dieser Datei jedoch nichts zu tun.

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. 😉

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

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‘;

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):

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…

Installation Postfix Debian Lenny

Wie die Überschrift schon sagt, beschäftige ich mich hier mit der Installation von Postfix in Verbindung mit Dovecot + Verschlüsselung inklusive SMTP Virusscan per ClamAV. Nachdem dies meine erste Postfixkonfiguration für eine Produktivumgebung sein soll, versuche ich, mein Bestes zu geben bzw. die im Internet zu findenden Informationen hier in etwas komprimierterer Form -hoffentlich verständlich- wieder zu geben. Wichtig ist jedoch auch, dass ich keine Garantie betreffend die Sytemsicherheit dieser Konfiguration geben kann!

Quellen

Postfix Konfiguration:
http://holl.co.at/howto-email/#a1

ClamAV Einbindung:
http://www.debian-administration.org/articles/259

Wie immer tolle Unterstützung durch:
www.debianforum.de

Postfix, Dovecot, ClamAV installieren

Postfix wird unser SMTP Server. Dovecot verwenden wir als POP-Server, um den Anwendern den Mailabruf per POP3 zu ermöglichen und ClamAV soll Viren abwürgen:

Wie zumeist auf einem Server befinden wir uns in einer Konsole und haben für die Installation natürlich root-Rechte bzw. sind wir als root eingeloggt:

  • apt-get install postfix dovecot-pop3d
  • gefolgt von RETURN

Für ClamAV müssen wir nun einen Blick in die sources.list werfen (diese liegt im Verzeichnis /etc/apt) und nachschauen, ob folgende Zeile enthalten und auch NICHT auskommentiert ist:

  • deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

Wenn nicht vorhanden, bitte ergänzen. Wenn auskommentiert, bitte # davor entfernen. Der Grund für diese Aktion ist, dass wir nur so zu einer aktuellen Version von ClamAV kommen!

Wieder als root in einer Konsole:

  • apt-get update
  • apt-get install clamsmtp clamav-freshclam
  • und wieder Return
  • freshclam
  • Return

ClamAV Konfiguration

Wir öffnen /etc/clamsmtpd.conf um folgende Änderungen an der Datei vorzunehmen:

  • OutAddress von 10025 auf 10026
  • Listen von 127.0.0.1:10026 auf Listen: 127.0.0.1:10025

Openssl installieren

Um ein entsprechendes Zertifikat für die verschlüsselte Verbindung zu erstellen, benötigen wir openssl. Falls es noch nicht installiert ist müssen wir es mit:

  • apt-get install openssl
  • +Return

installieren.

Danach erstellen wir mit Hilfe folgender Befehle die nötigen Zertifikate. Optimalerweise befinden wir uns im Verzeichnis /etc/postfix, damit die Zertifikate auch gleich dort abgelegt werden und wir unten stehender Konfiguration (TLS Parameters) entsprechen:

  • openssl genrsa -out mail.key 2048
  • openssl req -new -key mail.key -out mail.csr (WICHTIG: Die Frage nach dem CN (Common Name) der FQDN unseres Mailserver eingetragen wird mail.meinedomain.at sonst meckert Thunderbird, Outlook etc. bei jeder Kontaktaufnahme mit dem Mailserver, dass es Probleme mit dem Zertifikat gibt
  • openssl x509 -req -days 4312 -in mail.csr -out mail.cert -signkey mail.key
  • danach kann man die mail.csr löschen und es sollten mail.cert und mail.key im Verzeichnis /etc/postfix liegen

Postfix Konfiguration (main.cf)

Die Datei main.cf ist die Postfixkonfigurationsdatei. Diese findet man im Verzeichnis /etc/postfix. Da ich immer vim verwende, um Konfigurationsdateien zu bearbeiten greife ich auch diesmal darauf zurück.

Die main.cf sieht in meinem Fall so aus, wobei einige Einträge (FETT geschrieben) euren Gegebenheiten angepasst werden müssen:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP
smtp_helo_required = yes

smtpd_recipient_restrictions = reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
#smtpd_sender_restrictions = reject_unknown_address
#strict_rfc821_envelopes = yes

biff = no

# appending .domain is the MUA’s job.
append_dot_mydomain = no

# Uncomment the next line to generate „delayed mail“ warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
#die ersten 2 Parameter setzen voraus, dass unter /etc/postfix ein Zertifikat mail.cert mail.key abgelegt / erstellt worden ist!
smtpd_tls_cert_file=/etc/postfix/mail.cert
smtpd_tls_key_file=/etc/postfix/mail.key
smtpd_use_tls=yes
smtpd_enforce_tls = no
smtpd_tls_auth_only = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = mail.meinedomain.at
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = meinedomain.at
mydestination = mail.meinedomain.at, meinedomain.at
relayhost =

#mynetworks gibt an, welche Rechner über unseren Mailserver Mails senden düften. Es ist sehr wichtig, diesen Parameter korrekt zu konfigurieren.

#Es kann auch nur das interne Netz hier stehen bleiben und 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mynetworks = 192.168.1.0/24 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
10.0.0.1,
10.0.0.2,
10.0.0.3

#Die nächste Zeile ist auskommentiert, da wir nicht procmail zur Mailboxzustellung verwenden, sondern dovecot
#mailbox_command = procmail -a „$EXTENSION“

mailbox_size_limit = 50000000
message_size_limit = 10240000
#Emails werden im jeweiligen Homeverzeichnis abgelegt. Der Unterordner wird mit folgendem Parameter angegeben
home_mailbox = mails/

recipient_delimiter = +
inet_interfaces = all

#Die folgenden 2 Zeilen betreffen clamav und den Smtpscan und beziehen sich auf die Änderung, bei ClamAV (oben)
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

master.cf

Die master.cf, die unter /etc/postfix/master.cf liegt, muss normalerweise bei einer Standardkonfiguration ohne Scan oder sonstige Filter nicht geändert werden. Da wir aber ClamAV als SMTP Scanner einsetzen, müssen wir am Ende der master.cf folgenden Block einfügen:
# AV scan filter
scan      unix  –        –       n      –       16     smtp
-o smtpd_send_xforward_command=yes

# Mail zurueck an Postfix
127.0.0.1:10026 inet  n –     n    –             16    smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

Dovecot Konfiguration

Auch Dovecot muss noch konfiguriert werden. Die hierfür nötige Datei finden wir unter /etc/dovecot/dovecot.conf. Die Datei ist aufgrund der vielen Kommentare sehr umfangreich. Beim teilweisen ergänzen der Parameter muss man genau darauf achten, dass die geschwungenen Klammern richtig geöffnet und geschlossen werden, da es sonst zu Fehlern kommt!

Folgende Anpassungen müssten noch gemacht werden. (Achtung! Vieles steht schon in der Datei, ist aber auskommentiert – genau schauen / Suchfunktion des Editor nutzen):

#Wir haben hier nur pop3 und pop3s da ich imap nicht nutze
protocols = pop3 pop3s

ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem
disable_plaintext_auth = yes
mail_location = maildir:%h/mails

Bei den folgenden Anpassungen habe ich ewig lange nach einem Fehler gesucht, da ich eine  } – Klammer zuviel hatte. Vorsicht!

auth default {

mechanisms = plain

userdb passwd {

}

passdb shadow {

}

user = root

socket listen {

client {

path = /var/spool/postfix/private/auth

mode = 0660

user = postfix

group = postfix

}

}

}

Postfächer anlegen

Postfix soll in dieser Konfiguration lokale Benutzerkonten verwenden. Als Ablage für eingehende Emails werden die Homeverzeichnisse der jeweiligen Benutzer verwendet. Es liegt also nahe, dass wir nun Benutzer anlegen müssen.

  • useradd -m -s /bin/false mustermann
  • gefolgt von RETURN
  • passwd mustermann
  • Passwörter setzen

Wir sollten jetzt eigentlich eine Usermailbox besitzen, die mit musterman@meinedomain.at angesprochen werden kann. Abseits dessen sollte im Verzeichnis /home nun mustermann vorzufinden sein.

Damit man nun schöner klingende Mailadressen (vorname.nachname@…) erstellen kann bedienen wir uns der Datei /etc/aliases, die wir mit einem Texteditor bearbeiten. Hier können Aliasnamen für bereits angelegte Benutzernamen vergeben werden. In unserem Beispiel erreichen wir mit dem Eintrag:

  • max.mustermann: mustermann
  • dem Speichern der Datei
  • und dem ausführen von newaliases
  • gefolgt von RETURN

dass man nun auch an max.mustermann@meinedomain.at mailen kann und der Benutzer Mustermann die Email bekommt.

Was macht der Befehl newaliases? Er liest quasi die Datei /etc/aliases neu ein und bereitet die Daten für Postfix auf, damit diese dann auch vom Mailserver verwendet werden können.

So kann man zum Beispiel auch Mailinglisten einrichten.

rundmail: user1, user2, user3, …

Schickt man nun, nach speichern und ausführen von newaliases an rundmail@meinedomain.at eine Email, bekommen es alle User, die nach dem Doppelpunkt angeführt worden sind.

So, das wars fürs Erste. Ich hoffe, dass es auch bei euch klappt.

Für die genauere Beschreibung der einzelnen Parameter verweise ich nochmals auf die sehr klare Doku unter:  http://holl.co.at/howto-email/#a1.

Experimente mit Postfix Teil 1

Vorwort

Zu meiner Schande muss ich gleich mal festhalten, dass ich bislang noch nie dazu gekommen bin, mich mit Postfix auseinander zu setzen. Immerwiede hab ich angefangen, diesen funktionellen und sicheren Server (Dienst) zu installieren und dann ist mir -wie sooft- die Zeit davon gelaufen.

Natürlich befinde ich mich ausschließlich in einer Testumgebung! Es wäre unverantwortlich, würde ich meine zaghaften Versuche, mit dem noch unbekannten Wesen „postfix“, quasi „in the wild“ vom Zaun brechen.

Mein Begleiter

Ich begebe mich nicht ganz ohne „Begleitschutz“ auf diese Reise. Nein! Das Buch „Linux-Server mit Debian GNU/Linux“ (ein meiner Meinung nach ausgezeichnetes Werk) begleitet mich. Deshab schildere ich hier, basierend auf den Schritten im Buch, meine Höhenflüge und wahrscheinlich auch Abstürze. 🙂

Zielsetzung

Was will ich überhaupt fürs erste erreichen? Ich will, dass lokale User von meiner fiktiven Domain linux.local Emails per SMTP an ebenso lokal verwaltete User schicken können. HIerfür kommt das SMTP Protokoll zum Einsatz. Desweiteren sollen die User die gesendeten Emails per POP-Postfach abrufen können. Naja, jeder fängt mal klein an!

Los gehts!

Postfix zu installieren, stellt mich vor kein großes Problem:

  • apt-get install postfix (Return)

Die Konfigurationsdateien findet man im Verzeichnis /etc/postfix. Postfix hat grundsätzlich 2 „Konfigurationsdateien“:

  • main.cf
  • master.cf

Die main.cf beinhaltet sämtliche Konfigurationsparameter, die master.cf definiert die Transportwege und einige sehr wichtige andere Parameter.

Erster Anlaufpunkt ist die Datei main.cf!

main.cf

Sieht bei mir wie folgend aus. (Ich habe ausschließlich die fett geschriebenen „Variablen“ angepasst).

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# appending .domain is the MUA’s job.
append_dot_mydomain = no

# Uncomment the next line to generate „delayed mail“ warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = linux.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = linux.local,
localhost

relayhost =
mynetworks = 127.0.0.0/8 192.168.1.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = 127.0.0.1 192.168.1.235
default_transport = error
relay_transport = error

2 User / Mailboxen „bauen“

  • useradd -m dummy1 -s /bin/false
  • useradd -m dummy2 -s /bin/false
  • Passwörter setzen mit: passwd dummy1 bzw. passwd dummy2

Diese Kommandos sind als root auszuführen. Der Parameter -s mit Wert /bin/false weist den Usern keine Loginshell zu, denn direkt am System, haben diese User nichts zu suchen.

Die User haben nun also folgende Mailadressen:

  • dummy1@linux.localhost
  • dummy2@linux.localhost

An diese Adressen gesendete Emails sollten in /var/mail/<Benutzername> landen.

Test mit einem Emailclient

Laut den erstellten Daten (oben) erfolgt die Clientkonfiguration:

postfix_test_smtp

Ich hab hier auch die POP Daten angegeben, jedoch läuft noch kein POP-Dienst, weshalb (logischerweise) ein POP Abruf zu einem Fehler führt. Dennoch sollte SMTP Versand funktionieren. Zu diesem Zwecke schick ich mir selbst (dummy1@linux.local) eine Email.

Check per Konsole

  • cd /var/mail
  • ls

Wir haben an dummy1@linux.local gemailt. Siehe da! Es gibt eine Textdatei mit Namen „dummy1“. Was wird da wohl drinnen sein:

dummy1

Bingo! Meine Email ist angekommen!

Einfacher POP Abruf

Für den Anfang teste ich „qpopper“, den man mittels:

  • apt-get install qpopper

installiert.

Das gute daran, das „Programm“ benötigt keinerlei Konfiguration, um zu funktionieren! Die Benutzerdaten sind beim Mailclient hinterlegt (Es sei nochmals festgehalten, dass als Passwort das Passwort des jeweils angelegten User verwendet wird!)

Der erste Versuch eine Abrufes scheitert… Keine Verbindung zum POP-Server… Die Fehlersuche bleibt erfolglos. Schließlich komme ich auf die Idee, Postfix zu restarten:

  • /etc/init.d/postfix restart

Erneuter Abrufversuch… Erfolg!

POP_Abruf

Anmerkung: In diesem Tutorial (besser gesagt Experiment) werden u.a. Plain-Text (Klartext) Passworter zur Authentifizierung verwendet. Für einen Produktiveinsatz ist diese Konfiguration nicht geeignet!