Postfix und Cyrus Imapd

Aus Wiki
Zur Navigation springen Zur Suche springen

Mailserver

Für den Mailserver kommt die gängige Kombination Postfix + Cyrus Imapd zum Einsatz. Postfix ist der sog. MTA (Mail Transport Agent), der sich um die Annahme und den Versand von Mails kümmert. Cyrus Imapd ist, wie der Name schon sagt, ein IAMP Server. Er beherrscht aber auch das weit verbreitete PO3 - Protokoll.

Postfix reicht die erhaltenen Mails an Cyrus weiter, der sie schließlich an die MUA's(Mail User Agents wie Outlook, Thunderbird, Kmail, ...) ausliefert.

Postfix kann mails direkt aus dem Internet annehmen, wenn eine Dynamic DNS-Adresse zur verfügung steht, und der Port 25 im Router an die NSLU weitergeleitet wird.

Alternativ können mails mittels Fetchmail von einem Provider wie z.B. GMX abgerufen werden. Tetchmail übergibt die Mails an Postfix zur weiteren Verarbeitung.

Zur Spamabwehr kann Spamassassin zwischen die Kette Postfix und Cyrus eingeschleust werden. Dieser kann die evtl. Spammails als solche kennzeichnen, die schließlich ein Mailfilter wie Sieve (Teil von Cyrus) in spezielle Unterverzeichnisse einordnen kann.

Vorbereitungen

Im ersten Schritt werden einige nötige Pakete installiert, die für die folgende Mailserver installation nötig sind.

ipkg update
ipkg install perl libdb coreutils cyrus-sasl readline

SASL-konformes Passwort für den bereits beim Unsling-Vorgang angelegten User mail:

/opt/sbin/saslpasswd2 mail

Dem Linux-User "mail" das selbe Passwort vergeben, damit bei laufendem Imap-Server der Zugriff auf die Cyrus-Admin-Konsole klappt:

passwd mail

Bei der Abfrage nach dem Passwort das selbe Passwort (2x) eingeben wie beim Befehl saslpasswd2


Anpassen der Zugriffsrechte für die Datei SASL2

chmod 644 /opt/etc/sasl2

Gruppe maildrop anlegen:

vi /etc/group

Folgenden Eintrag ergänzen:

maildrop:x:69:maildrop


Mailuser (mindestens einen, z.B. Tux) in der Weboberfläche anlegen.


Installation von Postfix und Imapd

Zum Installieren der nötigen Pakete folgenden Befehl eingeben:

ipkg install cyrus-imapd postfix

Hinweis: Der Download und die Installation der Pakete nimmt einige Zeit in Anspruch.


Konfiguration Postfix

Zunächst wird Postfix eingerichtet. Die komplette Konfiguration von Postfix erfolgt mittels main.cf und master.cf, die im Order /opt/etc/postfix abgelegt sind.

Generelle Einstellungen

vi /opt/etc/postfix/main.cf

Folgende Einstellungen vornehmen:

