Zum Inhalt springen
Security & Datenschutz

Wie kann ich auf Ubuntu Virus scannen

Virenscanner unter Linux: ClamAV auf Ubuntu installieren, mit freshclam aktualisieren, scannen, per Timer automatisieren und Fehlalarme behandeln.

Von DI Herwart Wermescher, MBA ↗

Für Linux gibt es mit ClamAV einen gratis Virus Scanner. Ich setze ihn seit Jahren auf Datei- und Mailservern ein, und die Frage nach dem Sinn kommt jedes Mal. Deshalb vorweg die Einordnung, danach die Praxis.

Warum man unter Linux überhaupt scannt

Der häufigste Grund hat wenig mit dem eigenen System zu tun: Ein Linux-Server reicht Dateien weiter. Ein Samba-Share, ein Mailserver, ein Upload-Verzeichnis eines Webservers oder ein Backup-Ziel sammelt Dateien ein, die anschließend auf Windows-Clients landen. Ein Windows-Trojaner richtet auf dem Ubuntu-Server selbst nichts an, wird von dort aber fröhlich weitergegeben. Genau diese Rolle als Zwischenstation ist der Grund für den Scanner.

Der zweite Grund ist Compliance. In vielen Regelwerken und Kundenaudits steht schlicht, dass auf Fileservern ein Virenscanner läuft, unabhängig vom Betriebssystem.

Der dritte Grund ist der eigene Schutz. Schadsoftware für Linux gibt es sehr wohl, meist in Form von Cryptominern und Webshells nach einer ausgenutzten Schwachstelle. ClamAV erkennt einen Teil davon. Zur Absicherung Deines Systems gehört neben dem Virenscan auch eine Firewall, die Du mit ufw einrichten kannst.

Welche Virenscanner es unter Linux gibt

  • ClamAV ist der Open-Source-Standard und in den Paketquellen jeder Distribution. Signaturbasiert, mit eigenem Daemon, Mail- und Proxy-Anbindung. Für die allermeisten Fälle die erste Wahl.
  • rkhunter und chkrootkit suchen keine klassischen Viren, sondern Rootkits und manipulierte Systemdateien. Sie ergänzen ClamAV, weil sie einen anderen Angriffstyp abdecken.
  • Lynis ist ein Audit-Werkzeug zur Systemhärtung. Es prüft Konfiguration, Dienste und Rechte und gibt priorisierte Empfehlungen aus.
  • Kommerzielle Lösungen von Herstellern wie ESET, Sophos oder Kaspersky gibt es für Linux-Server ebenfalls. Interessant werden sie vor allem dort, wo zentrale Verwaltung, Reporting und Support gefordert sind.

ClamAV ist dabei nur ein Baustein – einen Überblick über weitere Tools für ein Security-Audit findest Du in einem eigenen Beitrag.

ClamAV installieren

Die Installation geht denkbar einfach:

sudo apt install clamav clamav-daemon

Das Paket clamav bringt die Kommandozeilenwerkzeuge, clamav-daemon den Hintergrunddienst. Mitinstalliert wird clamav-freshclam, der die Signaturen aktuell hält. Die Konfiguration liegt unter:

/etc/clamav

Signaturen aktualisieren

Ein Scanner ohne aktuelle Signaturen ist nutzlos. Von Hand aktualisierst Du so:

sudo freshclam

Wichtig dabei: Nach der Installation läuft clamav-freshclam bereits als Dienst und holt die Updates mehrmals täglich selbst. Startest Du freshclam manuell, während der Dienst läuft, bekommst Du eine Sperrmeldung auf die Datenbankdatei. Dann stoppst Du den Dienst kurz:

sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam

Im Normalbetrieb brauchst Du das nicht. Es lohnt nur direkt nach der Installation, weil der erste Download der Signaturen einige hundert Megabyte umfasst und ein paar Minuten dauert.

Scan durchführen

Der Klassiker für ein Verzeichnis:

clamscan -r --bell -i /home

Die Optionen im Einzelnen:

  • -r durchsucht rekursiv alle Unterverzeichnisse.
  • -i zeigt ausschließlich Treffer an. Ohne diese Option bekommst Du für jede saubere Datei eine Zeile und siehst den Wald vor lauter Bäumen nicht.
  • --bell gibt bei einem Fund einen Signalton aus.

Willst Du das ganze System prüfen, schließe die virtuellen Dateisysteme aus:

clamscan -r -i --exclude-dir="^/sys" --bell /

Für einen Lauf im Hintergrund mit Protokoll:

clamscan -r -i --exclude-dir="^/sys" --bell / --log=/tmp/scan.log &

Du kannst mittels clamscan -h herausfinden, welche weiteren Parameter zur Verfügung stehen.

