Hier eine Anleitung, wie man auf Ubuntu-Server das AntiVir ClamAV installiert und 1 mal am Tag nach Viren suchen lässt.
Vorwort
Diese Anleitung zeigt, wie man…
- ClamAV installiert
- ClamAV konfiguriert
- die Virendatenbank manuell aktualisiert
- mit Hilfe eines Bash-Scripts, 1 mal am Tag nach Viren scannt und falls etwas gefunden wurde, eine Mail versendet
- einen Test macht, ob ClamAV ordnungsgemäß funktioniert
In diesem Fall handelt es sich um einen Viren-Scanner für der Apache-Server.
Voraussetzung
- Eine laufende Instanz von Ubuntu Server 20.04
- Eine laufende Instanz von Apache2
- Ein Benutzer mit Sudo-Berechtigungen
ClamAV installieren
Als erstes melden wir uns mit unserem Benutzer an und installieren mit folgendem Befehl ClamAV und ein Dienst um Mails (mutt) zu versenden:
sudo apt-get update
sudo apt-get install clamav clamav-daemon mutt -yCode-Sprache: JavaScript (javascript)
ClamAV konfiguriert
Wir passen die clamav Konfiguration an, um größere Dateien(50MB) und Container-Dateien mit bis zu 25 Unterverzeichnissen scannen zu können. Empfohlen wird:
- MaxDirectoryRecursion 25
- MaxFileSize 50M
- PCREMaxFileSize 50M
- StreamMaxLength 50M
# Eine Sicherung der Config-Datei erstellen
cp /etc/clamav/clamd.conf /etc/clamav/clamd.conf.bak
# Werte vor der Änderung anzeigen
egrep "*MaxDirectoryRecursion.*|*MaxFileSize.*|*PCREMaxFileSize.*|*StreamMaxLength.*" /etc/clamav/clamd.conf
# Werte ändern
sed -i "s/MaxFileSize.*/MaxFileSize 50M/" /etc/clamav/clamd.conf
sed -i "s/MaxDirectoryRecursion.*/MaxDirectoryRecursion 25/" /etc/clamav/clamd.conf
sed -i "s/PCREMaxFileSize.*/PCREMaxFileSize 50M/" /etc/clamav/clamd.conf
sed -i "s/StreamMaxLength.*/StreamMaxLength 50M/" /etc/clamav/clamd.conf
# Werte nach der Änderung anzeigen
egrep "*MaxDirectoryRecursion.*|*MaxFileSize.*|*PCREMaxFileSize.*|*StreamMaxLength.*" /etc/clamav/clamd.conf
# ClamAV relevanten Dienste neu gestarten
service clamav-freshclam restart && service clamav-daemon restartCode-Sprache: PHP (php)
Aktualisierung der Virendatenbank
ClamAV wird automatisch jede Stunde, durch den Dienst clamav-freshclam aktualisiert, wir müssen uns nicht darum kümmern.
Nach Abschluss der Installation aktualisieren wir aber einmal, die Virendatenbank manuell. Dazu stoppen wir den Dienst, der für die Aktualisierung der Virendatenbank zuständig ist.
sudo systemctl stop clamav-freshclam
Und jetzt können wir die Virendatenbank manuell aktualisieren, das kann etwas dauern.
sudo freshclam
Falls es nicht klappen sollte die Aktualisierung durchzuführen, kann man die Dateien selbst runterladen
# Dienst stoppen
sudo systemctl stop clamav-freshclam
# In den Ordner wechseln wo die Daten hingehören
cd /var/lib/clamav/
# Die alten Dateien sichern
sudo mv main.cvd main.cvd.bak
mv daily.cvd daily.cvd.bak
mv bytecode.cvd bytecode.cvd.bak
# Die neuen Dateien runterladen
sudo wget http://database.clamav.net/main.cvd
sudo wget http://database.clamav.net/daily.cvd
sudo wget http://database.clamav.net/bytecode.cvd
# aktualisieren
sudo freshclam
# Den Dienst wieder starten
sudo systemctl start clamav-freshclamCode-Sprache: PHP (php)
Falls der Download mit dem Befehl sudo wget http://database.clamav.net/main.cvd auch nicht klappt, dann kann man mit der URL, die Dateien, auf einem anderen Rechner runterladen und sie auf den Ubuntu-Server verschieben.
Automatisch scannen und per Mail benachichtigen
Jetzt erstellen wir ein Bash-Skript, dass das Verzeichnis /var/www/html/ scannt anschließend einen Cron-Job erstellt, um es jede Nacht auszuführen und wenn etwas gefunden wurde
sudo nano /usr/local/bin/clamscan_daily.sh
Wir fügen Folgendes in diese Datei ein und passen die oben stehenden Variablen an
#!/bin/bash
EMAIL_HEADER="Malware gefunden";
EMAIL_MSG="Bitte beachten Sie die angehängte Protokolldatei";
EMAIL_TO="user@example.com";
EMAIL_TO_CC="user2@example.com";
DIRTOSCAN="/var/www/html";
LOGFILE="/var/log/clamav/clamav-$(date +'%Y-%m-%d').log";
for S in ${DIRTOSCAN}; do
DIRSIZE=$(du -sh "$S" 2>/dev/null | cut -f1);
echo "Starting scan of "$S" directory.
Directory size: "$DIRSIZE".";
clamscan -ri --remove --detect-pua=yes "$S" >> "$LOGFILE";
#find /var/log/clamav/ -type f -mtime +30 -exec rm {} \;
MALWARE=$(tail "$LOGFILE"|grep Infected|cut -d" " -f3);
if [ "$MALWARE" -ne "0" ];then
echo "$EMAIL_MSG"|mutt -a "$LOGFILE" -s "Malware gefunden" -- -c "$EMAIL_TO_CC" "$EMAIL_TO";
fi
done
exit 0
Jetzt geben wir dieser Datei die Berechtigungen, das sie ausgeführt werden darf, das machen wir mit dem Befehl:
sudo chmod u+x /usr/local/bin/clamscan_daily.sh
Als nächstes erstellen wir den Cron-Job
sudo crontab -e
Wir fügen am Ende der Datei die folgende Zeile hinzu, um den Scan jeden Tag um 1 Uhr morgens auszuführen
1 1 * * * /usr/local/bin/clamscan_daily.sh > /dev/null 2>&1
Datei Speichern und schließen
Testen ob ClamAV ordnungsgemäß funktioniert
Um einen Test durchzuführen, kann man sich eine Test-Datei runterladen, die der Viren-Scanner finden sollte. Wir laden die Datei runter und legen sie im Stamm-Ordner (/var/www/html) vom Webhost ab.
sudo wget -P /var/www/html http://www.eicar.org/download/eicar.comCode-Sprache: JavaScript (javascript)
Als nächstes führen wir unser Bash-Script aus. Der Scan kann einige Minuten dauern.
sudo /usr/local/bin/clamscan_daily.sh
Wenn der Test erfolgreich war, sollte man eine Mail bekommen, das ein Virus gefunden wurde und man sollte einen Hinweis bekommen, das man in dem Log-File mehr Infos findet. Das Log-File wird mit dem aktuellem Datum benannt, in meinem Fall ist es /var/log/clamav/clamav-2021-05-12.log
# Log-File öffnen
sudo nano /var/log/clamav/clamav-2021-05-12.log
# Inhalt
/var/www/html/eicar.com: Eicar-Test-Signature FOUND
/var/www/html/eicar.com: Removed.
----------- SCAN SUMMARY -----------
Known viruses: 8543988
Engine version: 0.103.2
Scanned directories: 1221
Scanned files: 3686
Infected files: 1
Data scanned: 6242.88 MB
Data read: 3425.11 MB (ratio 1.82:1)
Time: 736.745 sec (12 m 16 s)
Start Date: 2021:05:12 07:22:20
End Date: 2021:05:12 07:34:37Code-Sprache: PHP (php)
Um nur zu Testen ob der Scanner die Test-Datei als Virus erkennt, nutzen wir folgenden Befehl
sudo clamscan -r /var/www/html/eicar.comCode-Sprache: JavaScript (javascript)
Um zu Testen, ob man ein Mail versenden kann, nutzen wir folgenden Befehl
echo "Mein Text"|mutt -s "Das ist ein Test" -- "mail-to@example.com"Code-Sprache: PHP (php)