Einrichtung eines Mailservers mit Dovecot und Postfix unter Debian Wheezy (7)

01.06.2013 Server Archiv
 
Bitte beachten Sie, dass es hierbei sich um einen von meiner alten Seite migrierten Artikel handelt.

Postfix installieren

Installation:
# apt-get install postfix postfix-mysql
Hauptkonfiguration:
# ---------------------------- main settings -------------------------
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
recipient_delimiter = +
readme_directory = no


# ---------------------------- TLS parameters ------------------------

smtpd_use_tls = yes
smtpd_tls_cert_file = /var/www/sxmail.de/ssl/sxmail.de.crt
smtpd_tls_key_file  = /var/www/sxmail.de/ssl/sxmail.de.key
smtp_tls_CAfile     = /var/www/sxmail.de/ssl/ca.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_security_level = may


# ---------------------------- host parameters -----------------------
myhostname = sxmail.de
myorigin = /etc/mailname
mydestination = mail.sxmail.de, mail.ico.to, localhost
relay_domains = $mydestination
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
inet_interfaces = all


# ---------------------------- virtual domains -----------------------
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/forwardings.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/mailboxes.cf

virtual_mailbox_base = /var/mail

virtual_uid_maps = static:8
virtual_gid_maps = static:8


# ---------------------------- enable auth ---------------------------
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes


# ---------------------------- mail restrictins ----------------------
smtpd_recipient_restrictions = 
	permit_mynetworks,
	permit_sasl_authenticated,
	reject_unauth_destination,
	reject_rhsbl_sender dsn.rfc-ignorant.org,
	reject_unknown_sender_domain
smtpd_client_restrictions = check_policy_service inet:127.0.0.1:2000
message_size_limit = 104857600
smtpd_client_message_rate_limit = 100


# ---------------------------- other settings ------------------------
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
owner_request_special = no
Code: /etc/postfix/main.cf

Erklärung der Parameter:
Einstellung Beschreibung
smtpd_banner Willkommenstext beim Verbinden mit dem Server
biff biff ist ein Dienst, der lokale Benutzer über neue Mails informiert. Da wir keine Verknüpfung lokaler Benutzer mit den Mail-Accounts haben wird dieser Wert auf „no“ gesetzt.
append_dot_mydomain Postfix könnte unvollständige Mailadressen durch den eigenen Hostname vervollständigen. Zum Schutz vor Spam wird dieser Parameter auf „no“ gesetzt.
recipient_delimiter -
readme_directory Bezeichnet den Ort, an dem die Readme-Dateien von Postfix liegen.
smtpd_tls_cert_file Pfadangabe zum TLS Zertifikat.
smtpd_tls_key_file Pfadangabe zum TLS Zertifikatschlüssel.
smtp_tls_CAfile Pfadangabe zur Datei, welche die Zertifikate der Wurzel-CA beinhaltet.
smtpd_tls_session_cache_database Name der Datei, welche den optionalen Server TLS Session Cache von Postfix darstellt. Existiert die angegebene Datei nicht, wird sie erzeugt.
smtp_tls_session_cache_database Name der Datei, welche den optionalen Client TLS Session Cache von Postfix darstellt. Existiert die angegebene Datei nicht, wird sie erzeugt.
smtpd_tls_security_level Das SMTP Sicherheitslevel für den Postfix SMTP Server; Dieser Parameter wird ignoriert, falls smtpd_tls_wrappermode = yes gesetzt wurde.
Es gibt folgende Sicherheitslevels:
  • none: TLS wird nicht genutzt
  • may: bietet STARTTLS an, setzt aber nicht voraus, dass es genutzt wird
  • encrypt: zwingt den Nutzer TLS zu verwenden
