Dies ist Teil 11 der Ubuntu-Mailserver-Tutorial-Reihe von Grund auf neu. In diesem Artikel zeige ich Ihnen, wie Sie Amavis verwenden und ClamAV Viren in E-Mail-Nachrichten zu scannen.
Amavis (A Mail Virus Scanner) ist eine leistungsstarke Schnittstelle zwischen einem Message Transfer Agent (MTA) wie Postfix und Inhaltsfilter. Ein Inhaltsfilter ist ein Programm, das die Kopfzeilen und den Text einer E-Mail-Nachricht scannt und normalerweise auf der Grundlage dessen, was es findet, Maßnahmen ergreift. Die häufigsten Beispiele sind der ClamAV-Virenscanner und SpamAssassin .
Amavis spricht das Standard-SMTP-Protokoll und kann auch die Milter-Schnittstelle von Sendmail verwenden. Es wird häufig für
verwendet- Viren-Scannen durch Integration mit ClamAV (Clam AntiVirus)
- Spam-Prüfung durch Integration mit SpamAssassin
- DKIM-Signatur und -Verifizierung. (Eigentlich ziehe ich es vor, OpenDKIM für die DKIM-Signierung und -Verifizierung zu verwenden.)
Voraussetzungen
Sie sollten mindestens Teil 1 (Postfix-SMTP-Server) und Teil 2 (Dovecot-IMAP-Server) der Ubuntu-Mailserver-Tutorial-Reihe von Grund auf abgeschlossen haben. Beachten Sie, dass, wenn Sie iRedMail oder Modoboa zum Einrichten Ihres Mailservers verwendet haben, Amavis und ClamAV bereits installiert und konfiguriert sind, sodass Sie diesem Tutorial nicht folgen müssen.
Warnung :Amavis und ClamAV benötigen ziemlich viel RAM. Stellen Sie sicher, dass Sie mindestens 1,3 GB freien RAM auf Ihrem Server haben, bevor Sie Amavis und ClamAV installieren. Der gesamte Mailserver-Stack (Postfix, Dovecot, Amavis, ClamAV, SpamAssassin, OpenDKIM, MySQL/MariaDB, PostfixAdmin und Roundcube Webmail) benötigt mindestens 3 GB RAM reibungslos laufen. Wenn Ihr Arbeitsspeicher erschöpft ist, treten Probleme auf, z. B. wenn der Mailserver offline geht oder nicht mehr reagiert.
Schritt 1:Installieren Sie Amavis auf Ubuntu
Amvis ist im Standard-Ubuntu-Repository verfügbar, führen Sie also den folgenden Befehl aus, um es zu installieren.
sudo apt install amavisd-new -y
Einmal installiert, startet es automatisch. Sie können den Status überprüfen mit:
systemctl status amavis
Ausgabe:
● amavis.service - LSB: Starts amavisd-new mailfilter Loaded: loaded (/etc/init.d/amavis; generated) Active: active (running) since Fri 2020-08-07 15:43:40 HKT; 1min 1s ago Docs: man:systemd-sysv-generator(8) Tasks: 3 (limit: 9451) Memory: 75.4M CGroup: /system.slice/amavis.service ├─1794260 /usr/sbin/amavisd-new (master) ├─1794263 /usr/sbin/amavisd-new (virgin child) └─1794264 /usr/sbin/amavisd-new (virgin child)
Wenn es nicht läuft, können Sie es starten mit:
sudo systemctl start amavis
Autostart beim Booten aktivieren.
sudo systemctl enable amavis
Standardmäßig lauscht es auf 127.0.0.1:10024 , wie man sehen kann mit:
sudo netstat -lnpt | grep amavis
Und es läuft als amavis
Benutzer. Um die Versionsnummer zu prüfen, führen Sie
amavisd-new -V
Beispielausgabe:
amavisd-new-2.11.0 (20160426)
Um die Protokolle von Amavis zu überprüfen, können Sie
ausführensudo journalctl -eu amavis
Viren werden häufig als Anhänge von E-Mail-Nachrichten verbreitet. Installieren Sie die folgenden Pakete für Amavis, um Archivdateien in E-Mail-Nachrichten wie .7z
zu extrahieren und zu scannen , .cab
, .doc
, .exe
, .iso
, .jar
, und .rar
Dateien.
sudo apt install arj bzip2 cabextract cpio rpm2cpio file gzip lhasa nomarch pax rar unrar p7zip-full unzip zip lrzip lzip liblz4-tool lzop unrar-free
Wenn Sie Ubuntu 18.04 verwenden, dann installieren Sie auch den ripole
Paket.
sudo apt install ripole
Beachten Sie, dass Amavis möglicherweise nicht gestartet werden kann, wenn Ihr Server keinen vollständig qualifizierten Domänennamen (FQDN) als Hostnamen verwendet. Und der Hostname des Betriebssystems kann sich ändern, daher wird empfohlen, einen gültigen Hostnamen direkt in der Amavis-Konfigurationsdatei festzulegen.
sudo nano /etc/amavis/conf.d/05-node_id
Suchen Sie die folgende Zeile.
#$myhostname = "mail.example.com";
Entfernen Sie das Kommentarzeichen (#) und ändern Sie mail.example.com
zu Ihrem echten Hostnamen.
$myhostname = "mail.linuxbabe.com";
Speichern und schließen Sie die Datei. Starten Sie Amavis neu, damit die Änderungen wirksam werden.
sudo systemctl restart amavis
Schritt 2:Postfix-SMTP-Server mit Amavis integrieren
Amavisd-new arbeitet als SMTP-Proxy. E-Mail wird ihm über SMTP zugeführt, verarbeitet und über eine neue SMTP-Verbindung an den MTA zurückgesendet.
Bearbeiten Sie die Hauptkonfigurationsdatei von Postfix.
sudo nano /etc/postfix/main.cf
Fügen Sie die folgende Zeile am Ende der Datei hinzu. Dies weist Postfix an, die Inhaltsfilterung zu aktivieren, indem jede eingehende E-Mail-Nachricht an Amavis gesendet wird, das auf 127.0.0.1:10024 lauscht .
content_filter = smtp-amavis:[127.0.0.1]:10024
Fügen Sie außerdem die folgende Zeile hinzu.
smtpd_proxy_options = speed_adjust
Dadurch wird die Postfix-Verbindung zum Inhaltsfilter verzögert, bis die gesamte E-Mail-Nachricht empfangen wurde, wodurch verhindert werden kann, dass Inhaltsfilter Zeit und Ressourcen für langsame SMTP-Clients verschwenden.
Speichern und schließen Sie die Datei. Bearbeiten Sie dann die master.cf
Datei.
sudo nano /etc/postfix/master.cf
Fügen Sie die folgenden Zeilen am Ende der Datei hinzu. Dies weist Postfix an, eine spezielle SMTP-Client-Komponente namens smtp-amavis
zu verwenden um E-Mail-Nachrichten an Amavis zu übermitteln. Bitte erlauben Sie mindestens ein Leerzeichen (Tabulator oder Leertaste) vor jedem -o
. In Postfix-Konfigurationen bedeutet ein vorangestelltes Leerzeichen, dass diese Zeile die Fortsetzung der vorherigen Zeile ist.
smtp-amavis unix - - n - 2 smtp -o syslog_name=postfix/amavis -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 -o smtp_tls_security_level=none
Fügen Sie dann die folgenden Zeilen am Ende der Datei hinzu. Dies weist Postfix an, einen zusätzlichen smtpd-Daemon auszuführen, der auf 127.0.0.1:10025 lauscht um E-Mail-Nachrichten von Amavis zu erhalten.
127.0.0.1:10025 inet n - n - - smtpd -o syslog_name=postfix/10025 -o content_filter= -o mynetworks_style=host -o mynetworks=127.0.0.0/8 -o local_recipient_maps= -o relay_recipient_maps= -o strict_rfc821_envelopes=yes -o smtp_tls_security_level=none -o smtpd_tls_security_level=none -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_end_of_data_restrictions= -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_address_mappings
Speichern und schließen Sie die Datei. Starten Sie Postfix neu, damit die Änderungen wirksam werden.
sudo systemctl restart postfix
Schritt 3:Amavis mit ClamAV integrieren
Da Postfix nun eingehende E-Mails an Amavis weiterleiten kann, müssen wir den ClamAV-Virenscanner installieren und in Amavis integrieren, damit eingehende E-Mails von ClamAV gescannt werden können.
Installieren Sie ClamAV auf Ubuntu.
sudo apt install clamav clamav-daemon
Es werden zwei systemd-Dienste von ClamAV installiert:
clamav-daemon.service
:der Clam AntiVirus Userspace-Daemonclamav-freshclam.service
:der ClamAV-Virendatenbank-Updater
Überprüfen Sie zuerst den Status von clamav-freshclam.service
.
systemctl status clamav-freshclam
Wie Sie sehen können, ist es aktiv (läuft) und verwendet 217,6 MB RAM auf meinem Mailserver. Überprüfen Sie dann das Journal/Protokoll.
sudo journalctl -eu clamav-freshclam
Ausgabe:
Hinweis:Wenn der obige Befehl nicht sofort beendet wird, drücken Sie die Q-Taste, um ihn zu beenden.
Wir können diese freshclam
sehen 3 Virendatenbanken heruntergeladen. CVD steht für ClamAV Virus Database.
- täglich.cvd
- main.cvd
- bytecode.cvd
Aber clamd
wurde nicht benachrichtigt, weil freshclam keine Verbindung zu clamd über /var/run/clamav/clamd.ctl
herstellen kann . Überprüfen Sie den Status von clamav-daemon.service
.
systemctl status clamav-daemon
Ausgabe:
Wie Sie sehen können, konnte es nicht gestartet werden, weil eine Bedingung nicht erfüllt wurde. In /lib/systemd/system/clamav-daemon.service
Datei gibt es zwei Bedingungen:
ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc} ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc}
Der clamav-daemon.service
konnte nicht gestartet werden, da main.cvd und daily.cvd beim Start noch nicht heruntergeladen wurden. Also müssen wir diesen Dienst nur neu starten.
sudo systemctl restart clamav-daemon
Jetzt sollte es laufen. Übrigens verwendet es 731,4 MB RAM auf meinem Mailserver. Wenn Ihr Mailserver nicht mehr über genügend RAM verfügt, schlägt der Dienst fehl.
systemctl status clamav-daemon.service
Der clamav-freshclam.service
überprüft die Aktualisierungen der ClamAV-Virendatenbank einmal pro Stunde.
Jetzt müssen wir die Virenprüfung in Amavis aktivieren.
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Kommentieren Sie die folgenden Zeilen aus, um die Virenprüfung zu aktivieren.
#@bypass_virus_checks_maps = ( # \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
Speichern und schließen Sie die Datei. Es gibt viele Antivirus-Scanner in /etc/amavis/conf.d/15-av_scanners
Datei. ClamAV ist die Standardeinstellung. Amavis ruft ClamAV über /var/run/clamav/clamd.ctl
auf Unix-Socket. Wir müssen den Benutzer clamav
hinzufügen zu den amavis
Gruppe.
sudo adduser clamav amavis
Starten Sie dann Amavis und den ClamAV-Daemon neu, damit die Änderungen wirksam werden.
sudo systemctl restart amavis clamav-daemon
Überprüfen Sie die Protokolle.
sudo journalctl -eu amavis
Sie können sehen, dass Amavis jetzt ClamAV verwendet, um Viren zu scannen.
Aug 08 17:26:19 mail.linuxbabe.com amavis[1233432]: Using primary internal av scanner code for ClamAV-clamd Aug 08 17:26:19 mail.linuxbabe.com amavis[1233432]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan
Wenn Sie nun eine E-Mail von anderen Mailservern wie Gmail an Ihren eigenen Mailserver senden und die E-Mail-Kopfzeilen überprüfen, finden Sie eine Zeile wie unten, die darauf hinweist, dass diese E-Mail von Amavis gescannt wurde.
X-Virus-Scanned: Debian amavisd-new at linuxbabe.com
Sie sollten auch das E-Mail-Protokoll überprüfen (/var/log/mail.log
), um festzustellen, ob Fehler vorhanden sind.
Schritt 4:Verwenden Sie einen dedizierten Port für E-Mail-Übermittlungen
ClamAV kann jetzt sowohl eingehende als auch ausgehende E-Mails scannen. Amavis überwacht Port 10024 auf eingehende und ausgehende E-Mail-Nachrichten. Es empfiehlt sich jedoch, einen anderen Port wie 10026 für E-Mail-Übermittlungen von authentifizierten Benutzern zu verwenden. Bearbeiten Sie die Amavis-Konfigurationsdatei.
sudo nano /etc/amavis/conf.d/50-user
Benutzerdefinierte Einstellungen sollten zwischen use strict;
hinzugefügt werden und 1;
Linie. Standardmäßig lauscht Amavis nur auf Port 10024. Fügen Sie die folgende Zeile hinzu, damit es auch auf Port 10026 lauscht.
$inet_socket_port = [10024,10026];
Fügen Sie dann die folgende Zeile hinzu, die die „ORIGINATING“-Richtlinie für Port 10026 festlegt.
$interface_policy{'10026'} = 'ORIGINATING';
Fügen Sie als Nächstes die folgenden Zeilen hinzu, die die „ORIGINATING“-Richtlinie definieren.
$policy_bank{'ORIGINATING'} = { # mail supposedly originating from our users originating => 1, # declare that mail was submitted by our smtp client allow_disclaimers => 1, # enables disclaimer insertion if available # notify administrator of locally originating malware virus_admin_maps => ["virusalert\@$mydomain"], spam_admin_maps => ["virusalert\@$mydomain"], warnbadhsender => 1, # force MTA conversion to 7-bit (e.g. before DKIM signing) smtpd_discard_ehlo_keywords => ['8BITMIME'], bypass_banned_checks_maps => [1], # allow sending any file names and types terminate_dsn_on_notify_success => 0, # don't remove NOTIFY=SUCCESS option };
Speichern und schließen Sie die Datei. Starten Sie Amavis neu.
sudo systemctl restart amavis
Überprüfen Sie den Status, um festzustellen, ob der Neustart erfolgreich war.
systemctl status amavis
Als nächstes bearbeiten Sie die Postfix-Master-Konfigurationsdatei.
sudo nano /etc/postfix/master.cf
Fügen Sie der submission
die folgende Zeile hinzu Dienst, sodass E-Mails von authentifizierten SMTP-Clients an Amavis weitergeleitet werden, der Port 10026 überwacht. Diese Zeile überschreibt (-o
) den content_filter
-Parameter in /etc/postfix/main.cf
Datei, die wir in Schritt 2 hinzugefügt haben.
-o content_filter=smtp-amavis:[127.0.0.1]:10026
So:
Wenn Sie smtps
aktiviert haben Service für Benutzer von Microsoft Outlook, dann müssen Sie diese Zeile auch zu smtps
hinzufügen Dienst.
Speichern und schließen Sie die Datei. Starten Sie Postfix neu, damit die Änderungen wirksam werden.
sudo systemctl restart postfix
Überprüfen Sie den Status, um festzustellen, ob der Neustart erfolgreich war.
systemctl status postfix
Spam-Filterung in Amavis
Hinweis :Wenn Sie mein SpamAssassin-Tutorial befolgt haben, müssen Sie die Spam-Prüfung in Amavis nicht aktivieren. Wenn Sie es aktivieren, wird jede E-Mail zweimal von SpamAssassin überprüft.
Um die Spam-Prüfung in Amavis zu aktivieren, installieren Sie SpamAssassin und zugehörige Pakete.
sudo apt install spamassassin libnet-dns-perl libmail-spf-perl pyzor razor
Bearbeiten Sie eine Amavis-Konfigurationsdatei.
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Kommentieren Sie die folgenden Zeilen aus, um die Spam-Prüfung zu aktivieren.
#@bypass_spam_checks_maps = ( # \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Speichern und schließen Sie die Datei. Starten Sie dann Amavis neu.
sudo systemctl restart amavis
DKIM in Amavis
Zwei gängige Softwareteile, die DKIM-Signaturen und -Verifizierungen unter Linux durchführen können, sind OpenDKIM und Amavis. Ich bevorzuge OpenDKIM, weil es mit OpenDMARC besser funktioniert. Daher werde ich nicht erklären, wie Sie Ihre E-Mail in Amavis mit DKIM signieren.
Standardmäßig kann Amavis die DKIM-Signatur eingehender E-Mail-Nachrichten überprüfen. Wenn auf Ihrem Mailserver OpenDKIM ausgeführt wird, können Sie die DKIM-Verifizierung in Amavis deaktivieren.
sudo nano /etc/amavis/conf.d/21-ubuntu_defaults
Suchen Sie die folgende Zeile und ändern Sie 1
auf 0
, sodass Amavis keine DKIM-Signaturen verifiziert.
$enable_dkim_verification = 1;
Speichern und schließen Sie die Datei. Starten Sie dann Amavis neu.
sudo systemctl restart amavis
Beim Empfang eingehender E-Mails ruft Postfix OpenDKIM über die Sendmail-Milter-Schnittstelle auf, um DKIM-Signaturen zu überprüfen, und leitet die E-Mail dann zur Virenprüfung an Amavis weiter. Beim Senden ausgehender E-Mails ruft Postfix OpenDKIM auf, um die E-Mails zu signieren, und leitet sie dann zur Virenprüfung an Amavis weiter.
Verbesserung der Amavis-Leistung
Standardmäßig führt Amavis 2 Prozesse aus. Wenn Sie die folgenden Zeilen im Mailprotokoll sehen (/var/log/mail.log
), bedeutet dies, dass Amavis E-Mails nicht schnell genug verarbeiten kann.
postfix/qmgr[1619188]: warning: mail for [127.0.0.1]:10024 is using up 4001 of 4008 active queue entries postfix/qmgr[1619188]: warning: you may need to reduce smtp-amavis connect and helo timeouts postfix/qmgr[1619188]: warning: so that Postfix quickly skips unavailable hosts postfix/qmgr[1619188]: warning: you may need to increase the main.cf minimal_backoff_time and maximal_backoff_time postfix/qmgr[1619188]: warning: so that Postfix wastes less time on undeliverable mail mail postfix/qmgr[1619188]: warning: you may need to increase the master.cf smtp-amavis process limit mail postfix/qmgr[1619188]: warning: please avoid flushing the whole queue when you have mail postfix/qmgr[1619188]: warning: lots of deferred mail, that is bad for performance
Um die Leistung zu verbessern, bearbeiten Sie die Amavis-Konfigurationsdatei.
sudo nano /etc/amavis/conf.d/50-user
Fügen Sie die folgende Zeile in der Datei zwischen use strict;
hinzu und 1;
Linie. Dadurch führt Amavis 4 Prozesse aus. Wenn Sie 10 CPU-Kerne haben, können Sie 4 auf 10 ändern. Beachten Sie, dass die Ausführung von mehr als 10 Amavis-Prozessen nur geringe Auswirkungen auf die Leistung hat.
$max_servers = 4;
Speichern und schließen Sie die Datei. Bearbeiten Sie dann die Postifx-Master-Konfigurationsdatei.
sudo nano /etc/postfix/master.cf
Finden Sie die smtp-amavis
Dienstdefinition und ändern Sie das Prozesslimit von 2 auf 4.
smtp-amavis unix - - n - 4 smtp -o syslog_name=postfix/amavis -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 -o smtp_tls_security_level=none
Speichern und schließen Sie die Datei. Starten Sie dann Amavis und Postfix neu, damit die Änderungen wirksam werden.
sudo systemctl restart amavis postfix
Führen Sie nun den folgenden Befehl aus. Sie sollten sehen, dass es jetzt 4 Amavis-Prozesse gibt.
sudo amavisd-nanny
Drücken Sie Ctrl+C
um amavisd-nanny zu stoppen.
Überspringen Sie die Virenprüfung für Ihre Newsletter
Wenn Sie Ihren Mailserver zum Versenden von Newslettern verwenden und Amavis und ClamAV aktivieren, werden viele CPU- und RAM-Ressourcen für die Virenprüfung verwendet, wenn Sie Newsletter an Ihre Abonnenten senden. Es könnte dazu führen, dass Ihr Mailserver nicht mehr reagiert. Sie können die Virenprüfung für Ihre Newsletter überspringen, indem Sie die folgende Methode anwenden.
Bearbeiten Sie die Postfix-Master-Konfigurationsdatei.
sudo nano /etc/postfix/master.cf
Fügen Sie am Anfang dieser Datei die folgenden Zeilen hinzu. Dadurch wird smtpd
aktiviert auf Port 2525 des lokalen Hosts und kann Client-Verbindungen akzeptieren, die von demselben Server initiiert wurden. Wenn ein anderer Prozess auf Port 2525 lauscht, können Sie 127.0.0.1:2525 in etwas anderes ändern, z. B. 127.0.0.1:2552. Beachten Sie, dass der content_filter
Parameter ist auf none
gesetzt , was bedeutet, dass E-Mails nicht von ClamAV gescannt werden.
127.0.0.1:2525 inet n - - - 1 smtpd -o syslog_name=postfix/2525 -o postscreen_greet_action=ignore -o content_filter=
Fügen Sie dann die folgenden Zeilen am Ende dieser Datei hinzu. Ersetzen Sie 12.34.56.78 durch die öffentliche IP-Adresse des Mailservers. Dadurch wird ein weiterer Postfix-Übermittlungs-Daemon erstellt, der Port 10587 überwacht. Dies ist für Client-Verbindungen von einem anderen Server.
12.34.56.78:10587 inet n - y - - smtpd -o syslog_name=postfix/10587 -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o content_filter=
Speichern und schließen Sie die Datei. Dann postfix neu starten.
sudo systemctl restart postfix
Wenn Ihre Newsletter-Anwendung auf dem Mailserver läuft, geben Sie 127.0.0.1:2525
an als SMTP-Host, ohne SMTP-Authentifizierung. Wenn Ihre Newsletter-Anwendung auf einem anderen Server läuft, geben Sie 12.34.56.78:10587
an als SMTP-Host, mit SMTP-Authentifizierung.
Fehlerbehebung
Wenn Ihr Postfix-SMTP-Server keine ausgehenden E-Mails senden kann und Sie die folgende Fehlermeldung im E-Mail-Protokoll finden (/var/log/mail.log
),
relay=none, delay=239, delays=239/0.04/0/0, dsn=4.3.0, status=deferred (server unavailable or unable to receive mail)
es könnte sein, dass amavis nicht läuft, also müssen Sie seinen Status überprüfen:
sudo systemctl status amavis
Sie können es neu starten mit:
sudo systemctl restart amavis
Eine weitere Ursache für diesen Fehler ist, dass Sie die TLS-Verbindung für Postfix erzwingen, wenn Sie ausgehende E-Mails mit der folgenden Einstellung in /etc/postfix/main.cf
senden Datei.
smtp_tls_security_level = enforce
Da Postfix keine TLS-Verbindung zu Amavis aufbauen kann, wird die E-Mail zurückgestellt. Sie sollten die folgende Einstellung verwenden.
smtp_tls_security_level = may
Starten Sie dann Postfix neu.