Amavis und Postfix komplett über Unix Sockets kommunizieren lassen
Amavis ist in Verbindung mit Postfix ein zuverlässiger Spam- und Virenfilter. Beim Betrieb auf einem Server wäre es aus Performance- und auch aus Sicherheitsgründen besser, wenn beide Dienste komplett über Unix Sockets kommunizieren. Verbindungen über Unix Sockets werden schneller erstellt und können nicht von außen adressiert werden, was die Angriffsmöglichkeiten reduziert. Wenn einmal regelmäßig Newsletter oder Mailinglisten mit mehreren Tausend Empfängern abgearbeitet werden muss, kommen Postfix und Amavis bei den standardmäßig eingestellten TCP-Verbindungen schnell an ihre Grenzen und können ein System blockieren.
Im Netz existieren für das Problem der Einrichtung einer Kommunikation per Unix Sockets nur Teillösungen (Serverfault und Habr), die nach dem Upgrade von Debian 9 auf Debian 10 nicht mehr funktionierten.
Nach einigem Probieren mit obigen Angaben unter Berücksichtigung der Änderungen in Postfix zwischen 3.1 und 3.4 fand sich dann untenstehende Lösung. Getestet auf Debian 10 (Buster) mit Postfix 3.4.14 und Amavis 2.11.0.
Postfix
In den Konfigurationsdateien von Postfix in /etc/postfix
braucht es folgende Einstellungen:
main.cf
content_filter = amavis/lmtp-amavis:unix:var/run/amavis/amavisd.sock
master.cf
amavis/lmtp-amavis unix y - - - 6 lmtp
-o lmtp_data_done_timeout=1200
-o lmtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
amavis/amavis-back unix y - y - 6 smtpd
-o smtpd_tls_security_level=none
-o cleanup_service_name=amavis-cleanup
-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_unknown_recipient_checks,no_milters
amavis-cleanup unix n - n - 0 cleanup
-o mime_header_checks=
-o nested_header_checks=
-o body_checks=
-o header_checks=
Amavis
In den Einstellungen von Amavis in /etc/amavis
braucht es diese Einstellungen:
50-user
$unix_socketname = undef;
$inet_socket_bind = undef;
$inet_socket_port = undef;
@listen_sockets = ('/var/lib/amavis/amavisd.sock', '/var/spool/postfix/var/run/amavis/amavisd.sock');
$unix_socket_mode = 0660;
%interface_policy = (
'/var/lib/amavis/amavisd.sock' => 'AM.PDP-SOCK',
'/var/spool/postfix/var/run/amavis/amavisd.sock' => 'LMTP-SOCK'
);
$policy_bank{'LMTP-SOCK'} = {
protocol => 'LMTP'
};
$policy_bank{'AM.PDP-SOCK'} = {
protocol => 'AM.PDP',
auth_required_release => 0, # don't require secret-id for release
};
$forward_method = 'smtp:/var/spool/postfix/var/run/amavis/amavis-back';
$notify_method = 'smtp:/var/spool/postfix/var/run/amavis/amavis-back';
Für das Funktionieren des Transports von Postfix zu Amavis und wieder zurück zu Postfix braucht es aber noch einen Symlink von /var/spool/postfix/private/amavis
nach /var/spool/postfix/var/run/amavis
. Der Befehl
ln -s /var/spool/postfix/private/amavis /var/spool/postfix/var/run/amavis
schafft dann Abhilfe.
Somit ist sichergestellt, dass Amavis auf /var/spool/postfix/var/run/amavis/amavisd.sock
horcht und Mails von Postfix per LMTP-Protokoll entgegennimmt. Nach der Verarbeitung und Testung auf Spam und Viren sendet Amavis die Mail dann per SMTP-Protokoll an /var/spool/postfix/var/run/amavis/amavis-back
, wo Postfix diese entgegennimmt. Amavis horcht in dieser Konfiguration noch am Standardsocket /var/lib/amavis/amavisd.sock
, was wichtig für die Freigabe von Spam-Mails aus der Quarantäne per amavisd-release
ist.
Postfix sollte hier noch in der Gruppe Amavis sein, was sich per
usermod -G amavis postfix
bewerkstelligen lässt. Nach dem Neustart der beiden Dienste
service amavis restart
service postfix restart
sollte die Kommunikation komplett über Sockets ablaufen und sich der potenziell mögliche Maildurchsatz um einiges erhöht haben. Die Anleitung sollte auch bei Debian-Derivaten wie Ubuntu und Kali Linux funktionieren. Amavis ist jedoch schon arg veraltet und eine Ablösung durch das neuere Rspamd anzuraten.
Update: Mit Debian Bullseye und Postfix 3.5.18 und Amavis 2.11.1 scheint das nicht mehr möglich zu sein.
Stichworte: Amavis-new, Debian, Linux, Mailserver, Postfix, Unix-socket, Unix domain socket
Kategorien: Linux , Debian