myhostname Setzen des Hostnamens. Standardwert ist der FQDN des Servers.
alias_maps Gibt die Alias-Datenbank an, die zur lokalen Auslieferung von Mails genutzt wird. Bei einem neuen System muss eventuell newaliases in der Shell ausgeführt werden.
alias_database Gibt die Alias-Datenbank für die lokale Auslieferung von Mails an. Existiert als eigener Parameter, weil nicht alle in alias_maps spezifizierten Tabellen lokale Dateien sein müssen.
myorigin Wird als Hostname verwendet, falls ein autorisierter Benutzer ohne Domain sendet oder empfängt.
mydestination Der Server soll nur an diese Domain adressierte Mails annehmen. Es wird hierbei keine Empfängerdomain angegeben, da diese erst später als virtuelle Domain via Datenbank eingetragen wird.
relayhost An welche Ziel-Domain (inklusive Subdomains) dieses System Mails übertragen wird.
mynetworks Aus den hier angegebenen Netzwerken werden Mails ohne Authentifizierung angenommen.
mailbox_size_limit Da die Postfächer von Dovecot verwaltet werden, soll Postfix hier keine Prüfung vornehmen. 0 steht hierbei für unbegrenzt.
inet_interfaces Interfaces auf denen Postfix lauschen soll. „all“ steht dabei für alle Interfaces.
virtual_alias_maps Angabe der Aliases von E-Mail-Adressen.
virtual_mailbox_domains Dieser Parameter legt fest, für welche Domains der Server zuständig sein soll.
virtual_mailbox_maps Zuordnung der E-Mail-Adressen zu den einzelnen Accounts.
virtual_mailbox_base Gibt den Pfad als Präfix an unter dem die E-Mails abgespeichert werden sollen. Wird durch die Nutzung einer absoluten Pfadangabe in der Datenbank überflüssig.
virtual_uid_maps Gibt den Systembenutzer an, der die Verwaltung der Postfächer übernehmen soll.
virtual_gid_maps Gibt die Systemgruppe an, die die Verwaltung der Postfächer übernehmen soll.
smtpd_sasl_type Hier wird die SASL-Erweiterung eingetragen, die zur Authentifizierung genutzt werden soll. In diesem Fall wird „dovecot“ eingetragen.
smtpd_sasl_path Typischerweise gibt dieser Parameter den Pfad zu einer Konfigurationsdatei an, welche vom SASL-Plug-In genutzt wird.
smtpd_sasl_auth_enable Aktiviert die SASL-Authentifizierung, welche standardmäßig deaktiviert ist.
broken_sasl_auth_clients Gibt an, ob eine fehlerhafte SASL-Implementierung für alte Clients zusätzlich implementiert werden soll. Standardmäßig ist diese deaktiviert.
smtpd_sasl_authenticated_header Legt fest, ob in die E-Mail-Header versendeter Mails eingetragen werden soll, dass der Nutzer sich authentifiziert hat und wie dieser heißt. Standardmäßig ist diese Einstellung deaktiviert.
smtpd_recipient_restrictions Unvollständig – ToDo
smtpd_client_restrictions Unvollständig – ToDo
virtual_transport Legt das finale Ziel fest, das für die Auslieferung von Mails an die festgelegten Domains zuständig ist. Hier wird „dovecot“ gesetzt und somit die Zuständigkeit für den endgültigen Transport an Dovecot abgegben.
dovecot_destination_recipient_limit Das Flag „D“ (in der master.cf unter dovecot) bei flags=DRhu erzwingt das Postfix nur ein Empfänger pro (Pipe-) Verbindung übergibt. Kommt eine Mail mit mehreren Empfänger (für die alle Dovecot zuständig ist) dann kommt diese Fehlermeldung und Mails werden nicht an alle Empfänger zugestellt. Wird diese Einstellung auf „1“ gesetzt, wird verhindert, dass mehrere Empfänger an Dovecot weitergereicht werden.
content_filter Gibt einen Filter an, der anschlägt sobald eine E-Mail vollständig in der Mailwarteschlange aufgenommen wurde. Durchsucht werden kann die vollständige E-Mail.
receive_override_options Aktiviert oder deaktiviert Empfängeradressenprüfung, Inhaltsfilterung und Adress-Mapping.
Es gibt folgende Einstellungen:
  • no_unknown_recipient_checks: versuche nicht, unbekannte Empfänger abzulehnen
  • no_address_mappings: Server soll ursprüngliche Adressen nicht umschreiben, sodass Header-Filter die ursprüngliche Adresse zu sehen bekommen
  • no_header_body_checks: deaktiviere Header- und Inhaltsprüfung.
  • no_milters: deaktiviert
