Jeder mit PLESK administrierte Server lässt sich kostenlos mit ClamScan Antivirus nachrüsten, sofern man SSH-Zugang mit Root-Rechten hat. Eingehende Mails werden dann automatisch von ClamScan nach Viren und Trojanern untersucht und ggf. aus dem Verkehr gezogen. Dieses Tutorial zeigt die einzelnen Schritte um ClamScan Antivirus unter PLESK zu integrieren.

Plesk: Postfix SMTP Server und Virenscanner

Plesk nutzt Postfix als SMTP-Server. Postfix selbst hat eine offene Architektur, die es erlaubt über TCP/IP Ports mit externen Programmen wie Virenscannern zu kommunizieren. Da ClamScan keine direkte Kommunikation per TCP/IP beherrscht, muss ein Art Proxy-Server, hier ClamSMTP dazwischen geschaltet werden.

Die folgende Grafik zeigt das Zusammenspiel der einzelnen Komponenten:

  • Postfix empfängt Mails von aussen über Port 25 und gibt diese über Port 10026 an ClamSMTP weiter.
  • ClamSMTP kommuniziert mit dem Virenscanner (ClamScan) über eine lokale Unix Socket und teilt mit, welche Dateien zu scannen sind.
  • Wenn keine Infektion vorliegt, gibt ClamSMTP die Mail an Postfix über Port 10025 zurück.
  • Ansonsten wurde die Mail von ClamScan je nach Konfiguration entweder gelöscht oder in Quarantäne verschoben.
  • Postfix speichert die Mail anschliessend in der Mailbox des Users.

ClamScan und ClamSMTP installieren

Neben ClamScan und  ClamSMTP wird noch ein vernünftiger Editor (hier Nano) benötigt. Mit dem folgenden Befehl werden die entsprechenden Pakete installiert:

apt-get install clamav clamsmtp nano

In den folgenden beiden Config-Dateien ist AllowSupplementaryGroups auf true zu setzen:

  • /etc/clamav/clamd.conf
  • /etc/clamav/freshcalm.conf

Die Datei /etc/clamsmtpd.conf wird mit folgenden Einträgen ergänzt:

Header: X-AV-Checked: ClamAV using ClamSMTP on mail.domain.com
Quarantine: off
VirusAction:/usr/local/bin/clamsmtp_on_virus.sh

mail.domain.com ist hier durch den Namen des eigenen SMTP-Servers zu ersetzen.

ClamSMTP VirusAction-Script

Nun erzeugen wir das zugehörige VirusAction-Script für ClamSMTP. Jede eingehende Mail durchläuft dieses Script. Enthält die Mail eine Bedrohung, so wird sie unmittelbar gestoppt. Der Admin und optional auch der Empfänger werden benachrichtigt:

nano /usr/local/bin/clamsmtp_on_virus.sh

Der Inhalt des Scripts fügen wie per Copy-Paste direkt in den Editor ein. Die Variablen ADMIN und MAILFROM müssen entsprechend angepasst werden:
#!/bin/bash
#
# clamscan_on_virus 1.0.0
#
# Virus handler script for ClamSMTPd
#
# (c)2017 Harald Schneider
#

ADMIN="notify@domain.com"
MAILFROM="clamscan@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:
#echo "$MAILTEXT" | mail -r $MAILFROM -s "VIRUS filtered ($SENDER)" $RECIPIENTS

# Send mail to admin
echo "$MAILTEXT" | mail -r $MAILFROM -s "CLAMSCAN: VIRUS filtered ($SENDER)" $ADMIN

Nachdem wir das Script gespeichert haben, setzen wir die Zugriffsrechte mit
chmod 755 /usr/local/bin/clamsmtp_on_virus.sh

ClamScan in Postfix integrieren

Um die Kommunikation zwischen ClamSMTP und Postfix herzustellen, müssen 2 Config-Dateien von Postfix entsprechend angepasst werden:

nano /etc/postfix/main.cf

Nach
sender_dependent_default_transport_maps = hash:/var/spool/postfix/plesk/sdd_transport_maps

muss diese Zeile eingefügt werden:
content_filter = scan:127.0.0.1:10026

Nun die 2. Datei:
nano /etc/postfix/master.cf

Hier fügt man am Ende der Datei die folgenden Zeilen ein:
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 receive_override_options=no_unknown_recipient_checks,no_header_body_checks
      -o smtpd_helo_restrictions= 
      -o smtpd_client_restrictions= 
      -o smtpd_sender_restrictions= 
      -o smtpd_recipient_restrictions=permit_mynetworks,reject 
      -o mynetworks_style=host 
      -o smtpd_authorized_xforward_hosts=127.0.0.0/8

Plesk: ClamScan automatisch aktualisieren

Das stündliche Aktualisieren der Virusdefinitionen von ClamScan wird über den Task-Scheduler von PLESK übernommen. Hierzu erstellen wir einen Task mit dem folgenden Kommando:

rm /var/log/clamav/freshclam.log;/usr/bin/freshclam --quiet

ClamScan + ClamSMTP + Postfix: GO !

Über die folgenden Befehle werden die Änderungen aktiviert:

/etc/init.d/clamav-daemon start
/etc/init.d/clamavsmtp start
/etc/init.d/postfix restart

Wenn wir alles richtig gemacht haben, enthalten alle ab jetzt empfangenen Mails im Header folgende Zeile:
X-AV-Checked: ClamAV using ClamSMTP on mail.domain.com

Um ClamScan zu testen, können wir eine Mail mit der EICAR-Testdatei an einen Empfänger auf unserem Server senden. Die Datei enthält nur die EICAR Virus-Signatur, jedoch nicht den Virus selbst. Ist alles OK, kommt beim Empfänger anstatt der Testmail die Nachricht des VirusAction-Scripts an.