Plesk ClamAV unter Debian 12 installieren (postfix free antivirus)
Hallo zusammen,
in den letzten Wochen bin ich von LiveConfig auf Plesk umgezogen. Dabei musste ich dann feststellen, dass bei Plesk wirklich alles Geld kostet – auch Virenscanner für E-Mails. Find’ ich doof, denn es gibt gute kostenlose Software Produkte, die “einfach” zu implementieren sind und kostenlos unter Debian zur Verfügung stehen. Also habe ich selber Hand angelegt und ClamAV unter Plesk installiert. Ich möchte mein Wissen gerne teilen.
Voraussetzungen:
- Debian 12
- Postfix-Mailserver
- Plesk Obsidian
- Root Zugriff
- vim
ClamAV und Clamsmtp installieren
Die Installation der benötigten Pakete gelingt mit dem Package-Manager “apt” einfach und schnell. Man führt dazu folgenden Befehl aus:
apt-get install clamav clamsmtp
In der Datei /etc/clamsmtpd.conf wird am Ende der Datei folgender textblock eingefügt:
Quarantine: off
VirusAction:/usr/local/bin/clamsmtp_on_virus.sh
Das Script /usr/local/bin/clamsmtp_on_virus.sh müssen wir nun anlegen, mit Leben füllen und die Berechtigungen setzen.
touch /usr/local/bin/clamsmtp_on_virus.sh
chmod 755 /usr/local/bin/clamsmtp_on_virus.sh
Mit vim /usr/local/bin/clamsmtp_on_virus.sh fügen wir nun folgenden Inhalt ein:
#!/bin/bash
#
# clamscan_on_virus 1.0.0
#
# Virus handler script for ClamSMTPd
#
# (c)2017 Harald Schneider
#
ADMIN="admin@domain.com"
MAILFROM="noreply@domain.com"
LOG="/var/log/virus.log"
DIR="/var/spool/clamsmtp"
exec 1>>$LOG
exec 2>>$LOG
# Add to log
echo "----------------------------------------"
echo FROM $SENDER
echo TO $RECIPIENTS
echo VIRUS $VIRUS
echo "----------------------------------------"
# Move to quarantine
# This only works if quarantine is enabled
#
#if [ -n "$EMAIL" ]; then
# mv "$EMAIL" "$DIR"
#fi
MAILTEXT="
The following threat has been deteced and eleminated:
VIRUSNAME: $VIRUS
SENDER IP: $REMOTE
SENT FROM: $SENDER
RECIPIENT: $RECIPIENTS
--
ClamScan Antivirus
"
# Send mail to original recipient:
# Uncomment if original user should get a notification
echo "$MAILTEXT" | mail -r $MAILFROM -s "VIRUS filtered ($SENDER)" $RECIPIENTS
# Send mail to admin
# uncomment if admin should get a notification
#echo "$MAILTEXT" | mail -r $MAILFROM -s "CLAMSCAN: VIRUS filtered ($SENDER)" $ADMIN
Wichtig: In dem Script solltet ihr noch die Variable ADMIN und MAILFROM auf eine entsprechende Mail setzen. ADMIN ist der Empfänger der Information, falls ein Virus gefunden wurde und MAILFROM setzt die Mail, von der aus die Benachrichtigung gesendet werden soll.
Postfix Mailserver konfigurieren
Damit der Postfix Mailserver auch entsprechend mit CLamAV interagiert, müssen wir diesen noch etwas nachkonfigurieren. Dazu muss die Datei /etc/postfix/main.cf bearbeitet werden.
vim /etc/postfix/main.cf
Nach
sender_dependent_default_transport_maps = hash:/var/spool/postfix/plesk/sdd_transport_maps
muss folgende Zeile in die Datei hinzugefügt werden:
content_filter = scan:127.0.0.1:10026
Damit entsprechend das Mapping auch korrekt funktioniert und die Mails danach entsprechend korrekt auch in die Mailboxen eingeliefert werden, ist es noch notwendig, die Datei /etc/postfix/master.cf zu ändern:
vim /etc/postfix/main.cf
An das Ende der Deit, wird folgender Inhalt eingefügt:
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - n - 16 smtpd
-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_header_body_checks,no_unknown_recipient_checks
Plesk ClamAV Datenbank aktualisieren
In Pleskt müssen wir noch unter “Tools & Einstellungen > Geplante Aufgaben (Cronjobs)” Einen Cronjob einfügen:
rm /var/log/clamav/freshclam.log;/usr/bin/freshclam --quiet
Als letzten Schritt werden nun noch die Dienste neu gestartet und fertig.
service clamsmtp restart
service clamav-daemon restart
service clamav-freshclam restart
service postfix restart
Testen ….
Man sollte sich nie auf eine Konfiguration blind verlassen. Deshalb ist ein Test ratsam. Es gibt eine Test Virus Signatur, die ClamAV erkennt. Dazu sendet man von der SSH-Konsole aus eine Mail an eine Mailbox, die auf dem Server existiert:
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | mail meine@mail.de
In der Mailbox sollte nun eine Mail mit dem Titel VIRUS filtered (root@yourmailserver.de) enthalten sein. Generell sollten die Mails nun auch im Mailheader folgende Information beinhalten:
X-AV-Checked: ClamAV using ClamSMTP on mail.domain.com
Das sollte es gewesen sein. Sollte es Probleme geben, kommentiert den Artikel gerne – ich helfe euch beim debugging.