E-Mail-Server 3: postfix, greylisting, amavis (Debian Wheezy)
Im [[/e-mail-server-2-dovecot-debian-wheezy/|letzten Artikel]] wurde der MDA dovecot
installiert und die Konfiguration für das Zusammenspiel mit LDAP und dem Mail-Transport-Agent (MTA) postfix
vorbereitet. Postfix ist verantwortlich für den eigentlich Mailtransport und damit für den Empfang und den Versand von E-Mails.## Installation ##
apt-get install postfix postfix-ldap postfix-pcre
Konfiguration
Die Konfiguration von postfix
baut stark auf dovecot
auf, somit sollte dieses bereits fertig konfiguriert sein.
Die Hauptkonfiguration erfolgt über die Datei /etc/postfix/master.cf
:
smtp inet n - - - - smtpd
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks
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
relay unix - - - - - smtp
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
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}
smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=42
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_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Hier sind insbesondere die Angaben für amavis
relevant (127.0.0.1:10025
und smtp-amavis
).
Die Benutzerauthentifizierung am SMTP übernimmt dankenswerterweise Dovecot. Eingerichtet wird sie über die Datei: /etc/postfix/main.cf
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases, ldap:/etc/postfix/ldap-aliases.cf
append_dot_mydomain = no
biff = no
body_checks = pcre:/etc/postfix/body_checks.pcre
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
delay_warning_time = 1h
header_checks = pcre:/etc/postfix/header_checks.pcre
inet_interfaces = all
inet_protocols = all
local_recipient_maps =
luser_relay = dwitt
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 0
message_size_limit = 64000000
mydestination = 21x9.net,21x9.org,21x9.sh
myhostname = mail.21x9.org
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
notify_classes = delay, resource, software
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination check_client_access hash:/etc/postfix/client_whitelist check_recipient_access hash:/etc/postfix/rejected_recipients reject_non_fqdn_sender reject_non_fqdn_recipient reject_unlisted_recipient reject_invalid_hostname reject_unknown_client reject_rbl_client sbl-xbl.spamhaus.org reject_rbl_client ix.dns1.manitu.net check_policy_service inet:127.0.0.1:10023
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_CAfile = /etc/postfix/ssl/ca.pem
smtpd_tls_cert_file = /etc/postfix/ssl/21x9.crt
smtpd_tls_key_file = /etc/postfix/ssl/21x9.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
unknown_client_reject_code = 550
virtual_alias_domains = citizen-cam.de,icanhaslebensraum.de
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf, hash:/etc/postfix/forwarding
Je nachdem welche Angaben in mynetworks
gemacht werden müssen Benutzer am SMTP angemeldet sein, damit externe Mails versendet werden können. Die Benutzerdaten hierzu bezieht Dovecot und somit Postfix vom LDAP-Server.
Die unter smtpd_tls_cert_file
und smtpd_tls_key_file
erwähnten Zertifikatsdateien können z.B. über StartSSL bezogen oder selbst generiert werden. Letzteres hat zur Folge dass die Benutzer eine Zertifikatswarnung erhalten, wenn Sie den Mailserver in ihrem Mailclient einrichten.
Die smtpd_recipient_restrictions
legen Regeln fest die erfüllt sein müssen, damit der MTA eine E-Mail von außen annimmt bzw. versendet, sie werden in der angegebenen Reihenfolge abgearbeitet und haben folgende Bedeutung:
- permit_mynetworks : Die unter
mynetworks
aufgelisteten Clients dürfen immer E-Mails versenden - permit_sasl_authenticated: Benutzer die am Mailserver angemeldet sind dürfen immer E-Mails versenden
- reject_unauth_destination: E-Mails an eine nicht authentifizierte Adresse dürfen nicht versendet/empfangen werden
- check_client_access : Absender die in der Datei
hash:/etc/postfix/client_whitelist
vermerkt sind dürfen Mails immer zustellen - check_recipient_access : Empfänger aus
hash:/etc/postfix/rejected_recipients
erhalten Mails ohne weitere Prüfung - reject_non_fqdn_sender : Der Absender muss einen FQDN (Fully Qualified Domain Name) verwenden
- reject_non_fqdn_recipient: Der Empfänger muss einen FQDN verwenden
- reject_unlisted_recipient: Der Empfänger muss in einem To:-Feld (auch CC und BCC) erwähnt werden
- reject_invalid_hostname : Der Hostname des Absenders muss korrekt sein
- reject_unknown_client : Der Client des Absenders muss identifizierbar sein
- reject_rbl_client : Der Client darf nicht in
sbl-xbl.spamhaus.org
aufgeführt sein - reject_rbl_client : Der Client darf nicht in
ix.dns1.manitu.net
aufgeführt sein - check_policy_service : Der Client darf nicht an Postgrey (greylisting) erreichbar unter
inet:127.0.0.1:10023
scheitern
Neben den oben genannten Checks werden die Mail außerdem durch postgrey
(check_policy_service inet:127.0.0.1:10023
) und amavis
(content_filter = smtp-amavis:[127.0.0.1]:10024
) weiteren Untersuchungen unterzogen und ggf. abgelehnt.
Über die Dateien pcre:/etc/postfix/body_checks.pcre
und pcre:/etc/postfix/header_checks.pcre
können weiter Filterkriterien erzeugt werden. body_checks.pcre
führt hierbei mittels RegEx (Regulärer Ausdrücke) Tests im E-Mail Body durch. So können bestimmte Suchbegriffe zur Ablehnung einer Mail führen. header_checks.pcre
für entsprechende Header-Checks durch. So kann z.B. E-Mail an die Adresse noreply@21x9.org
mit einer entsprechenden Meldung abgelehnt werden. Immer wenn die .pcre
-Dateien geändert werden müssen sie mit postmap /etc/dovecot/$dateiname.pcre
umgewandelt und aktiviert werden. Sollen keine Header/Body-Checks durchgeführt werden sollten die Zeilen aus der main.cf
entfernt werden.
Die oben genannten Zeilen alias_database
und alias_maps
veranlassen Postfix nach unbekannten Usern für die lokalen Domains (mydestination
) zunächst in /etc/aliases
zu suchen. Wird Postfix dort nicht fündig, wird nach den in /etc/postfix/ldap-aliases.cf
definierten Regeln nach weiteren Usern gesucht:
# /etc/postfix/ldap-aliases.cf
server_host = localhost
search_base = dc=ldap,dc=21x9,dc=org
bind = no
query_filter = mail=%s
result_attribute = uid
version = 3
Eine exakte Erklärung der Konfigurationseinträge findet sich in der sehr guten Dokumentation von Postfix: http://www.postfix.org/documentation.html
Die Verwaltung der virtuellen Mailadressen erfolgt nun (am einfachsten) über den LDAP Account Manager (LAM).
Sofern ein ''catch-all'' Mailkonto gewünscht wird ist dies ebenfalls leicht einzurichten:
# /etc/postfix/main.cf>
local_recipient_maps =
luser_relay = gpkvt
Die Konfiguration wird mit /etc/init.d/postfix
aktiviert. Außerdem müssen postgrey
und amavis
gestartet werden, zu denen kommen wir aber noch im nächsten Artikel.
Queue
Mit postqueue -p
kann man sich die aktuelle Warteschlange von postfix ansehen:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
D688222E6BCB 4303 Wed Jul 11 12:28:12 MAILER-DAEMON
(Host or domain name not found. Name service error for name=microsoftpromo.co.uk type=MX: Host not found, try again)
info@microsoftpromo.co.uk
8D78B22E6BCE 4478 Wed Jul 11 12:23:49 MAILER-DAEMON
(Host or domain name not found. Name service error for name=microsoftpromo.co.uk type=MX: Host not found, try again)
info@microsoftpromo.co.uk
-- 9 Kbytes in 2 Requests.
Mit postqueue -f
(flush) wird Postfix veranlasst die Abarbeitung der Warteschlange sofort zu beginnen. Soll eine Mail vorzeitig aus der Warteschleife genommen werden und nicht mehr zugestellt werden, kann postsuper -d $queueid
genutzt werden. Mit postsuper -d ALL
werden alle Mails aus der Warteschleife entfernt. Die Queue-ID wird von postqueue -p
angezeigt.
Weiterleitung
Eine häufige Anforderung an einen Mailserver ist es E-Mails einfach an eine andere Adresse weiterzuleiten, anstatt sie in einem Postfach zu speichern. Dies geht mit postfix
sehr einfach, es müssen nur zwei Zeilen zur Konfiguration hinzugefügt werden:
# /etc/postfix/main.cf
virtual_alias_domains = citizen-cam.de
virtual_alias_maps = hash:/etc/postfix/forward
Domains die in virtual_alias_domains
gelistet sind dürfen nicht als mydestination
gelistet sein. Es ist somit also nicht möglich lokale Postfächer für die Domain anzulegen. Will man dies ermöglichen muss anstelle von virtual_alias_maps
einfach alias_maps
genutzt werden, virtual_alias_domains
entfällt dann.
Anschließend wir das Regelwerk erstellt:
# /etc/postfix/forward
info@citizen-cam.de root@21x9.org
root@citizen-cam.de vorname.nachname@googlemail.de
Das Regelwerk wird nun zusammen mit der Konfigurationsänderung aktiviert:
postmap /etc/postfix/forward
postfix reload
Die Regeln werden sofort aktiv.
Auch ein catchall
-Mailkonto ist so möglich:
# /etc/postfix/forward
@citizen-cam.de root@21x9.org
@icanhaslebensraum vorname.nachname@gmail.com