Backup MX mit MySQL (und ISPConfig) 3


Wer einen Backup MX betreibt, sollte tunlichst darauf achten, dass sich dieser hinsichtlich der akzeptierten Mails identisch zum eigentlichen MX verhält. Ansonsten kann der Backup-MX eine Mail für does_not_exists@domain.com annehmen, die der eigentliche MX dann nicht annimmt oder eigentlich erwünschte Mails ablehnen.

Da ich ISPConfig verwende, liegen alle für den Mailserver relevanten Daten in einer MySQL-Datenbank. Wie die Datenbank auf dem Backup-Server vorgehalten wird, ist Geschmackssache. Ich verwende dafür eine einfache MySQL Master-Slave-Replikation. Das hier beschriebene Setup funktioniert auch mit anderen Systemen, so lange die Daten in einer Datenbank hinterlegt sind. Lediglich die entsprechenden Files für den MySQL-Zugriff müssen ggf. angepasst werden. Ich übernehme diese aber einfach vom Mail-Server und passe lediglich den MySQL-User und das Passwort an.
Man kann das zwar auch anders lösen (bspw. so), ich halte aber die Lösung über eine Datenbank für besser, da so Änderungen ad hoc verfügbar sind.

Um das ganze zu vereinfachen nenne ich im folgenden den Mailserver Cicero und den Backup-MX (nomen est omen) Tiro.

Der Mailserver (Cicero) nimmt per se nicht jede Mail an, sondern nur für eigene Domains und die dazu passenden Adressen. Tiro muss also auf die gleichen Daten zugreifen können, um den Empfänger als zulässig identifizieren zu können. Da die Daten in einer Datenbank liegen, lässt sich das ganz einfach realisieren. Angepasst werden müssen nur die einzelne sql-Files.

Durch ISPConfig ist Cicero schon so konfiguriert, dass die Zugriffe über MySQL richtig erfolgen. Durch die Replikation der Datenbank ist diese auf Tiro auch verfügbar. Was auf Tiro noch fehlt, ist ein passende MySQL-User, der die entsprechenden Rechte an der Datenbank hat.
CREATE USER 'backup-mx'@'localhost' IDENTIFIED BY 'TOPSECRET';
GRANT SELECT ON dbispconfig.* TO 'backup-mx'@'localhost';

Postfix soll die Mails nur weiterleiten, von daher fällt die main.cf sehr knapp aus:

myhostname = tiro.schaal-24.de
mydomain = schaal-24.de
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname
smtpd_banner = $myhostname - MX Backup
biff = no
alias_maps =
relay_domains = mysql:/etc/postfix/mysql-virtual_domains.cf, $mydomain
relay_recipient_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf, mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
queue_run_delay = 200s
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_invalid_hostname
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_data_restrictions =
  reject_unauth_pipelining,
  permit
setgid_group = maildrop
queue_directory = /var/spool/postfix
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
relayhost =
mailbox_size_limit = 0
message_size_limit = 0

Um mit Postfix auf eine MySQL-Datenbank zuzugreifen, wird ein entsprechendes File erstellt (relay_domains und relay_recipient_maps), dass die notwendigen Informationen für den Datenbank-Zugriff enthält. Ich habe dazu von Cicero die Files
/etc/postfix/mysql-virtual_domains.cf
/etc/postfix/mysql-virtual_mailboxes.cf
/etc/postfix/mysql-virtual_forwardings.cf
/etc/postfix/mysql-virtual_email2email.cf

nach tiro:/etc/postfix kopiert und den mysql-User und das Passwort entsprechend angepasst (user = und password =).

Jetzt fehlt nur noch der passende Eintrag im DNS:

schaal-24.de. 120   MX  10  mx.schaal-24.de.
schaal-24.de. 120   MX  20  cicero.schaal-24.de.

Das wars – ist Cicero nicht erreichbar, landen die Mails auf Tiro und werden dann später an Cicero zugestellt.


Kommentar erstellen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

3 Gedanken zu “Backup MX mit MySQL (und ISPConfig)

  • jbbr

    Hallo, vielen Dank für die Anleitung.

    Ich vermute es fehlt noch der “relayhost = cicero.schaal-24.de” Eintrag? Oder wie weiß typo, wohin er die Mails weiterleiten soll?

  • Delawrius Butticus

    While I think this is an excellent post, the content isn’t dated, nor are versions mentioned. This makes it impossible to tell how relevant this is. Is this ISPConfig 3?

    You also don’t mention how postfix will access ISPConfig’s configuration database so it ‘knows’ which ISPConfig-controlled