AMaViS steht für A MAil Virus Scanner und ist ein serverseitiger Virenscanner, der auf Unixoiden Mail-Servern zum Einsatz kommt. Mit der Weiterentwicklung wurde die Implementierung für Spamfilter wie SpamAssassin erweitert.
AMaViS wurde in der Programmiersprache Unix-Shell geschrieben, im Jahr 2000 wurde es dann auf Perl umgestellt,
ab dann amavis-new für die Standardschnittstelle zwischen den Mail Transfer Agents (MTA) und den Content filter, beispielsweise kompatibel mit Postfix, sendmail oder Exim. Antivirenprogramme die mit amavis-new interagieren sind beispielsweise AntiVir Unix oder ClamAV. Das aktuelle amavisd-new steht unter der GPLv2 und BSD-Lizenz und bietet auch die Möglichkeit, SpamAssassin und andere Filterprogramme (Milter) einzubinden.
INSTALLATION
In diesem Beitrag wird die Installation und Konfiguration von amavis-new beschrieben, mit der Integration für Postfix auf einem CentOS 7 basierten MTA. Es wird vorausgesetzt das Postfix bereits auf dem Host ist und Kenntnisse über Postfix vorhanden sind.
Es wird das EPEL Repository eingebunden, um anschließend die Komponenten zu installieren.
1 2 3 |
~]# yum update ~]# yum -y install epel-release |
Die Dienstprogramme amavis-new und ClamAV installieren.
1 2 3 |
~]# yum clean all ~]# yum -y install amavisd-new clamav-scanner clamav-scanner-systemd |
Folgende Anpassungen in der amavisd Konfigurationsdatei editieren mit nano oder vi /etc/amavisd/amavisd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Zeile 20 der eigene domain name $mydomain = 'domain.ch'; # Zeile 152 der eigene hostname $myhostname = 'mail.domain.ch'; # Zeile 50 lokale domain und netzwerke hinzufügen @local_domains_maps = ( [".$mydomain", '.domain.ch', 'next.domainxy.ch'] ); # list of all local domains @mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10 10.0.0.0/8 10.127.99.0/24 ); # Zeile 58 erweitern der ports $inet_socket_port = 10024,10026; # Zeile 154 auskommentieren $notify_method = 'smtp:[127.0.0.1]:10025'; $forward_method = 'smtp:[127.0.0.1]:10025'; # Zeile 157 ändern auf D_PASS $final_virus_destiny = D_PASS; $final_spam_destiny = D_PASS; |
Bei aktivem SELinux wird eine Policy hinzugefügt.
1 2 3 |
~]# setsebool -P antivirus_can_scan_system 1 ~]# setsebool -P clamd_use_jit 1 |
Der Clamd Virenscanner kann mithilfe des Stream Editors sed editiert werden, folgende Befehlszeilen im Terminal ausführen:
1 2 3 |
~]# sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf ~]# sed -i -e "s/^Example/#Example/" /etc/freshclam.conf |
Die Clamd Konfigurationsdatei /etc/clamd.d/scan.conf wie folgt konfigurieren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# line 8 comment out #Example # line 14 uncomment LogFile /var/log/clamd.scan # line 44 uncomment LogSyslog yes # line 66 uncomment PidFile /var/run/clamd.scan/clamd.pid # line 70 uncomment TemporaryDirectory /var/tmp # line 85 uncomment LocalSocket /var/run/clamd.scan/clamd.sock # line 97 uncomment FixStaleSocket yes # line 101 uncomment TCPSocket 3310 # line 195 insert uid User clamscan |
Die Logdatei für Clamd erstellen und die UserID zuweisen:
1 2 3 |
~]# touch /var/log/clamd.scan ~]# chown clamscan:clamscan /var/log/clamd.scan |
Nun die Antiviren Erkennungsdatenbank herunterladen und aktualisieren.
1 2 |
~]# freshclam |
Nachdem die amavis-new Konfiguration abgeschlossen ist, geht es an die Integration von Postfix, der Content-Filter kann in der Postfix Datei main.cf an beliebiger stelle hinzugefügt werden, durch das editieren mit vi /etc/postfix/main.cf
1 2 |
content_filter=smtp-amavis:[127.0.0.1]:10024 |
Dazu wird in der Datei /etc/postfix/master.cf die Schnittstelle für amavis-new am ende hinzugefügt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 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 strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 |
Jetzt Postfix neu starten damit die Konfiguration wirksam wird.
1 2 |
~]# systemctl restart postfix |
amavis-new starten und zur Autostart Konfiguration hinzufügen.
1 2 3 4 5 |
~]# systemctl start clamd@scan ~]# systemctl start amavisd.service ~]# systemctl enable clamd@scan ~]# systemctl enable amavisd.service |
Amavisd Funktionstest
Zum Abschluss kann man amavisd testen. Damit beim herunterladen und installieren von amavis-new, durch erkennen einer UTM Firewall der download nicht verhindert wird, wegen der darin enthaltenen Virus-Test-Signatur, ist diese verkapselt.
Dazu ins Verzeichnis /usr/share/doc/amavisd-new-*/test-messages wechseln und folgende Zeile im Terminal-Shell ausführen, damit werden die EICAR-Test Dateien entkapselt und entpackt:
1 2 3 |
~]# cd /usr/share/doc/amavisd-new-*/test-messages ~]# perl -pe 's/./chr(ord($&)^255)/sge' |
Nun mit sendmail im Terminal die EICAR-Test-Signatur an sich versenden.
1 2 |
~]# sendmail -i deine_email@domain.ch < sample-virus-simple.txt |
In der Protokolldatei /var/log/maillog sollte dann folgender Eintrag registriert sein.
1 2 |
mail amavis[11855]: (11855-01) Passed INFECTED (Eicar-Test-Signature) {RelayedTaggedInbound,Quarantine d}, [127.0.0.1] <root@mail.domain.ch> -> <meine_email@domain.ch>, Message-ID: <20190305170628.630A7C5428@mail.domain.ch>, mail_id: SSDU53BXGSVK, Hits: 2.547, size: 789, queued_as: A808AC5425, 1207 ms |
Erscheint beim versuch mit sendmail die Testmail zu senden der Fehler:reject: header To: undisclosed-recipients, muss die Datei sample-virus-simple.txt editiert werden, und bei From: und To: eine gültige Email eingetragen werden.
Troubleshoting
Die Überprüfung der Funktionalität von amavis-new kann mit folgendem vorgehen Aufschluss geben, als erstes der Status der daemon überprüfen, mit dem Parameter -l werden zusätzlich die letzten Zeilen aus dem Protokoll ausgegeben:
1 2 |
~]# systemctl status postfix clamd@amavisd -l |
Weiter sollte auch sichergestellt sein das die Ports 10024 und 10025 aktiv LISTEN sind:
1 2 3 4 5 6 7 8 9 |
~]# ss -tuln4 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 127.0.0.1:10024 *:* tcp LISTEN 0 100 127.0.0.1:10025 *:* tcp LISTEN 0 100 *:587 *:* tcp LISTEN 0 100 *:465 *:* tcp LISTEN 0 128 *:22 *:* tcp LISTEN 0 100 *:25 *:* |
Mit telnet dieses erst installiert werden muss, lässt sich die Funktion des amavisd und Postfix daemon interaktiv überprüfen:
1 2 3 4 5 6 7 8 9 |
~]# telnet localhost 10024 Trying ::1... Connected to localhost. Escape character is '^]'. 220 [::1] ESMTP amavisd-new service ready quit 221 2.0.0 [::1] amavisd-new closing transmission channel Connection closed by foreign host. |
1 2 3 4 5 6 7 8 9 10 11 |
~]# telnet localhost 10025 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.domain.ch ESMTP quit 221 2.0.0 Bye Connection closed by foreign host. |