Hetzner - DokuWiki

DebianMailserver

Inhaltsverzeichnis

Debian woody Mailserver mit Cyrus IMAPd, Postfix MTA, Spamassassin, ...

Welche Features hat die Installation

IMAP Mail Server mit Unterstützung für:

  * IMAP mit TLS und SSL Unterstützung
  * SMTP mit PLAIN und LOGIN Authentication, unverschlüsselt oder mit TLS
  * Virtual Hosts
  * Quotas pro Virtual Host und Mail Account
  * Mail User unabhängig von System User
  * Spamfilter
  * Virusscanner
  * Webmail Interface
  * Serverseitige Filter zum sortieren der Nachrichten, über  Web-Frontend
von jedem Benutzer selbst zu verwalten * Administration über Web-Frontend (leider nur teilweise...)

Packages

Neue Einträge in /etc/apt/sources.list

Die Cyrus Packages in der woody Distribution sind leider schon etwas veraltet, aber der Maintainer der aktuellen Version in sarge und sid stellt Backports für woody bereit. Mit

# Mailserver
deb http://people.debian.org/~hmh/woody/ hmh/amavisd-new/
deb http://people.debian.org/~hmh/woody/ hmh/cyrus/
deb http://people.debian.org/~hmh/woody/ hmh/postfix/
deb http://people.debian.org/~hmh/woody/ hmh/squirrelmail/
deb http://people.debian.org/~hmh/woody/ hmh/misc/
deb http://people.debian.org/~aurel32/BACKPORTS stable main

in /etc/apt/sources.list bekommt man die aktuellen Packages von

 * Cyrus als IMAP Server
 * Postfix als MTA
 * Squirrelmail als webbasierter MUA mit Unterstützung für SIEVE
 * Amavis als Schnittstelle zwischen Postfix und Virusscanner, Spamfilter, ... Software
 * Spamassassin als Spamfilter
 * Clamav als Virusscanner
 * Diverse Hilfspackages, einschließlich libnet-perl >= 1.12 (für das Amavis Paket)

apt-get

 apt-get update
 apt-get install clamav amavisd-new cyrus21-admin cyrus21-clients 
   cyrus21-imapd postfix postfix-mysql postfix-tls squirrelmail 
   spamassassin mysql-server libpam-mysql php4-mysql php4-pear apache

Basis-Konfiguration

Einfach den Anweisungen von http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/ (cache) folgen, mit folgenden Besonderheiten:

  • Kapitel 3: bis auf "3.8. Getting and installing Web-cyradm" ist schon alles dank apt-get installiert. Also in Kapitel 3 nur den Anweisungen aus 3.8 folgen.
  • Kapitel 4: "4.1. Securing MySQL": /etc/init.d/mysql.server ist /etc/init.d/mysql, Zeile 42 ändern in:

/usr/bin/safe_mysqld --bind-address=127.0.0.1 > /dev/null 2>&1 &

  • Kapitel 4: "4.2. Setting up rinetd" nur bei Bedarf folgen (im zweifelsfalle nicht)
  • Kapitel 4: "4.3. Create the databases and tables": allen Anweisungen folgen
  • Kapitel 5: Wie im HowTo? beschrieben allen Anweisungen folgen
  • Kapitel 6: Wie im HowTo? beschrieben allen Anweisungen folgen, bis auf:
  • Kapitel 6: "SMTP Authentication with SASL and PAM": angegebene Konfiguration mit saslauthd funktioniert (bei mir?) nicht (Fehlermeldung:postfix/smtpd[19528]: warning: SASL authentication problem: unrecognized plaintext verifier saslauthd) , Alternative wie folgt:

zu /etc/postfix/main.cf folgendes hinzufügen:

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,
reject_unauth_destination smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname broken_sasl_auth_clients = yes

Datei /etc/postfix/sasl/smtpd.conf mit folgendem Inhalt:

pwcheck_method: pam

