Debian 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 den Server 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.

Installation von Postfix und Cyrus

apt-get install cyrus-common-2.2 cyrus-imapd-2.2 cyrus-admin-2.2 libsasl2-2 sasl2-bin libsasl2-modules postfix procmail

Nach dem Download der Pakete läuft ein automatisches Konfigurationsscript ab, das bereits einige Einstellungen für postfix vornimmt:

  • Erstes Menü mit Enter-Taste (OK) bestätigen
  • Mit Cursor-Tasten die Option Internet mit Smarthost auswählen und mit Enter bestätigen
  • System-Email-Name mit Enter-Taste bestätigen bzw. bei Bedarf abändern
  • SMTP-Relay-Server eintragen: z.B. smtp.provider.de und mit Enter bestätigen


Konfiguration von SASLAuthD

Für die AUthorisierung von Nutzern wird sowohl für Postfix, als auch für Cyrus der SASLAuthD - Daemon verwendet.


Konfiguration von Postfix

Zentrales Konfigurationsfile von Postfix ist /etc/postfix/main.cf.

vi /etc/postfix/main.cf

Generelle Optionen

Die Maildomain muß zum Eintrag mydestination hinzugefügt werden. Der Hostname wurde bereits vom Konfig-Script (siehe oben) eingetragen. Z.B.

mydestination: debian.domain.org, localhost.domain.org, localhost

muß erweitert werden zu:

mydestination: debian.domain.org, domain.org, localhost.domain.org, localhost

dies ist erforderlich, damit Postfix mails annimmt, die an z.B. root@domain.org adressiert sind. Ansonsten würde er nur solche annehmen, die an root@debian.domain.org adressiert sind.

Folgende Optionen einfügen:

smtp_always_send_ehlo = yes
mailbox_transport = cyrus

SASL-Optionen

Folgende Optionen einfügen:

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = yes

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 → AmavisD/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.


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

smtpd_client_restrictions = permit_mynetworks permit_inet_interfaces reject_unknown_reverse_client_hostname
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_non_fqdn_recipient
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender
smtpd_data_restrictions = reject_unauth_pipelining

Aliases

Konfiguration von Cyrus