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");