Da Postfix in einer chroot Umgebung unter /var/spool/postfix läuft müssen jetzt die benötigten Dateien für PAM mit MySQL mit Hardlinks in dieser Umgebung sichtbar gemacht werden:

     o ln /etc/pam.conf /var/spool/postfix/etc/
     o mkdir -p /var/spool/postfix/etc/pam.d
     o ln /etc/pam.d/smtp /var/spool/postfix/etc/pam.d/
     o mkdir -p /var/spool/postfix/lib/security
     o ln /lib/security/pam_mysql.so /var/spool/postfix/lib/security/

pam_mysql verbindet sich über einen Socket mit MySQL, der Socket befindet sich jedoch auch außerhalb der chroot Umgebung von Postfix. Daher sind folgenden Schritte notwendig:

     o mkdir -p /var/spool/postfix/var/run/mysqld
     o chown mysql /var/spool/postfix/var/run/mysqld
     o /etc/init.d/mysql stop
     o /etc/mysql/my.cnf: im Abschnitt unter [mysqld]:
        25 #socket = /var/run/mysqld/mysqld.sock
        26 socket  = /var/spool/postfix/var/run/mysqld/mysqld.sock
     o ln -s /var/spool/postfix/var/run/mysqld/mysqld.sock /var/run/mysqld/
     o /etc/init.d/mysql start

Jetzt sollte SMTP Authentication funktionieren (ohne Verschlüsselung und mit der Anmelde-Methode? PLAIN oder LOGIN). Wie man es testet steht bspw. unter http://www.enc.com.au/csmall/myscripts/postfixmysql.html (cache).

