Linuxspicker

Admins kleiner Zettelkasten für die Lösung von Linuxproblemen

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: , , , , , ,
Kategorien: ,


Kommentare

Keine Kommentare

Kommentare

Geben Sie Ihren Kommentar hier ein. * Eingabe erforderlich. Sie müssen die Vorschau vor dem Absenden ansehen.