Inhaltsverzeichnis
Postfix CentOS 7 - AMaViS anbinden (filter)
Postfix ist Wietse Venema's Mail-Server, welcher bei „IBM research“ als Alternative zum ehemals weit verbreiteten Programm Sendmail entwickelt wurde. Postfix erhebt den Anspruch ein schneller, einfach zu administrierender und sicherer Mail-Server zu sein.
AMaViS (A MAil Virus Scanner) ist ein Prüfprogramm, welches e-Mails auf SPAM und Viren untersucht und sich dabei externer Programme wie dem sehr bekannten SpamAssassin und z.B. ClamAV bedient und diese in sich selbst einbindet.
Voraussetzungen für nachfolgende Konfigurationen ist die Installation von AMaViS, wie dies unter nachfolgenden internen Link beschrieben ist:
WICHTIG - Bei CentOS ab der Version 7.x ist Postfix in der Version 2.10.1 enthalten, was die Nutzung einiger Möglichkeiten neuerer Postfix Versionen verhindert. Deshalb soll Postfix aus nachfolgendem Drittanbieter-Repository installiert werden! - Siehe dazu den nachfolgenden internen Link:
Postfix wird von Wietse Venema entwickelt.
Beschreibung | Externer Link |
---|---|
Homepage | http://www.postfix.org |
Dokumentation | http://www.postfix.org/FILTER_README.html |
Dokumentation | http://www.postfix.org/SMTPD_PROXY_README.html |
Dokumentation | http://www.ijs.si/software/amavisd/README.postfix.html |
Dokumentation | http://www.postfix.org/documentation.html |
Ankündigungen | http://www.postfix.org/announcements.html |
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Konfiguration: filter
Nachfolgende Änderungen werden an der Konfigurationsdatei
/etc/postfix/master.cf
durchgeführt, um eine Anbindung des Postfix an den AMaViS zu realisieren.
Dabei soll die Anbindung von Postfix an den AMaViS mit dem Verfahren
smtpd_proxy_filter
content_filter
erfolgen.
/etc/postfix/master.cf
Hier die Änderungen an der Konfigurationsdatei /etc/postfix/master.cf
(Nur relevanter Ausschnitt):
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== ... ... ... # Tachtler - new - # Outgoing traffic from trusted networks, with amavisd-new (altermime). 192.168.1.60:smtp inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter=192.168.0.70:10024 -o smtpd_client_connection_count_limit=4 -o smtpd_proxy_options=speed_adjust 192.168.0.60:smtp inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter=192.168.0.70:10024 -o smtpd_client_connection_count_limit=4 -o smtpd_proxy_options=speed_adjust 127.0.0.1:smtp inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter=192.168.0.70:10024 -o smtpd_client_connection_count_limit=4 -o smtpd_proxy_options=speed_adjust # Tachtler - new - # Outgoing traffic, BACK from amavisd-new from smtpd_proxy_filter. 192.168.0.60:10025 inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter= -o smtpd_milters= -o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32 -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_relay_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions= -o mynetworks=0.0.0.0/32,127.0.0.0/8,10.7.0.0/24,10.7.1.0/24,192.168.0.0/25,88.217.171.167/32 -o receive_override_options=no_unknown_recipient_checks # Tachtler - new - # Outgoing traffic, BACK from amavisd-new from content_filter. 192.168.0.60:10027 inet n - n - - smtpd -o content_filter= -o smtpd_proxy_filter= -o smtpd_milters= -o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32 -o smtpd_delay_reject=no -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_relay_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o smtpd_restriction_classes= -o mynetworks=0.0.0.0/32,127.0.0.0/8,10.7.0.0/24,10.7.1.0/24,192.168.0.0/25,88.217.171.167/32 -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,no_milters -o local_header_rewrite_clients= ... ... ... # Tachtler - enabled - submission inet n - n - - smtpd -o syslog_name=postfix/submission -o content_filter=lmtp:[192.168.0.70]:10026 -o lmtp_use_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions -o smtpd_recipient_restrictions= -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING ... ... ... pickup unix n - n 60 1 pickup -o content_filter=lmtp:[192.168.0.70]:10024 -o lmtp_use_tls=yes ...
Nachfolgend Erklärungen zu den WICHTIGSTEN Konfigurationen:
-o content_filter=
Deaktivieren der Weitergabe der auf diesem Weg eingelieferten e-Mails an weitere Filter.
smtpd_proxy_filter=192.168.0.70:10024
Die Option sorgt dafür, dass mit Angabe eines Hostnamen/IP-Adresse und TCP-Ports eine e-Mail an einen e-Mail-Filter-Proxy-Server weitergeleitet wird, hier z.B. AMaViS. AMaViS erhält die e-Mail vom Postfix SMTP-Server, um dann das Ergebnis zu einem weiteren Postfix SMTP-Server-Prozess wieder zurückzugeben.
-o smtpd_milter=
Deaktivieren der Weitergabe der auf diesem Weg eingelieferten e-Mails an weitere Milter.
smtpd_client_connection_count_limit=4
Die Option beschränkt die Anzahl der gleichzeitige Verbindungen, die jeder Client auf diesen Service aufbauen kann. Die Option kann auf die Anzahl der maximalen AMaViS Prozesse max_servers
gesetzt werden
smtpd_proxy_options=speed_adjust
Die Option sorgt dafür, dass hier eine Liste von Optionen angegeben werden kann, die steuert wie der Postfix SMTP-Server mit einem „Pre-Queue“ - smtpd_proxy_filter
- Inhaltsfilter kommuniziert.
speed_adjust
bewirkt, dass das erst eine Verbindung zum Content Filter, hier AMaViS aufgebaut wird, wenn die gesamte Nachricht empfangen wurde. Dies reduziert die Anzahl der gleichzeitig „Pre-Queue“ - smtpd_proxy_filter
- Inhaltsfilterprozesse.
192.168.0.60:10025 inet n - n - - smtpd
Festlegung auf welcher IP-Adresse und welchem Port ein weiterer smtpd
-Dienst/Daemon des Postfix läuft, um e-Mails entgegenzunehmen, welche von AMaViS bereits überprüft wurden. Dies ist erforderlich, dass keine e-Mail-Schleife entsteht und bei der Einlieferung nicht noch einmal alle Überprüfungen der e-Mail durchgeführt werden!
-o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32
Angabe von Clients, welche die XFORWARD
Funktion nützen dürfen. Siehe auch:
Information | Beschreibung |
---|---|
Dokumentation | http://www.postfix.org/XFORWARD_README.html http://www.postfix.org/postconf.5.html#smtpd_authorized_xforward_hosts |
-o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_relay_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=
-o smtpd_data_restrictions=reject_unauth_pipelining
Setzen der einzelnen Restrictions auf leeren Inhalt, somit finden keinerlei Prüfungen bei der Wiedereinlieferung nach Postfix statt. Eine bzw. zwei Ausnahmen von diesen Regelungen bestehen bei den smtpd_recipient_restrictions=permit_mynetworks,reject
, was sicherstellt, dass nur Clients aus mynetworks
auf Postfix Wiedereinliefern dürfen und bei smtpd_data_restrictions=reject_unauth_pipelining
das PIPELINING
deaktiviert ist!
-o mynetworks=0.0.0.0/32,127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32
Definition von mynetworks
, kann für die Wiedereinlieferung nach Postfix von den sonstigen Definitionen für mynetworks
abweichen.
-o receive_override_options=no_unknown_recipient_checks
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
Keine Überprüfung von Empfängern, dies sollte bei der Wiedereinlieferung nach Postfix durch AMaViS gesetzt sein, um keine unnötige Überprüfungen durchzuführen, da dies ggf. dann auch fehlschlagen könnte.
-o content_filter=lmtp:[192.168.0.70]:10024
-o content_filter=lmtp:[192.168.0.70]:10026
Dies kann für die Einlieferung von e-Mails, welche lokal auf dem Server mit Postfix erzeugt werden, z.B. via /etc/cron.daily
Skripten genutzt werden. In diesem Fall werden die e-Mail via pickup
bei Postfix eingeliefert und können so auch an AMaViS, jedoch nicht via MILTER eingeliefert werden.
WICHTIG - Falls dies zum Einsatz kommt, muss im AMaViS in der Konfigurationsdatei /etc/amavisd/amavisd.conf
der Parameter
$forward_method = 'smtp:[192.168.0.60]:10025';
bzw.
$forward_method = 'smtp:[192.168.0.60]:10027';
gesetzt werden, da sonst bei der Weitergabe der e-Mail nach AMaViS über die Methode „Post-Queue“ - content_filter
der Rückweg zu Postfix nicht mehr funktionieren würde, was bei einer reinen Einlieferung via MILTER nicht erforderlich wäre. Nachfolgende Fehlermeldungen würden erscheinen:
Oct 15 09:50:15 server70 amavis[3639]: (03639-01) (!!)TROUBLE in process_request: NOT ALL RECIPIENTS DONE, EMPTY DELIVERY_METHOD! at (eval 93) line 1184. Oct 15 09:50:15 server70 amavis[3639]: (03639-01) (!)Requesting process rundown after fatal error Oct 15 09:50:15 server70 amavis[3639]: (03639-01) (!)TempDir removal: tempdir is to be PRESERVED: /var/spool/amavisd/tmp/amavis-20151015T095010-03239-XVCbqPsd
und die Zustellung wäre nicht erfolgreich, was auch in der LOG-Datei von Postfix mit einem temporären Fehler zu sehen wäre, wie nachfolgender LOG-Datei-Ausschnitt zeigt:
... Oct 15 09:39:16 server60 postfix/lmtp[31788]: 905B4180008F: to=<klaus@tachtler.net>, orig_to=<root>, relay=192.168.0.70[192.168.0.70]:10024, delay=22626, delays=22 620/0.04/0.01/5.6, dsn=4.3.2, status=deferred (host 192.168.0.70[192.168.0.70] said: 421 4.3.2 Service shutting down, closing channel (in reply to end of DATA command)) ...
-o lmtp_use_tls=yes
WICHTIG - Versucht eine TLS verschlüsselte Verbindung zu initiieren, dies ist aber nur möglich, wenn der Empfangende Server dies auch unterstützt !!!
Neustart
Falls vorstehende Änderungen (natürlich an die jeweiligen Bedürfnisse angepasst) durchgeführt wurden, muss ein Neustart von Postfix durchgeführt werden.
Danach kann der postfix-Server mit nachfolgendem Befehle neu gestartet werden:
# systemctl restart postfix
Mit nachfolgendem Befehl kann der Status des abgefragt werden:
# systemctl status postfix postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled) Active: active (running) since Thu 2015-10-15 11:11:26 CEST; 7s ago Process: 1128 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS) Process: 1144 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS) Process: 1141 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS) Process: 1138 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS) Main PID: 1216 (master) CGroup: /system.slice/postfix.service ├─1216 /usr/libexec/postfix/master -w ├─1217 pickup -l -t unix -u -o content_filter=lmtp:[192.168.0.70]... └─1218 qmgr -l -t unix -u Oct 15 11:11:26 server60.idmz.tachtler.net systemd[1]: Starting Postfix Mail... Oct 15 11:11:26 server60.idmz.tachtler.net postfix/postfix-script[1214]: sta... Oct 15 11:11:26 server60.idmz.tachtler.net postfix/master[1216]: daemon star... Oct 15 11:11:26 server60.idmz.tachtler.net systemd[1]: Started Postfix Mail ... Hint: Some lines were ellipsized, use -l to show in full.