Cronjob: Virensuche mit Clamav und E-Mail-Alert

virus windows virus ubuntu shell script root linux eicar cron.daily cron clamy clamscan bash admin Viren haben es schwer, auf Linuxcomputern Schaden anzurichten . Läuft Linux jedoch als Dateiserver, auf dem Windowsbenutzer munter Dateien rauf und runter schaufeln, dann kann der Einsatz eines Virenscanners unter Linux Sinn machen.

In diesem Beispiel gehe ich von einem nur leicht frequentierten Server aus. Es soll uns deshalb reichen, einen Cronjob einzurichten, der ein Verzeichnis $SCANDIR einmal täglich auf Viren untersucht. Wird ein Virus gefunden, soll dies per E-Mail an den Administrator gemailt werden.

Als erstes installieren wir das Paket clamav inklusive seiner benötigten Abhängigkeiten.

Nun erstellen wir ein Script, legen es z.B. als /etc/cron.daily/clamscan ab und machen es ausführbar. So wird sichergestellt, dass es einmal täglich (meist nachts) läuft.

WICHTIG: Ein Skript, das in /etc/cron.daily bzw. /etc/cron.weekly abgelegt ist, darf keinen Punkt (“.”) enthalten. Ein Skript z.B. mit dem Namen clamscan.sh würde wegen des Punktes im Namen nicht ausgeführt werden.

Besser ist es, das Skript /etc/cron.daily/clamscan nur mit folgendem Inhalt zu füllen:

#!/bin/sh
/usr/local/bin/clamscan_daily.sh /dev/null 2>&1

Dieses verweist dann nur auf das folgende Skript /usr/local/bin/clamscan_daily.sh, das den eigentlichen Job erledigt:

#!/bin/sh
#Erst mal die Virensignaturen updaten....
freshclam
# Welches Verzeichnis soll gescannt werden?
SCANDIR=/mnt/windowsshares
# Betreffzeile definieren:
SUBJECT="VIRUS ENTDECKT AUF `hostname`!!!"
# E-Mail an root auf dem lokalen Server, bitte ...
EMAIL="root"
# Wohin loggen wir?
# Diese Datei muss vor dem Scan bereits existieren!
LOG=/var/log/clamav/scan.log
# FUNKTION:
# Nach dem Scan im Logfile herausfinden, ob es einen Virus gab
# Alles was "Infected" ist und ungleich 0 ist, wird gemeldet!
log_check () {
if [ `tail -n 12 ${LOG} | grep Infected | grep -v 0 | wc -l` != 0 ]
then
EMAILMESSAGE=`mktemp /tmp/virus-alert.XXXXX`
echo "To: ${EMAIL}" >> ${EMAILMESSAGE}
echo "From: root@localhost" >> ${EMAILMESSAGE}
echo "Subject: ${SUBJECT}" >> ${EMAILMESSAGE}
echo "Importance: High" >> ${EMAILMESSAGE}
echo "X-Priority: 1" >> ${EMAILMESSAGE}
echo "`tail -n 50 ${LOG}`" >> ${EMAILMESSAGE}
sendmail -t < ${EMAILMESSAGE}
fi
}
# SCAN DURCHFÜHREN...
clamscan -r $SCANDIR --exclude-dir=/sys/ --quiet --infected --log=${LOG}
# Prüfen, und wenn infiziert, dann mail senden
log_check
# Skript Ende: Job's done...

Zum Testen kann man ein EICAR-File nehmen. Dazu einfach den folgenden String (aber auch nicht mehr oder weniger, nur genau diesen String, auch keinen Zeilenumbruch)…

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

… in eine Datei schreiben. Dieser String ist harmlos, müsste aber von Antivirenscannern als Virus entdeckt werden. Mehr Infos bei EICAR.