Will man Verschlüsselung benutzen sind noch folgende Schritte notwendig (siehe auch http://postfix.state-of-mind.de/patrick.koetter/smtpauth/configuration/tls.html (cache)):

 o  Zertifikate erstellen, dazu siehe Kapitel 7.1.3.
 o  Sind der Private Key (/etc/ssl/certs/secure.example.com_private.key), 

das Zertifikat (/etc/ssl/certs/secure.example.com.crt) und die Certificate Authority Datei (/etc/ssl/certs/ca.txt) angelegt, muss noch folgendes in /etc/postfix/main.cf ergänzt werden:

 smtpd_use_tls = yes
 smtpd_tls_auth_only = yes # auskommentieren, falls auch unverschlüsselte 
Authentifizierung erlaubt sein soll smtpd_tls_key_file = /etc/ssl/certs/example.com_private.key smtpd_tls_cert_file = /etc/ssl/certs/example.com.crt smtpd_tls_CAfile = /etc/ssl/certs/ca.txt smtpd_tls_loglevel = 3 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom
 o  jetzt einfach postfix neu starten (/etc/init.d/postfix restart) und schon lässt sich TLS 
als Verschlüsselung verwenden.
  • Kapitel 7: Allen Anweisungen folgen mit folgenden Ausnahmen: Verzeichnisse sind bereits (an etwas anderer Stelle) angelegt, hier die /etc/cyrus.conf und die /etc/imapd.conf:
 /etc/cyrus.conf:
 1 START {
 2         recover         cmd="/usr/sbin/ctl_cyrusdb -r"
 3         delprune        cmd="/usr/sbin/ctl_deliver -E 3"
 4         tlsprune        cmd="/usr/sbin/tls_prune"
 5 }
 6 SERVICES {
 7         imap            cmd="imapd -U 30" listen="imap" prefork=0 maxchild=100
 8         imaps           cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100
 9         lmtpunix        cmd="lmtpd" listen="/var/run/cyrus/socket/lmtp" prefork=0 maxchild=20
10         sieve           cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=100
11         notify          cmd="notifyd" listen="/var/run/cyrus/socket/notify" proto="udp" prefork=1
12 }
13 EVENTS {
14         checkpoint      cmd="/usr/sbin/ctl_cyrusdb -c" period=30
15         delprune        cmd="/usr/sbin/ctl_deliver -E 3" at=0401
16         tlsprune        cmd="/usr/sbin/tls_prune" at=0401
17 }


/etc/imapd.conf
 1 configdirectory: /var/lib/cyrus
 2 defaultpartition: default
 3 partition-default: /var/spool/cyrus/mail
 4 partition-news: /var/spool/cyrus/news
 5 newsspool: /var/spool/news
 6 altnamespace: no
 7 unixhierarchysep: yes
 8 admins: cyrus
 9 allowanonymouslogin: no
10 popminpoll: 1
11 autocreatequota: 0
12 umask: 077
13 sendmail: /usr/sbin/sendmail
14 sieveusehomedir: false
15 sievedir: /var/spool/sieve
16 hashimapspool: true
17 allowplaintext: yes
18 sasl_mech_list: PLAIN
19 sasl_pwcheck_method: saslauthd
20 sasl_auto_transition: no
21 tls_ca_file: /etc/ssl/certs/ca.txt
22 tls_cert_file: /etc/ssl/certs/example.com.crt
23 tls_key_file: /etc/ssl/certs/example.com_private.key
24 tls_ca_path: /etc/ssl/certs
25 tls_session_timeout: 1440
26 tls_cipher_list: TLSv1:SSLv3:SSLv2:!NULL:!EXPORT:!DES:!LOW:@STRENGTH
27 lmtpsocket: /var/run/cyrus/socket/lmtp
28 idlesocket: /var/run/cyrus/socket/idle
29 notifysocket: /var/run/cyrus/socket/notify
30 postmaster: postmaster
31 reject8bit: no
32 quotawarn: 90
33 timeout: 90
34 sieve_maxscriptsize: 128
35 sieve_maxscripts: 20

Beachte hier insbesondere Zeilen 21 bis 23. Die Zertifkate und Key Files entsprechen hier denen der Postifx TLS Konfiguration.

  • Kapitel 8: Allen Anweisungen folgen. Der Webserver läuft unter Debian mit der Kennung von "www-data".
  • Kapitel 9 und 10: Allen Anweisungen folgen

Integration von Amavis

  • Folgende Zeile in /etc/postfix/main.cf hinzufügen:
content_filter = smtp-amavis:127.0.0.1:10024
  • Folgende Zeilen in /etc/postfix/master.cf hinzufügen:
smtp-amavis unix -      -       y       -       2  lmtp
  -o smtp_data_done_timeout=1200
  -o disable_dns_lookups=yes
127.0.0.1:10025 inet n  -       y       -       -  smtpd
  -o content_filter=
  -o local_recipient_maps=
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  • in /etc/amavis/amavisd.conf:
   o Zeile 90 und 91: auskommentieren
     90 # @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE ANTI-VIRUS code
     91 # @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE ANTI-SPAM code
   o @local_domains = qw( www.example.com ) # die gleiche Domain wie auch in /etc/postfix/main.cf 
(myhostname = www.example.com) o Was soll mit SPAM und Virus Mail passieren? Einfach mal nach $virus_quarantine_to,
$spam_quarantine_to bzw. $QUARANTINEDIR suchen. Damit kann man bspw. die Umleitung der SPAM
und Virus Mail oder die Verwahrung in einem bestimmten Verzeichnis einstellen.

SIEVE Skripte mit Squirrelmail

SIEVE Mail Filters Plugin von http://www.squirrelmail.org/plugin_view.php?id=73 (cache) herunterladen, in /usr/share/squirrelmail/plugins entpacken und mit /usr/share/squirrelmail/config/conf.pl aktivieren

Was Web-Cyradm nicht kann

Web-Cyradm kann leider keine Umleitungen von Mails auf andere Domains. Dies kann man aber ganz einfach durch einen manuellen Eintrag in der Datenbank Tabelle mail.virtual bewerkstelligen:

  • Umleitung von foo@bar.com nach foobar@baz.com:
INSERT INTO virtual (alias, dest) VALUES ("foo@bar.com", "foobar@baz.com");
  • Umleitung aller E-Mails an @bar.com an die entsprechenden Adressen bei @baz.com:
INSERT INTO virtual (alias, dest) VALUES ("@bar.com", "@baz.com");


© 2018. Hetzner Online GmbH. Alle Rechte vorbehalten.