Postfix: Backup-MX

Betreibt man einen Mailserver kann es passieren, dass dieser für längere Zeit nicht erreichbar ist. Was in einem solchen Fall mit eingehenden Mails geschieht entscheidet der einliefernde Mailserver. In der Regel geht dieser von einem temporären Fehler aus und versucht die Zustellung erneut. Sofern dies über mehrere Stunden nicht gelingt erhält der Absender eine “Delayed Mail Warning”, sprich eine Nachricht, dass die von ihm versendete Mail den Empfänger noch nicht erreicht hat, aber keine weiteren Schritte nötig sind, da der Zustellversuch noch über mehrere Tage erneut versucht wird. Erst wenn auch dies nicht gelingt wird der Versuch abgebrochen und der Absender erhält eine entsprechende Mitteilung.

Leider ist dies der Idealfall, manche Mailserver verwerfen die Mail direkt nach dem ersten, nicht erfolgreichen, Zustellversuch. Andere Mailserver informieren den Absender nicht über die Verzögerung (oder tun dies so kryptisch, dass der Absender den Sinn der Nachricht nicht versteht). Wieder andere Mailserver informieren den Absender nicht einmal darüber dass die Mail gar nicht zugestellt wurde.

Kurz gesagt ist man also von der Konfiguration anderer Systeme abhängig. Aus dieser Abhängigkeit kann man sich größtenteils durch die Verwendung eines Backup-MX befreien.

DNS-Konfiguration

Hierzu ist zunächst (bei Manitu) eine neue Subdomain im DNS (Forward) zu registrieren:

1
mx1     21x9.org                IN      A       1.2.3.4

Für diese Domain wird anschließend ein weiterer MX-Eintrag erstellt:

1
21x9.org                IN      MX      100 mx1.21x9.org.

Wichtig ist hierbei dass der Wert für die Priorität (100) größer ist als für den eigentlichen Mailserver (mx0.21×9.org).

Abschließend wird ein Reverse-DNS-Eintrag erstellt:

1
IPv4    1.2.3.4         PTR     mx1.21x9.org

Sobald sich die Änderungen im DNS herumgesprochen haben (dauert bis zu 48 Stunden) sollte dig 21x9.org MX folgendes ausgeben:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
; <<>> DiG 9.7.3 <<>> 21x9.org MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26324
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;21x9.org.      IN      MX

;; ANSWER SECTION:
21x9.org. 42053 IN      MX      100 mx1.21x9.org.
21x9.org. 42053 IN      MX      10 mx0.21x9.org.

;; Query time: 8 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Mon Apr 30 10:32:10 2012
;; MSG SIZE  rcvd: 82

Die Domain mx1.21x9.org sollte auf die IP 217.11.61.100 verweisen:

1
2
3
4
5
6
7
PING mx1.21x9.org (217.11.61.100) 56(84) bytes of data.
64 bytes from mx1.21x9.org (217.11.61.100): icmp_req=1 ttl=57 time=13.5 ms
64 bytes from mx1.21x9.org (217.11.61.100): icmp_req=2 ttl=57 time=11.8 ms
^C
--- mx1.21x9.org ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 11.819/12.672/13.526/0.860 ms

Ist nun der primäre Mailserver (mx0.21x9.org) nicht erreichbar versucht der, korrekt konfigurierte, einliefernde Mailserver die Zustellung über den Backup-MX (mx1.21x9.org). Sind beide Server nicht erreichbar greift das oben beschriebene Szenario.

Der Backup-MX nimmt die Mail entgegen und versucht nun seinerseits die Zustellung der Nachricht an den primären Mailserver durchzuführen. Der Vorteil, nun liegt die Kontrolle über “Delayed Mail”-Warnungen und den Zeitraum in dem ein erneute Zustellversuche unternommen werden in unserer Hand.

Postfix-Konfig

Hinweis: smtpd am Beginn einer Konfigurationsseite bezieht sich immer auf die Serverseite, smtp auf die Clientseite.

Die Installation von postfix unterscheidet sich zunächst kaum von der Grundkonfiguration des primären Mailservers. Die Maßnahmen zur Spamfilterung werden jedoch auf ein Minimum beschränkt, da diese später vom primären Mailserver durchgeführt werden. Auch der Virencheck entfällt zunächst. Damit der primäre Mailserver aber nach einem Ausfall nicht mit zu vielen Mails von Backup-MX konfrontiert wird sollten aber zumindest RBL-Checks durchgeführt werden. Greylisting wäre ggf. sinnvoll, da dies ansonsten gänzlich entfällt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# /etc/postfix/main.cf>

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = mx1.21x9.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = 21x9.org, localhost.cat06.de, localhost
relayhost =
permit_mx_backup_networks = 21x9.org
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

smtpd_recipient_restrictions =
        check_client_access hash:/etc/postfix/client_whitelist
        permit_sasl_authenticated
        reject_non_fqdn_sender
        reject_non_fqdn_recipient
        reject_unauth_destination
        reject_invalid_hostname
        reject_non_fqdn_hostname
        reject_unknown_client
        reject_unauth_pipelining
        reject_rbl_client bl.spamcop.net
        reject_rbl_client sbl-xbl.spamhaus.org
        reject_rbl_client ix.dns1.manitu.net
        permit_mynetworks
        permit_mx_backup

unknown_client_reject_code = 550

relay_domains = $mydestination, $permit_mx_backup_networks
relay_recipient_maps = 

message_size_limit = 64000000
notify_classes = bounce, delay, policy, protocol, resource, software

maximal_backoff_time = 10m
minimal_backoff_time = 1m
queue_run_delay = 60s
maximal_queue_lifetime = 4w

Wichtig bei der Konfiguration ist vor allem folgendes:

  • Entfernen der delay_warning_time
  • Die Domains des primären Mailservers dürfen nicht unter mydestination aufgeführt sein
  • Angabe der Domains unter permit_mx_backup_networks
  • permit_mx_backup_networks in relay_domains aufnehmen
  • Leere relay_recipient_maps anlegen

Mit den Werten maximal/minimal_backoff_time, queue_run_delay und maximal_queue_lifetime kann dann das Verhalten festgelegt werden, sollte der primäre Mailserver nicht erreichbar sein. Insbesondere maximal_queue_lifetime sollte deutlich über dem Default-Wert von 5 Tagen liegen, damit auch bei einem sehr langen Ausfall keine Mails verworfen werden.

Mehr Informationen: https://www.21×9.org/e-mail-server-5-backup-mx/

Das könnte dich auch interessieren …