Hinweise:

  • Zum Teil müssen die Einträge auskommentiert werden (Entfernen des # - Zeichens).
  • Die verwendete Domain ist: schiele.homelinux.org
  • der Hostname der NSLU ist nslu
  • mynetworks_style = subnet: Freigabe eines kompletten IP-Subnetzes
  • mynetworks: die ersten 3 Stellen der IP-Adresse der NSLU verwenden. Die Letzte Stelle auf 0 setzten und um /24 ergänzen. Diese Angabe entspricht einem kompletten Subnet. Falls die IP-Adresse der NSLU 192.168.1.77 => mynetworks = 192.168.1.0/24. D.h. alle PC's im Bereich 192.168.1.1 bis 192.168.1.255 haben Zugriff auf die NSLU.
myhostname = nslu.schiele.homelinux.org
mydomain = schiele.homelinux.org
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = subnet
mynetworks = 192.168.1.0/24

Generierung eines Alias-Files:

Aliase sind Namen bzw. Mailadressen, unter denen ein bekannter eingerichteter User ebenfalls erreichbar ist. D.H. Mails ein die Alias-Adresse landen im Posteingang des Nutzers, auf den der Alias verweist. So ist es z.B. empfehlenswert für den User root einen Alias auf einen normalen Benutzer anzulegen.

vi /opt/etc/aliases

Aufbau des Files: Aliasname:tatsächlicher Nutzer

#root: you
root: tux 

Aliasname root und Nutzer Tux evtl anpassen. Es können beliebig viele Aliase eingetragen werden.

Nachdem das File geändert wurde MUSS folgender Befehl ausgeführt werden, um das Alias-File in eine für Postfix kompatible Datenbank zu verwandeln:

/opt/bin/newaliases


Spamabwehr

Viele Spam-Mails können bereits vor der Annahme der Mail durch Postfix aussortiert werden. Spammer verwenden oft Host- und Domainnamen, die nicht einem FQDN (Fully Qualified Domain Name) entsprechen. Postfix kann relativ einfach angewiesen werden, solche mails erst gar nicht anzunehmen. Hier wird nicht beschrieben, wie Spammails aufgrund ihres Inhalts gefiltert werden können. Dies ist Teil der → Spamassassin-Anleitung.

Mail können mit den Parametern:

  1. smtpd_client_restrictions
  2. smtpd_helo_restrictions
  3. smtpd_sender_restrictions
  4. smtpd_recipient_restrictions
  5. smtpd_data_restrictions

gefiltert werden.

  1. smtpd_client_restrictions
    reject_unknown_client
    Verwirft die Anfrage, wenn der Hostname des SMTP-Clients unbekannt ist (die IP-Adresse oder der Hostname des TCP/IP-Clients).
    reject_rbl_client domain.tld
    Verwirft die Anfrage, wenn der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat.
    reject_rhsbl_client domain.tld
    Verwirft die Anfrage, wenn der SMTP-Client einen DNS-Record vom Typ A unter domain.tld hat.
    warn_if_reject
    Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
    check_client_access maptype
    mapname
    Löst die Client-Namen, Client-Adressen und Parent-Domains auf anhand der in maptype:mapname angegebenen Map.
    permit_mynetworks
    Gewährt Zugriff, wenn der Client in $mynetworks zu finden ist.
  2. smtpd_helo_restrictions
    reject_invalid_hostname
    Verwirft den im HELO/EHLO angegebenen Hostnamen, falls dieser eine falsche Syntax hat. Wenn man in einem Netzwerk ist und man will, dass die Maschinen, die auch im Netzwerk sind, Emails über unseren MTA verschicken wollen, dann ist es sinnvoll, diese Beschränkung erst nach permit_mynetworks anzugeben (wie ich schon gesagt habe, die Reihenfolge ist sehr wichtig), sonst wird er vom MTA verworfen oder zurückgewiesen.
    reject_unknown_hostname
    Verwirft den im HELO/EHLO angegebenen Hostnamen, welcher keinen DNS Rekord vom Typ A oder MX hat. Hier ist es auch sinnvoll permit_mynetworks zuerst anzugeben, wenn man ein Relay-MTA für das innere Netzwerk ist.
    reject_non_fqdn_hostname
    Verwirft den im HELO/EHLO angegebenen Hostnamen, wenn dieser nicht in FQDN-Form ist. Was bedeutet FQDN? Full Qualified Domain Name. Dafür ein Beispiel: www.chains.ch ist ein FQDN.
    warn_if_reject
    Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
    check_helo_access
    Löst den im HELO/EHLO angegebenen Hostnamen oder die Parent-Domain auf.
    permit_mynetworks
    Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
  3. smtpd_sender_restrictions
    reject_unknown_sender_domain
    Verwirft die Sender-Domain, wenn diese keinen DNS-Record vom Typ A oder MX hat.
    reject_non_fqdn_sender
    Verwirft die Sender-Domain, wenn diese nicht in FQDN-Form ist.
    reject_rhsbl_sender domain.tld
    Verwirft die Anfrage, wenn der Sender einen DNS-Record vom Typ A unter domain.tld hat.
    reject_sender_login_mismatch
    Verwirft, wenn $smtpd_sender_login_maps für eine MAIL FROM- Adresse einen Besitzer spezifiziert, aber der sich nicht mit SASL authentifiziert hat; verwirft, wenn der Sender sich authentifiziert hat, aber die MAIL FROM-Adresse nicht mit dem Sender übereinstimmt.
    warn_if_reject
    Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
    check_sender_access maptype
    mapname
    Löst die Sender-Adresse, Parent-Domain oder localpart@ auf.
    check_sender_mx_access maptype
    mapname
    Löst den DNS-Record vom Typ MX des Senders auf.
    permit_mynetworks
    Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
  4. smtpd_recipient_restrictions
    reject_unknown_recipient_domain
    Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers keinen DNS-Record vom Typ A oder MX hat.
    reject_non_fqdn_recipient
    Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers nicht in FQDN-Form ist.
    reject_rhsbl_recipient domain.tld
    Verwirft die Anfrage, wenn der Empfänger einen DNS-Record vom Typ A unter domain.tld hat.
    reject_unauth_pipelining
    Verwirft die Anfrage, wenn man nicht korrekte Pipelines macht.
    reject_unauth_destination
    Verwirft das Absenden von Emails:
    • zu Zielmaschinen, die nicht unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind.
    • zu Zielmaschinen, die nicht unter $relay_domains oder in deren Subdomains zu finden sind (ausser Sender-spezifisches Routing).
    warn_if_reject
    Schreibt ein WARN ins Logfile und stellt die Nachricht zu, anstatt die Nachricht zu verwerfen.
    check_recipient_access maptype
    mapname
    Löst die Empfänger-Adresse, Parent-Domain oder localpart@ auf.
    check_recipient_mx_access maptype
    mapname
    Löst den DNS-Record vom Typ MX des Empfängers auf.
    permit_auth_destination
    Erlaubt das Absenden von Emails:
    • zu Zielmaschinen, die unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind.
    • zu Zielmaschinen, die unter $relay_domains oder in deren Subdomains zu finden sind (außer Sender-spezifisches Routing).
    permit_mx_backup
    Erlaubt das Empfangen von Emails für Seiten, die mich als MX Host auflisten.
    permit_mynetworks
    Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
  5. smtpd_data_restrictions
    reject_unauth_pipelining
    Verwirft die Anfrage, wenn man nicht korrekte Pipelines macht.

Anpassen der Konfigurationsdatei main.cf:

vi /opt/etc/postfix/main.cf

Gute Erfahrungen wurden mit folgenden Einstellungen gesammelt (Diese evtl am Ende von main.cf anhängen):

smtpd_client_restrictions = permit_mynetworks, reject_unknown_client
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient

Einstellungen Relay-Server

Falls die NSLU mails an externe Mailadressen verschicken soll, dann ist es ratsam, den SMTP-Server eines Providers als sog. Ralay zu verwenden. Postfix ist zwar selber in der Lage mails direkt an andere Mailserver zu verschicken, diese landen dann aber sehr häufig im Spamfilter. Spammer verwenden meist diese Möglichkeit, um "unerkannt" Massenmails zu verschicken. Daher geraten leider alle Mailserver mit variabler IP-Adresse unter Generalverdacht Spammer zu sein. Wenn stattdessen ein Mail-Relay verwendet wird, verbindet sich Postfix mit dem SMTP-Server des Providers, meldet sich dort mit Username und Passwort an und übergit diesem die Mail. Postfix verhält sich also analog wie ein Mailprogramm, bei dem der SMTP-Server des Providers eingetragen ist.

Um einen Relay-Server zu verwenden, müssen noch folgende Angaben in der main.cf gemacht werden (ansonsten kann dieses Kapitel'chen komplett übersprungen werden):

vi /opt/etc/postfix/main.cf

Hinweis: Relayserver in [] einschließen

relayhost = [SMTP des Providers] z.B. [smtp.test.de]
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/opt/etc/postfix/sasl_passwd
smtp_always_send_ehlo = yes


Erstellen des Files /opt/etc/postfix/sasl_passwd, das User und Passwort für den Relayserver enthält:

vi /opt/etc/postfix/sasl_passwd

Zeile mit folgendem Aufbau einfügen:

ACTUNG: Relay-Server nicht in [] setzen im Gegensatz zum Eintrag in der main.cf (siehe oben)

Relay-Server Benutzername:Passwort
z.B.
smtp.test.de mustermann@test.de:mustermann_Passwort

Passwortfile vor neugierigen Blicken schützen:

chmod 600 /opt/etc/postfix/sasl_passwd

Folgenden Befehl eingeben, um das Passwortfile in ein Datenbankformat (sasl_passwd.db)zu konvertieren:

postmap hash:/opt/etc/postfix/sasl_passwd


Konfiguration Cyrus Imapd

Konfiguartion:

vi /opt/etc/imap.conf

Folgende Einstellungen vornehmen, damit nur Klartext-Passwörter akzeptiert werden:

sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN LOGIN

Cyrus Imap Server starten:

/opt/etc/init.d/S59cyrus-imapd restart

Anlegen der IMAP-User Mailboxen:

/opt/bin/cyradm --user mail localhost

Passwort des Users mail eingeben (wie im Kapitel Vorbereitungen definiert). Nach erfolgreichem Login befindet man sich in der Cyrus Adminoberfläche.

Folgende cm Befehle (create Mailbox) eingeben (Tux durch realen Mailuser, wie unter Vorbereitungen angelegt, ersetzen)

cm user.tux
cm user.tux.Drafts
cm user.tux.Outbox
cm user.tux.Sent
cm user.tux.Trash

cm-Befehle für alle anzulegenden Benutzermailboxen widerholen. Mit dem Befehl lm können alle definierten Mailboxen angezeigt werden.

lm

Die Adminoberfläche mit folgenden Befehlen verlassen:

quit


Löschen von IMAP-User Mailboxen:

Nur der Vollständigkeit halber soll hier auch das Löschen von Mailboxen bzw. Unterordnern erläutert werden. Dies ist leider nicht ganz so einfach wie das Anlegen von Usern und Unterverzeichnissen.

/opt/bin/cyradm --user mail localhost

Passwort des Users mail eingeben (wie im Kapitel Vorbereitungen definiert). Nach erfolgreichem Login befindet man sich in der Cyrus Adminoberfläche.

Zunächst muss dem User 'mail' das Recht eingeräumt werden, die zu löschende Mailboxen bzw. Unterverzeichnis zu löschen. Dies ist aus Sicherheitsgründen standardmäßig deaktiviert. Hier soll exemplarisch das Löschen einer Usermailbox "Mailbox" und eines Unterordners "Test" in der Mailbox "Mailbox2" demonstriert werden. (Achtung: auf Groß/Kleinschreibung achten).

sam user.Mailbox mail all

Damit bekommt der User "mail" sämtliche Rechte (incl. löschen) an der Mailbox "Mailbox" zugewiesen. Der folgende Befehl löscht die Usermailbox schließlich:

dm user.Mailbox

Nun das Löschen des Unterordners "Mailbox2/Test"

sam user.Mailbox2.Test mail all
dm user.Mailbox2.Test

Die Adminoberfläche mit folgenden Befehlen verlassen:

quit

Test von Postfix und Cyrus Imapd

Hinweis: Es ist ratsam für die folgenden Tests ein weiteres Putty-Fenster mit Verbindung zur NSLU zu öffnen und permanent die Logging-Ausgaben zu beobachten, um im Falle eines Fehlers entsprechende Fehler einzukreisen:

tail -f /var/log/messages 


Postfix neu starten, um sämtliche durchgeführte Änderungen bekannt zu geben:

/opt/etc/init.d/S69postfix stop
/opt/etc/init.d/S69postfix start

Zunächst wird mittels Telnet geprüft, ob Postfix in der Lage ist, mails intern zu versenden. Anschließend wird Cyrus mit einem Mailprogramm überprüft.

Am PC eine Telnet-Verbindung zum Mailserver aufbauen

telnet IP_der_NSLU 25

oder alternativ mit Putty:

Protokoll=Telnet
Port=25
Hostname=IP_der_NSLU

Hinweis:

  • Im folgenden Abschnitt sind sowohl Ausgaben von Postfix, als auch notwendige Eingaben im Telnet hintereinander dargestellt. Eingaben sind mit einem ">" zu Beginn versehen.
  • mydomain durch die Domäne wie in der main.cf definiert ersetzen.
  • tux durch tatsächlich angelegten Benutzer ersetzen
220 nslu.mydomain ESMTP Postfix
>ehlo mydomain
250-nslu.mydomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-8BITMIME
250 DSN
>mail from: root@mydomain
250 Ok
>rcpt to: tux@mydomain
250 Ok
>data
354 End data with <CR><LF>.<CR><LF>
>SUBJECT: Test 1
>Testmail
>.
>
250 Ok: queued as 6DA50EAAC
>quit
221 Bye
Connection to host lost.


Email-Programm starten und ein neues Konto anlegen. Einstellungen:

email-adresse: user@provider (z.B. test@gmx.de)
Protokoll: Imap
Posteingangsserver: IP_der_NSLU
Postausgangsserver: SMTP-Server des Providers
Benutzername (Posteingang): Tux
Benutzername (Postausgang): Benutzername des Providers
  • Fall 2: "vollwertiger" Mailserver, der Mails direkt in Empfang nimmt und mittels Relay absendet:
email-adresse: tux@domain
Protokoll: Imap
Posteingangsserver: IP_der_NSLU
Postausgangsserver: IP_der_NSLU
Benutzername (Posteingang): Tux
Benutzername (Postausgang): Tux

Nach Eingabe des Passwortes darf keine Fehlermeldung erscheinen. Wenn alles geklappt hat, sollte sich im Posteingang die Mail aus obigem Postfix Test befinden.


Erweiterungen der Funktionalität des Mailservers: