Zur Anbindung von Benno MailArchiv an unixoide E-Mail-Systeme empfehlen wir die MILTER Schnittstelle.
Dieses hat gegenüber der Anbindung von Benno MailArchiv per (always_)bcc oder einem ähnlichen Mechanismus den Vorteil, daß die eigentlichen Envelope-Informationen nicht verloren gehen. Bei E-Mails, die per BCC verschickt werden, existiert kein entsprechender Header in der E-Mail selbst. Diese Information wird als sogenannter Envelope von Mailserver zu Mailserver übermittelt.
Der MILTER Daemon „benno-milter“ speichert jede eingehende E-Mail im Inbox-Verzeichnis von Benno MailArchiv. Beim Schreiben der Datei speichert der MILTER die Envelope-Informationen (MAIL FROM, RCPT TO) in den zusätzlichen Headern
Diese Header sind per Voreinstellung in der Konfiguration des Archivers als „<senderheaders />“ bzw. „<recipientheaders />“ eingetragen. Zusätzlich sind sie als „<secretheaders />“ markiert, so daß sie bei der Anzeige einer E-Mail nicht ausgegeben werden.
Auf Debian und auf Debian basierenden Systemen erfolgt die Grund-Installation direkt aus dem Paket benno-milter aus dem Repository. Danach ist nur noch die Anbindung der Postfix-Konfiguration notwendig.
Auf anderen Systemen sollte die manuelle Installation vorgenommen werden.
Hinweis: Das Milter-Paket und die diesbezüglichen, an dieser Stelle dargestellten Informationen, stehen als demonstratives Beispiel und „as is“ ohne Anspruch auf Vollständigkeit zur Verfügung.
Falls mehrere Systeme als Importquellen angebunden werden, sollten die Anmerkungen der Multi-Import Konfiguration beachtet werden.
Nachdem das Benno MailArchiv Repository konfiguriert wurde, wird das Paket benno-milter per apt installiert. In der Voreinstellung ist benno-milter für die Implementierung in einen vorher installierten Postfix MTA konfiguriert. Daher sollte vor der Installation des Packages die Installation und Konfiguration des MTA abgeschlossen sein.
Anschließend wird das Paket installiert.
apt-get install benno-milter
Nach der Installation des Pakets wird der MILTER Daemon an Postfix angebunden.
Die MILTER-Anbindung wird in der Konfigurationsdatei /etc/postfix/main.cf
vorgenommen. Hierfür werden hier die folgenden Konfigurationsparameter hinzugefügt.
Achtung Falls Amavis als Post-Queue Filter installiert ist, sollte die Konfiguration des MILTERs wie in MILTER für Amavis deaktivieren beschrieben durchgeführt werden.
... ### Benno MailArchiv Milter smtpd_milters = unix:/benno-milter/benno-milter.sock non_smtpd_milters = local:/benno-milter/benno-milter.sock milter_default_action = tempfail ### /Benno MailArchiv Milter
Falls der MILTER Daemon vom MTA getrennt installiert werden soll, kann der Benno MILTER Daemon per über TCP angebunden werden.
Danach den Postfix-Daemon neu starten. Achtung: Falls das System so konfiguriert ist, daß eine Mail einen Filter durchläuft und dann erneut über einen zweiten SMTP-Prozess eingeliefert wird, muss der MILTER in diesem SMTPD deaktiviert werden. Dieses ist zum Beispiel beim Einsatz von Amavis der Fall.
Falls der MILTER Daemon auf einem vom SMTP-Service getrennten Host installiert werden soll, muss der MILTER Daemon an einen TCP-Socket gebunden werden und der Deamon muss nicht mit der Gruppe postfix gestartet werden. Hierfür wird vom Pre-Install Script des Pakets die Override-Datei /etc/systemd/system/benno-milter.service.d/override.conf
angelegt.
Diese Konfiguration kann auch nachträglich in /etc/default/benno-milter
vorgenommen werden.
In der Postfix-Konfiguration werden die Pfade zum Socket durch die Angabe von Hostname/IP-Adresse und Port ersetzt:
smtpd_milters = inet:benno.lw-systems.net:22500 non_smtpd_milters = inet:benno.lw-systems.net:22500
Bei der Installation des Packages wird geprüft, ob das Spool-Verzeichnis von Postfix vorhanden ist. In diesem Fall wird der MILTER-Daemon für die Anbindung per Unix Domain Socket konfigueriert. Andernfalls wird die Anbindung per TCP Socket eingestellt.
Bei logischer Trennung zwischen dem MTA und dem Archivierungssystem müssen die E-Mails auf das Archiverungssystem übertragen werden und hier unverändert gespeichert werden.
Die einfachste Möglichkeit ist, den MILTER-Daemon auf dem Archivierungs-Host zu installieren. Der MILTER wird so konfiguriert, daß er einen TCP-Socket bindet, so daß die Kommunikation zwischen MTA und MILTER über das Netwerk erfolgen kann.
Diese Konfiguration hat den Nachteil, daß der eigentiche Mailtransport von einem weiteren Host abhängig ist.
Eine andere Möglichkeit ist die Konfiguration des MILTER Daemons auf dem MTA und die Übertragung der E-Mails per SMTP zum Archivierungssystem. Hier wird auf dem Benno MailArchiv Host wird das Paket benno-smtp installiert. Das Paket enthält den SMTP Daemon, der über Port 2500 eingelieferte E-Mails werden ohne Veränderung im Benno Import Verzeichnis speichert.
Auf dem MTA-Host muss der Hostname (BENNOHOST=) des Archivierungs-Systems in der Datei /etc/default/benno-milter konfiguriert werden.
# # Start options for benno-milter # SOCKET=/var/spool/postfix/benno-milter/benno-milter.sock SPOOLDIR=/srv/benno/inbox #BENNOHOST=your.benno-archive.host
Danach wird die Übertragung per Cron-Job in /etc/cron.d/benno-milter
durch entkommentieren des Kommandos aktiviert.
# # Import mails from maildump milter # #*/15 * * * * benno /usr/sbin/benno-export2archive
Dieser Cron-Job ruft letztendlich das Programm benno-milter2smtp auf, mit dem die E-Maildatein per SMTP übertragen werden.
Die X-REAL-* Header der Maildump-Dateien werden beim Versand entfernt und als Envelope-Informationen übertragen. Daher muss bei der Konfiguration von benno-smtp darauf geachtet werden, dass in der Konfigurationsdatei /etc/benno-smtp/benno-smtp.conf
die Einstellung envelope_header = true
gesetzt ist.
In einer Univention-Umgebung wird die MailArchiv App auf dem zentralen Mailserver angebunden. Zur Konfiguration werden die UCR-Variablen wie folgt gesetzt.
ucr set mail/postfix/mastercf/options/smtp/smtpd_milters=inet:benno-hostname:22500 ucr set mail/postfix/mastercf/options/smtp/milter_default_action=tempfail ucr set mail/postfix/mastercf/options/submission/smtpd_milters=inet:benno-hostname:22500 ucr set mail/postfix/mastercf/options/submission/milter_default_action=tempfail ucr set mail/postfix/mastercf/options/smtps/smtpd_milters=inet:benno-hostname:22500 ucr set mail/postfix/mastercf/options/smtps/milter_default_action=tempfail
Als Hostnamen kann der FQDN des Benno MailArchiv Systems oder die IP-Adresse angegeben werden.
Zur Aktivierung der Konfiguration ist ein Neustart von Postfix notwendig: systemctl restart postfix
Die Kommunikation zwischen MTA und Benno Mailarchiv per MILTER erfolgt unverschlüsselt. Falls sich der Mailserver und die Benno MailArchiv App auf der gleichen Maschine befinden, kann die Kommunikation auch über den Hostnamen localhost erfolgen.
Viele SPAM- und Virenfilter benötigen einen SMTP-Daemon, über den die analysierten E-Mails wieder in das System eingespeist werden. Die Konfiguration der MILTER-Anbindung in der Konfigurationsdatei main.cf wirkt sich global auf alle SMTP Dienste des Postfix aus. Damit wird eine E-Mail, die beide SMTP-Dienste durchläuft zweimal in das Archiv importiert. Jeder SMTP-Dienst fügt eigene Header hinzu, so dass sich die Checksumme der E-Mail ändert und diese dadurch nicht als Duplikat erkannt werden kann.
Achtung: Bei SPAM-Filterung per Amavis muss der MILTER für den smtpd auf Port 10025 deaktiviert werden, falls Amavis als Post-Queue Filter konfiguriert ist. Im Falle einer Pre-Queue Konfiguration können die -o smtpd_milters= und -o non_smtpd_milters= Konfigurationen entfallen.
127.0.0.1:10025 inet n - 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 smtpd_authorized_xforward_hosts=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_milters= -o non_smtpd_milters=
Der MILTER wird durch die beiden „-o *_milters=“ Zeilen deaktiviert.
Alternativ zur Konfiguration in der „main.cf“ kann der MILTER auch in der Definition des SMTP Dienstes in der „master.cf“ konfiguriert werden. Diese Art der Konfiguration ist nicht ganz so einfach wie die der main.cf, bietet aber den Vorteil, dass der MILTER nicht versehentlich für mehrere SMTP Dienste aktiviert wird.
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd -o smtpd_milters=unix:/benno-milter/benno-milter.sock -o non_smtpd_milters=local:/benno-milter/benno-milter.sock -o milter_default_action=tempfail
Falls der submission-Port ebenfalls gebunden ist, muss die MILTER-Konfiguration hier ebenfalls eingefügt werden.
Bei Angabe des Pfades zum Socket ist die chroot Konfiguration des Dienstes wichtig. Falls chroot auf n gesetzt wird oder der Defaultwert in der Kommentarzeile mit n angegeben ist, muss der Pfad als kompletter Pfad zum Socket angegeben werden. Im Beispiel oben ist der Pfad relativ zum chroot-Verzeichnis konfiguriert.
Das vorcompilierte Programm kann einschließlich Init-Scripte und Beschreibung aus dem Tar-Archiv maildump-milter.tar.gz installiert werden.
Vor der Konfiguration des MILTER Daemons muss sichergestellt werden, dass das Spoolverzeichnis /srv/benno/inbox existiert. Dieses Verzeichnis sollte ist der Installation von Benno MailArchiv auf dem System angelegt worden. Falls der MILTER-Daemon auf einem anderen System installiert wird, muss das Verzeichnis nachträglich erstellt und der Benutzer benno angelegt werden. Dieser muss Schreibrechte auf dem Verzeichnis /srv/benno/inbox erhalten.
Auf einem Debian System wird das Paket benno-milter installiert. Dieses führt die Schritte zur Inbetriebnahme des MILTER Daemons automatisch durch.
useradd –system –gid postfix –shell /bin/false –home /srv/benno/inbox benno
adduser benno postfix
mkdir /srv/benno/inbox
chown benno.postfix /srv/benno/postfix
mkdir /var/spool/postfix/maildump-milter
chown benno.postfix /var/spool/postfix/maildump-milter
cp init.d/maildump-milter /etc/init.d/maildump-milter
update-rc.d maildump-milter start 05 2 3 4 5 . stop 01 0 1 6 .
cp default/maildump-milter /etc/default/maildump-milter
cp sbin/maildump-milter /usr/local/sbin/maildump-milter
/etc/init.d/maildump-milter start
Der main.cf werden die folgenden Zeilen hinzugefügt.
### Benno MailArchiv Milter smtpd_milters = unix:/maildump-milter/socket non_smtpd_milters = local:/maildump-milter/socket #milter_default_action = accept milter_default_action = tempfail ## if lmtp milter exist : # lmtpd_milters = unix:/maildump-milter/socket ### /Benno MailArchiv Milter
cp sbin/maildump2smtp /usr/local/sbin/maildump2smtp
cp sbin/benno-maildumpimport /usr/local/sbin/benno-maildumpimport
cp cron.d/benno-import /etc/cron.d/benno-import/
Das Logging des Services erfolgt mittels syslog mit der Facility LOG_MAIL.
Zu Testzwecken kann der Daemon auch auf der Konsole mit dem folgenden Kommandoaufruf gestartet werden.
sudo -u benno -g postfix /usr/sbin/benno-milter \ -p local:/var/spool/postfix/benno-milter/benno-milter.sock \ -o /srv/benno/inbox -l /tmp/benno-milter.pid
Der Paramter -l /tmp/benno-milter.pid
muss bei Benno MILTER < 2.10.0 weggelassen werden.
Der Benno MILTER Daemon wird von systemd gestartet. Die Konfiguration des Services wird im Servicefile /etc/systemd/system/benno-milter.service
festgelegt.
Der Daemon wird letztendlich mit dem folgenden Aufruf gestartet:
/usr/sbin/benno-milter \ -l ${RUNTIME_DIRECTORY}/benno-milter.pid \ -p ${SOCKET_TYPE}:${SOCKET} \ -o ${SPOOLDIR} ${MILTERARGS}
Die hier aufgeführten Umgebungsvariablen werden im Servicefile vorkonfiguriert:
# systemctl show benno-milter --property=Environment
SOCKET_TYPE=local SOCKET=/var/spool/postfix/benno-milter/benno-milter.sock SPOOLDIR=/srv/benno/inbox PIDFILE=/run/benno-milter/benno-milter.pid
Diese Variablen werden ggfs. durch die Einstellungen der Konfigurationsdatei /etc/default/benno-milter
überschrieben.
Falls der MILTER per UNIX DOMAIN Socket an Postfix angebunden ist, wird der Service mit dem User „benno“ und der Gruppe „postfix“ gestartet. Bei Anbindung per TCP Socket kann diese Einstellung abweichen. Die jeweils aktuelle Konfigurationseinstellung kann über die folgenden Aufrufe ausgelesen werden:
# systemctl show benno-milter --property=User # systemctl show benno-milter --property=Group
Vom Standard abweichende Einstellungen sind in der Konfigurationsdatei /etc/systemd/system/benno-milter.service.d/override.conf
festgelegt.
eval $(systemctl show benno-milter --property=User --property=Group \ --property=Environment --property=RuntimeDirectory|\ perl -pe 's/^Environment=//'); \ . /etc/default/benno-milter; \ sudo -u $User -g $Group \ /usr/sbin/benno-milter \ -l /run/${RUNTIME_DIRECTORY}/benno-milter.pid \ -p ${SOCKET_TYPE}:${SOCKET} \ -o ${SPOOLDIR} ${MILTERARGS}