Ein Wort zu --remove: Diese Option löscht Fundstücke sofort und ohne Rückfrage. Bei einem Fehlalarm auf einer Konfigurationsdatei oder einem Backup ist der Schaden dann größer als der Nutzen. Ich arbeite stattdessen mit --move=/var/quarantaene, schaue mir die Dateien in Ruhe an und lösche erst danach.

Das Ergebnis lesen

Am Ende jedes Laufs steht eine Zusammenfassung mit Scanned files, Infected files und der Laufzeit. Interessant sind die Zeilen darüber im Format /pfad/zur/datei: Name.Der.Signatur FOUND. Der Signaturname sagt Dir, worum es geht. Einträge mit Heuristics. im Namen sind heuristische Treffer und deutlich öfter Fehlalarme als klare Signaturtreffer. Win.Trojan. oder Win.Malware. bezeichnet Windows-Schadsoftware, die auf dem Linux-System selbst nicht läuft, aber weitergereicht würde.

ClamAV als Daemon nutzen

clamscan lädt bei jedem Aufruf die komplette Signaturdatenbank neu, das kostet bei jedem Start um die 30 Sekunden und viel Arbeitsspeicher. Läuft der Daemon, hält er die Datenbank dauerhaft im Speicher und Du sprichst ihn mit dem schlanken Client an:

sudo systemctl enable --now clamav-daemon
clamdscan --fdpass -i /home

Das ist um ein Vielfaches schneller und die richtige Wahl für regelmäßige Läufe. --fdpass übergibt den Dateideskriptor und umgeht damit Rechteprobleme, wenn der Daemon unter dem Benutzer clamav läuft und die Dateien ihm nicht gehören. Mit --multiscan verteilt er die Arbeit auf mehrere Kerne.

Regelmäßiger Scan per Timer oder cron

Am einfachsten über cron. Ein Eintrag in /etc/cron.d/clamav-scan für einen nächtlichen Lauf:

30 3 * * * root /usr/bin/clamdscan --fdpass -i /home /srv --log=/var/log/clamav/scan.log

Damit der Scan regelmäßig läuft, kannst Du ihn wie einen nächtlichen Ubuntu-Neustart per cron automatisieren.

Sauberer ist ein systemd-Timer, weil er verpasste Läufe nachholt und Du den Status über systemctl list-timers siehst. Dafür legst Du eine clamav-scan.service mit dem Befehl und eine clamav-scan.timer mit OnCalendar=*-*-* 03:30:00 und Persistent=true unter /etc/systemd/system/ an.

Wichtig ist in beiden Fällen, dass Du das Ergebnis auch siehst. Ein Scan, dessen Log niemand liest, ist ein Scan, den es nicht gibt. Ich lasse mir bei Funden eine Mail schicken.

Testen

Gehe in das Verzeichnis, in dem Du testen willst, und erzeuge eine EICAR-Datei:

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

oder einfach

curl -O http://www.eicar.org/download/eicar.com

Ein anschließender clamscan -i in diesem Verzeichnis muss die Datei melden. Damit weißt Du, dass Signaturen geladen sind und der Scanner arbeitet.

Umgang mit Falschmeldungen

Fehlalarme gehören dazu, besonders bei heuristischen Treffern, Testdaten aus Security-Werkzeugen und Mailarchiven mit alten Anhängen. Bevor Du eine Datei löschst, prüfe sie über einen zweiten Scanner oder VirusTotal.

Bestätigt sich der Fehlalarm, nimmst Du die Datei über eine Signaturausnahme heraus. Dazu trägst Du den Signaturnamen in /var/lib/clamav/local.ign2 ein und startest den Daemon neu:

echo 'Heuristics.Beispiel.Signatur' | sudo tee -a /var/lib/clamav/local.ign2
sudo systemctl restart clamav-daemon

Ganze Pfade schließt Du beim Aufruf mit --exclude-dir aus. Sei damit sparsam, denn jede Ausnahme ist ein blinder Fleck.

Deinstallieren

Stoppen, deinstallieren und Konfiguration samt Datenbank entfernen:

sudo systemctl stop clamav-freshclam
sudo systemctl stop clamav-daemon
sudo apt purge -y clamav clamav-daemon clamav-freshclam
sudo apt autoremove -y
sudo rm -rf /etc/clamav 
sudo rm -rf /var/log/clamav 
sudo rm -rf /var/lib/clamav
sudo apt-get update

Wie bei ClamAV gilt auch fürs ganze System: Aktuelle Pakete schützen am besten – wie Du Ubuntu LTS aktuell hältst, liest Du hier.

Über diesen Blog

Ein Sammelsurium an Denkanstößen.

Hier sammle ich Wissen, Argumente und Links zu allem, was mich beschäftigt — von Technik über Küche bis Nachhaltigkeit. Beruflich berate ich zu Cybersecurity.