smtpd_client_message_rate_limit Maximale Anzahl der Nachrichtenanfragen, die pro Zeiteinheit von einem Client getätigt werden dürfen. Dient dem Schutz vor Missbrauch.
owner_request_special Unvollständig – ToDo
message_size_limit Definiert die maximale Größe einer E-Mail in Bytes an. Auch Header-Informationen gehen in die Größe ein.

Installation:
# =======================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# =======================================================================

smtp      inet  n       -       -       -       -       smtpd
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=check_policy_service,inet:127.0.0.1:2000,permit_sasl_authenticated,reject

pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       -       1000?   1       tlsmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       -       -       -       smtp

# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       -       -       -       smtp
  -o smtp_fallback_relay=
# -o smtp_helo_timeout=5
# -o smtp_connect_timeout=5

showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
retry     unix  -       -       -       -       -       error
discard   unix  -       -       -       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       -       -       -       lmtp
anvil     unix  -       -       -       -       1       anvil
scache    unix  -       -       -       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================

maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}

uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)

bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient

scalemail-backend unix - n      n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=mail:mail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}

amavis    unix  -       -       -       -       2       smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes

scan      unix  -       -       n       -       16      smtp
  -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
  -o content_filter=
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o strict_rfc821_envelopes=yes
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_bind_address=127.0.0.1
Code: /etc/postfix/master.cf

Anlegen der Datenbank:
# ToDo

Dovecot installieren

Installation:
# apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-managesieved
Hauptkonfiguration:
# ---------------------------- Main settings -------------------------
base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s managesieve
disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = maildir:/var/mail/%d/%n/Maildir
first_valid_uid = 5
mail_uid = 8
mail_gid = 8

# ---------------------------- SSL settings --------------------------
ssl_cert_file = /var/www/sxmail.de/ssl/sxmail.de.crt
ssl_key_file = /var/www/sxmail.de/ssl/sxmail.de.key
ssl_ca_file = /var/www/sxmail.de/ssl/ca-bundle.crt

# ---------------------------- Logging settings ----------------------
log_timestamp = "%Y-%m-%d %H:%M:%S "

# ---------------------------- Login settings ------------------------
login_greeting = sxMail server ready...

# ---------------------------- IMAP settings -------------------------
protocol imap {
	mail_executable = /etc/mail/imap/login.sh
	mail_plugins = quota imap_quota
}

# ---------------------------- POP3 settings -------------------------
protocol pop3 {
	#login_executable = /usr/lib/dovecot/pop3-login
	mail_executable = /etc/mail/pop3/login.sh
	
	pop3_uidl_format = %08Xu%08Xv
	mail_plugins = quota
}

# ---------------------------- LDA settings --------------------------
protocol lda {
	postmaster_address = nelf@ico.to
	mail_plugin_dir = /usr/lib/dovecot/modules/lda
	auth_socket_path = /var/run/dovecot/auth-master
	mail_plugins = sieve quota
}

# ---------------------------- Sieve settings ------------------------
protocol managesieve {
	listen = localhost:2001
	login_executable = /usr/lib/dovecot/managesieve-login
	mail_executable = /usr/lib/dovecot/managesieve
}

# ---------------------------- Auth settings -------------------------
auth default {
	mechanisms = plain login
	
	userdb sql {
		args = /etc/dovecot/mysql.conf
	}
	passdb sql {
		args = /etc/dovecot/mysql.conf
	}
	
	socket listen {
		master {
			path = /var/run/dovecot/auth-master
			mode = 0600
			user = mail
		}
		client {
			path = /var/spool/postfix/private/auth
			mode = 0660
			user = postfix
			group = postfix
		}
	}
}

# ---------------------------- Plugin settings -----------------------
plugin {
	quota = dict:user::file:/var/mail/%d/%n/.quotausage
	sieve = /var/mail/%d/%n/.sieve
	sieve_dir = /var/mail/%d/%n/sieve
}
Code: /etc/dovecot/dovecot.conf

MySQL-Konfiguration:
# ---------------------------- database type -------------------------
driver = mysql

# ---------------------------- main settings -------------------------
connect = host=127.0.0.1 dbname=dbname user=username password=password
default_pass_scheme = CRYPT

# ---------------------------- query settings ------------------------
password_query = SELECT `pass` AS 'password' FROM `mail_users` WHERE `email` = '%u' AND `disabled` = '0'
user_query = SELECT `email` AS 'user', `maildir` AS 'home', CONCAT('maildir:', `maildir`, '/Maildir') AS 'mail', '8' AS 'uid', '8' AS 'gid', CONCAT('*:storage=', `quota`, 'B') AS 'quota_rule', CONCAT(`maildir`, '/.sieve') AS 'sieve' FROM `mail_users` WHERE `email` = '%u' AND `disabled` = '0'
Code: /etc/dovecot/mysql.conf

Um das in der Konfiguration genutzte CA-Bundle zu nutzen muss es wie folgt geladen werden:
# wget http://www.startssl.com/certs/ca-bundle.crt

Wird ein anderer Anbieter genutzt, muss ein entsprechendes Zertifikat gesucht werden. Hierbei handelt es sich um StartSSL. Angeblich müssen die Zertifikate die in der Config angegeben werden noch mit folgendem Schritt erstellt werden (klappte hier auch ohne):
# cat domain.com.crt sub.class1.server.ca.pem > dovecot_crt.pem

Content Filter (Amavis) installieren

Installation:
# apt-get install amavisd-new
Wichtig: Domain-Datei anlegen unter /etc/amavis/domains und zeilenweise die Domains auflisten.
chomp($mydomain = `head -n 1 /etc/mailname`);
@local_domains_maps = ( read_hash("/etc/amavis/domains") );
Code: /etc/amavis/conf.d/05-domain_id
# set admin
$virus_admin = undef;
$spam_admin = undef;
Code: /etc/amavis/conf.d/50-user

Spamfilter (Spamassassin)

Installation:
# apt-get install spamassassin
Aktivierung in Amavis:
@bypass_spam_checks_maps = (\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Code: /etc/amavis/conf.d/15-content_filter_mode

Amavis Daemon neu starten:
# /etc/init.d/amavisd restart

Virenschutz (ClamAV) installieren

Installation:
# apt-get install clamav-daemon

Benutzer ClamAV der Gruppe Amavis zuordnen:
# adduser clamav amavis

ClamAV neustarten:
# /etc/init.d/clamav-daemon restart

Aktivierung in Amavis:
@bypass_virus_checks_maps = (\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
Code: /etc/amavis/conf.d/15-content_filter_mode

Amavis Daemon neu starten:
# /etc/init.d/amavisd restart

Spam lernen
Um den Spamfilter zu schulen muss der Benutzer zu amavis gewechselt werden:
# su amavis

Anschließend kann durch folgenden Befehl eine E-Mail als Spam gelernt werden:
# sa-learn --spam {file}

Um E-Mails zu vergessen oder zu whitelisten kann stattdessen der Parameter --ham oder --forget genutzt werden. Alternativ zum User-Switch kann der Befehl auch als Root ausgeführt werden (ungetestet):
# sa-learn --dbpath /var/lib/amavis/.spamassassin –-spam {file}