15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
24.10.2024

Wie man ClamAV auf Linux installiert: Ein vollständiger technischer Leitfaden

ClamAV ist eine quelloffene, plattformübergreifende Antivirus-Engine, die von Cisco Talos gepflegt wird und Viren, Trojaner, Rootkits, Malware und andere bösartige Bedrohungen erkennt. Es verwendet ein signaturbasiertes Erkennungsmodell, das durch eine kontinuierlich aktualisierte Datenbank (/var/lib/clamav/) unterstützt wird, und ist die De-facto-Standard-Antivirenlösung für Linux-Server, Mail-Gateways und Webhosting-Umgebungen.

Dieser Leitfaden behandelt den vollständigen Installationslebenszyklus: Systemvorbereitung, Paketinstallation für alle wichtigen Distributionen, Verwaltung der Virendatenbank mit freshclam, Daemon-Konfiguration, Scan-Strategien, Quarantäneverwaltung, Cron-Automatisierung und Echtzeit-Scanning über clamonacc — einschließlich produktionsrelevanter Fallstricke, die die meisten Anleitungen auslassen.

Warum ClamAV auf Linux-Servern wichtig ist

Linux-Systeme sind nicht immun gegen Malware. Obwohl auf Linux abzielende Exploits weniger verbreitet sind als Windows-Bedrohungen, sind Server, die Webanwendungen, Mail-Relays oder Dateifreigabedienste betreiben, aktive Vektoren für die Malware-Verbreitung — selbst wenn der Linux-Host selbst nicht das primäre Ziel ist. Eine kompromittierte VPS Hosting-Umgebung kann infizierte Dateien unbemerkt an Endbenutzer weiterverteilen, eine Aufnahme in Spam-Datenbanken auslösen oder als Drehpunkt in einer größeren Angriffskette dienen.

ClamAV begegnet dem durch folgende Funktionen:

  • On-Demand-Scanning für geplante oder ausgelöste Analysen
  • Daemon-Modus-Scanning (clamd) für Hochdurchsatz- und Niedriglatenz-Prüfungen
  • Mail-Gateway-Integration über clamsmtp, amavisd-new oder Milter
  • Echtzeit-Dateisystemüberwachung über clamonacc (Linux-Kernel fanotify)
  • Bytecode-Signaturen für heuristische Erkennung über statisches Musterabgleichen hinaus

Schritt 1: System vorbereiten und aktualisieren

Synchronisieren Sie vor der Installation eines Pakets Ihren Paketindex und wenden Sie ausstehende Sicherheits-Patches an. Das Betreiben veralteter Systembibliotheken neben einem Sicherheitswerkzeug erzeugt ein falsches Sicherheitsgefühl.

Für Debian/Ubuntu:

sudo apt update && sudo apt upgrade -y

Für CentOS/RHEL 7:

sudo yum update -y

Für Rocky Linux / AlmaLinux / RHEL 8+:

sudo dnf update -y

Für Fedora:

sudo dnf update -y

Stellen Sie sicher, dass Ihre Kernel- und glibc-Versionen aktuell sind, da clamonacc (Echtzeit-Scanning) Kernel 5.1+ für stabile fanotify-Unterstützung benötigt.

Schritt 2: ClamAV installieren

ClamAV ist in den Standard-Repositories aller wichtigen Distributionen verfügbar. Der wesentliche Unterschied besteht darin, ob Sie nur den Scanner (clamav) oder auch den Hintergrund-Daemon (clamav-daemon / clamd) installieren, was für jeden Produktionsserver dringend empfohlen wird.

Für Debian/Ubuntu:

sudo apt install clamav clamav-daemon -y
  • clamav — installiert clamscan und freshclam
  • clamav-daemon — installiert clamd, den persistenten Scanning-Daemon, der die Virendatenbank im Speicher geladen hält und den Overhead pro Scan erheblich reduziert

Für CentOS/RHEL 7 (erfordert EPEL):

sudo yum install epel-release -y
sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y

Für Rocky Linux / AlmaLinux / RHEL 8+ (erfordert EPEL):

sudo dnf install epel-release -y
sudo dnf install clamav clamav-update clamd -y

Für Fedora:

sudo dnf install clamav clamav-update clamd -y

Nach der Installation zu prüfende Binary-Speicherorte:

BinaryPfadZweck
clamscan/usr/bin/clamscanOn-Demand-CLI-Scanner
clamd/usr/sbin/clamdHintergrund-Scanning-Daemon
freshclam/usr/bin/freshclamVirendatenbank-Aktualisierungsprogramm
clamdscan/usr/bin/clamdscanClient, der Aufgaben an clamd delegiert
clamonacc/usr/sbin/clamonaccEchtzeit-On-Access-Scanner

Schritt 3: Virensignaturdatenbank aktualisieren

Die Erkennungsfähigkeit von ClamAV hängt vollständig von der Aktualität seiner Signaturdatenbank ab. Die Datenbank befindet sich in /var/lib/clamav/ und besteht aus mehreren Dateien: main.cvd, daily.cvd (oder .cld) und bytecode.cvd.

Daemon vor dem ersten Update stoppen (Debian/Ubuntu)

Auf Debian/Ubuntu-Systemen wird clamav-freshclam.service nach der Installation automatisch gestartet und sperrt das Datenbankverzeichnis. Wenn Sie versuchen, freshclam manuell auszuführen, während dieser Dienst aktiv ist, kommt es zu einem Sperrkonflikt. Stoppen Sie ihn zuerst:

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

Auf CentOS/RHEL/Rocky/Alma:

sudo freshclam

Erwartete Ausgabe bei einem erfolgreichen Update:

ClamAV update process started at ...
daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
main.cvd is up to date
bytecode.cvd is up to date

Automatische Datenbankaktualisierungen konfigurieren

freshclam wird durch /etc/clamav/freshclam.conf gesteuert. Wichtige zu prüfende Direktiven:

sudo nano /etc/clamav/freshclam.conf

Kritische Parameter:

  • Checks 24 — Anzahl der Update-Prüfungen pro Tag (Standard: 12 bei einigen Distributionen)
  • DatabaseMirror database.clamav.net — offizieller Mirror; nicht ändern, es sei denn, Sie verwenden einen privaten Mirror
  • NotifyClamd /etc/clamav/clamd.conf — weist freshclam an, nach einem Update ein Signal an clamd zu senden, damit der Daemon Signaturen neu lädt, ohne neu zu starten

Schritt 4: ClamAV-Daemon konfigurieren und starten

Der clamd-Daemon hält die vollständige Virendatenbank im RAM (typischerweise 500 MB–1,2 GB je nach Datenbankversion). Dies eliminiert die mehrsekundige Startzeit von clamscan und ist daher für jede Umgebung unerlässlich, die häufige oder gleichzeitige Scans durchführt.

Debian/Ubuntu

sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon
sudo systemctl status clamav-daemon

CentOS/RHEL 7

Auf RHEL 7 heißt die Service-Unit clamd@scan und verweist auf die Konfigurationsdatei /etc/clamd.d/scan.conf:

sudo systemctl start clamd@scan
sudo systemctl enable clamd@scan

Rocky Linux / AlmaLinux / RHEL 8+

sudo systemctl start clamd@scan
sudo systemctl enable clamd@scan

Wichtige clamd.conf-Parameter

Die Daemon-Konfiguration befindet sich unter /etc/clamav/clamd.conf (Debian/Ubuntu) oder /etc/clamd.d/scan.conf (RHEL-Familie). Überprüfen Sie diese Direktiven:

sudo nano /etc/clamav/clamd.conf

Wichtige Einstellungen:

  • LocalSocket /run/clamav/clamd.ctl — Unix-Socket-Pfad, der von clamdscan verwendet wird; stellen Sie sicher, dass dieser mit Ihrer Client-Konfiguration übereinstimmt
  • MaxFileSize 100M — maximale Dateigröße zum Scannen; für Mail-Server mit großen Anhängen erhöhen
  • MaxScanSize 400M — maximale gescannte Datenmenge pro Datei nach der Dekomprimierung
  • StreamMaxLength 100M — relevant für Milter/Stream-basiertes Scanning
  • User clamav — Daemon läuft als Benutzer clamav; stellen Sie sicher, dass dieser Benutzer Lesezugriff auf die zu scannenden Verzeichnisse hat
  • LogFile /var/log/clamav/clamd.log — persistentes Logging für Audit-Trails aktivieren

Kritischer Fallstrick: Wenn clamd als Benutzer clamav läuft und Sie /home/user/uploads/ scannen, muss der Benutzer clamav Leseberechtigungen für diesen Pfad haben. Wird dies vergessen, führt dies zu stillen Scan-Fehlern — clamd meldet in seinem Protokoll „Access denied”-Fehler, anstatt ein sauberes/infiziertes Ergebnis zurückzugeben.

Schritt 5: Scans mit clamscan und clamdscan durchführen

On-Demand-Scanning mit clamscan

clamscan ist der eigenständige Scanner. Er lädt die Datenbank bei jedem Aufruf von der Festplatte, was ihn langsamer, aber unabhängig vom Daemon macht.

Ein bestimmtes Verzeichnis rekursiv scannen:

clamscan -r /path/to/directory

Scannen und nur infizierte Dateien anzeigen:

clamscan -r --infected /path/to/directory

Mit ausführlicher Ausgabe scannen und Ergebnisse protokollieren:

sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html

Infizierte Dateien in ein Quarantäneverzeichnis verschieben:

sudo clamscan -r --move=/var/quarantine /path/to/directory

Infizierte Dateien automatisch entfernen (im Produktionsbetrieb mit Vorsicht verwenden):

sudo clamscan -r --remove /path/to/directory

Das gesamte Dateisystem scannen (bei großen Festplatten erhebliche Laufzeit erwarten):

sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /

Das Ausschließen von /sys, /proc und /dev ist obligatorisch — das Scannen dieser Pseudo-Dateisysteme erzeugt falsche Fehler und kann zu Hängern führen.

Hochleistungs-Scanning mit clamdscan

Wenn clamd läuft, verwenden Sie clamdscan anstelle von clamscan. Es übermittelt Scan-Anfragen über den Unix-Socket an den bereits geladenen Daemon, was es für wiederholte oder Massen-Scans um Größenordnungen schneller macht.

clamdscan --fdpass /path/to/directory

Das Flag --fdpass übergibt den Dateideskriptor direkt an clamd und umgeht dabei Berechtigungsprobleme, die entstehen, wenn der Daemon-Benutzer den Zielpfad nicht direkt lesen kann.

Mehrthread-Scanning mit clamdscan:

clamdscan --multiscan --fdpass /var/www/html

--multiscan weist clamd an, Dateien parallel mithilfe seines Thread-Pools zu scannen, was die Gesamtlaufzeit auf Mehrkern-Systemen erheblich reduziert.

clamscan vs. clamdscan: Leistungsvergleich

Merkmal`clamscan``clamdscan`
Datenbanklade pro ScanJa (langsamer Start)Nein (Daemon hält DB im RAM)
Typische Startzeit5–30 SekundenUnter 1 Sekunde
Erfordert laufendes clamdNeinJa
Paralleles ScanningNeinJa (--multiscan)
Bester AnwendungsfallEinmalige manuelle ScansAutomatisierte, häufige oder Massen-Scans
BerechtigungsmodellLäuft als aufrufender BenutzerLäuft als Benutzer clamav (--fdpass verwenden)

Schritt 6: Scanning mit Cron automatisieren

Für kontinuierlichen Schutz planen Sie regelmäßige Scans mit cron. Das folgende Beispiel scannt das Web-Stammverzeichnis täglich um 02:00 Uhr und protokolliert die Ergebnisse mit einem Zeitstempel.

sudo crontab -e

Folgenden Eintrag hinzufügen:

0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html

Produktionsreifer Cron mit E-Mail-Benachrichtigung bei Infektion:

0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com

Dies leitet nicht leere Ausgaben direkt an einen Mail-Empfänger weiter und stellt sicher, dass Sie nur Benachrichtigungen erhalten, wenn etwas gefunden wird oder ein Fehler auftritt. Stellen Sie sicher, dass mailutils oder postfix auf dem Server konfiguriert ist.

Scan-Protokolle rotieren, um unbegrenztes Festplattenwachstum zu verhindern:

sudo nano /etc/logrotate.d/clamav-scan
/var/log/clamav/daily_scan_*.log {
    weekly
    rotate 4
    compress
    missingok
    notifempty
}

Schritt 7: Echtzeit-On-Access-Scanning mit clamonacc

clamonacc ist ClamAVs On-Access-Scanning-Komponente, die in ClamAV 0.102 als stabiles Feature eingeführt wurde. Es bindet sich in das fanotify-Subsystem des Linux-Kernels ein, um Dateiöffnungs- und -schließereignisse abzufangen und Dateien vor dem Zugriff zu scannen.

Voraussetzungen:

  • Linux-Kernel 5.1 oder höher (für fanotify mit FAN_OPEN_EXEC_PERM)
  • ClamAV 0.102+
  • clamd muss laufen
  • Root-Rechte

On-Access-Scanning in clamd.conf aktivieren

sudo nano /etc/clamav/clamd.conf

Hinzufügen oder auskommentieren:

OnAccessIncludePath /home
OnAccessIncludePath /var/www/html
OnAccessPrevention yes
OnAccessExcludeUname clamav
  • OnAccessPrevention yes — blockiert den Zugriff auf infizierte Dateien in Echtzeit (Deny-Modus); auf no setzen für den reinen Erkennungsmodus
  • OnAccessExcludeUname clamav — verhindert, dass clamd selbst rekursive Scan-Schleifen auslöst

clamonacc starten

sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonize

Um es als systemd-Dienst auszuführen, erstellen Sie eine Unit-Datei:

sudo nano /etc/systemd/system/clamonacc.service
[Unit]
Description=ClamAV On-Access Scanner
Requires=clamav-daemon.service
After=clamav-daemon.service

[Service]
Type=simple
ExecStart=/usr/sbin/clamonacc --log=/var/log/clamav/clamonacc.log --foreground
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now clamonacc

Bekannter Fallstrick: Auf Hochdurchsatz-Servern (z. B. stark frequentierte Datei-Upload-Endpunkte) kann OnAccessPrevention yes messbare I/O-Latenz verursachen. Benchmarken Sie Ihre Arbeitslast, bevor Sie den Präventionsmodus im Produktionsbetrieb aktivieren. Erwägen Sie, OnAccessIncludePath auf den kleinstmöglichen notwendigen Pfad zu beschränken, anstatt breite Verzeichnisse wie / zu verwenden.

Schritt 8: ClamAV mit Mail-Servern integrieren

ClamAVs am weitesten verbreiteter Produktionsanwendungsfall ist das Mail-Gateway-Scanning. Wenn Sie einen Mail-Server auf Ihrer VPS Hosting– oder Dedicated Servers-Infrastruktur betreiben, ist die Integration von ClamAV in Ihren MTA eine kritische Sicherheitsebene.

Gängige Integrations-Stacks:

  • Postfix + amavisd-new + ClamAVamavisd-new fungiert als Inhaltsfilter zwischen Postfix und ClamAV und verarbeitet auch SpamAssassin
  • Postfix + clamsmtp — leichtgewichtiger Milter-artiger Proxy
  • Exim + ClamAV — die native Exim-Direktive av_scanner unterstützt clamd direkt über Socket

Beispiel: Exim-clamd-Integration in /etc/exim4/exim4.conf:

av_scanner = clamd:/run/clamav/clamd.ctl

Diese einzelne Direktive leitet alle Nachrichteninhalte durch die laufende clamd-Instanz vor der Zustellung. Kombinieren Sie dies mit einer ordnungsgemäßen Email Hosting-Konfiguration, um sicherzustellen, dass Ihre Mail-Infrastruktur vollständig geschützt ist.

Häufige ClamAV-Probleme beheben

freshclam schlägt fehl mit „locked by another process”

sudo systemctl stop clamav-freshclam
sudo rm -f /var/lock/clamav/freshclam.lock
sudo freshclam
sudo systemctl start clamav-freshclam

clamd startet nicht: „ERROR: Can’t open/parse the config file”

Konfigurationsdateipfad und Syntax überprüfen:

sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50

Hoher Speicherverbrauch

clamd verbraucht mit der vollständig geladenen Datenbank typischerweise 500 MB–1,2 GB RAM. Auf speicherbeschränkten Systemen sollten Sie Folgendes in Betracht ziehen:

  • MaxThreads 2 in clamd.conf setzen, um die Parallelität zu begrenzen
  • clamscan ohne den Daemon für seltene Scans verwenden
  • Auf einen Plan mit ausreichend RAM upgraden — ein VPS Hosting-Plan mit mindestens 2 GB RAM ist das praktische Minimum für den Betrieb von clamd neben einem Web-Stack

Scan gibt „Access denied” für Dateien zurück

Der clamd-Daemon läuft als Benutzer clamav. Lesezugriff gewähren:

sudo setfacl -R -m u:clamav:rX /path/to/scan

Oder clamdscan --fdpass verwenden, um Dateideskriptoren aus dem Kontext des aufrufenden Benutzers zu übergeben.

Falsch-Positive

ClamAV markiert gelegentlich legitime Dateien, insbesondere komprimierte Archive oder bestimmte PHP-Frameworks. Um eine bekannte sichere Datei per Hash auf die Whitelist zu setzen:

sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp

clamd nach dem Ändern von .fp-Dateien neu starten.

ClamAV auf Shared Hosting vs. VPS vs. Dedicated Server

Das Bereitstellungsmodell beeinflusst erheblich, wie ClamAV konfiguriert werden sollte:

UmgebungEmpfohlener ModusHinweise
Shared Web HostingOn-Demand clamscan via CronKein Root-Zugriff; Daemon-Modus nicht verfügbar
VPS (2–4 GB RAM)clamd-Daemon + Cron clamdscanLeistung und Speicherbeschränkungen ausbalancieren
Dedicated Serverclamd + clamonacc + Mail-IntegrationVollständiger Funktionsumfang; keine Ressourcenkompromisse
GPU/Hochleistungs-KnotenNur clamd-Daemonclamonacc-I/O-Overhead bei Datenpipelines vermeiden

Für Umgebungen, die maximalen Durchsatz und vollständige Kontrolle über Sicherheitswerkzeuge erfordern, bieten Dedicated Servers den Hardware-Spielraum, um clamd, clamonacc und Mail-Scanning gleichzeitig ohne Ressourcenkonflikte zu betreiben.

Technische Entscheidungsmatrix und wichtige Erkenntnisse

Validieren Sie vor der Bereitstellung von ClamAV jeden der folgenden Punkte:

  • Kernel-Versionuname -r ausführen; 5.1+ bestätigen, wenn clamonacc erforderlich ist
  • Verfügbarer RAMclamd benötigt 1–1,5 GB; entsprechend planen, bevor der Daemon aktiviert wird
  • freshclam-Automatisierung — bestätigen, dass clamav-freshclam.service aktiviert ist und NotifyClamd in freshclam.conf gesetzt ist
  • Socket-Berechtigungen — sicherstellen, dass der Benutzer clamav alle Scan-Ziele lesen kann; --fdpass mit clamdscan verwenden, wo ACLs unpraktisch sind
  • Ausschlusspfade/proc, /sys, /dev immer von rekursiven Scans ausschließen
  • Protokollrotationlogrotate für alle ClamAV-Protokolldateien implementieren, bevor tägliche Cron-Jobs aktiviert werden
  • OnAccessPrevention — im reinen Erkennungsmodus testen (no), bevor auf den Blockierungsmodus (yes) auf Produktionssystemen umgestellt wird
  • Mail-Integration — wenn ein Mail-Server betrieben wird, über amavisd-new oder native MTA-av_scanner-Direktive integrieren, nicht nur über periodische Datei-Scans
  • Quarantäneverzeichnis/var/quarantine mit entsprechender Eigentümerschaft vor der Verwendung von --move vorab erstellen; clamscan erstellt es nicht automatisch
  • Falsch-Positiv-Verwaltung — eine .fp-Whitelist-Datei pflegen und Scan-Protokolle nach jedem Datenbankupdate auf Regressionen überprüfen

Häufig gestellte Fragen

Bietet ClamAV standardmäßig Echtzeitschutz unter Linux?

Nein. Nach der Installation arbeitet ClamAV nur im On-Demand-Modus. Echtzeitschutz erfordert die explizite Aktivierung von clamonacc mit den Direktiven OnAccessIncludePath und OnAccessPrevention in clamd.conf, sowie einen Kernel, der fanotify unterstützt (5.1+).

Was ist der Unterschied zwischen clamscan und clamdscan?

clamscan ist eine eigenständige Binary, die die Virendatenbank bei jedem Aufruf von der Festplatte lädt, was zu einer Startverzögerung von 5–30 Sekunden führt. clamdscan ist ein schlanker Client, der Scan-Aufträge an den bereits laufenden clamd-Daemon übermittelt, der die Datenbank im RAM hält — was ihn für wiederholte oder automatisierte Scans deutlich schneller macht.

Wie viel RAM benötigt der ClamAV-Daemon?

clamd mit der aktuellen vollständigen Datenbank (main + daily + bytecode) benötigt typischerweise zwischen 700 MB und 1,2 GB residenten Speicher. Auf Systemen mit weniger als 2 GB Gesamtspeicher kann der Betrieb des Daemons neben einem Webserver oder einer Datenbank zu Speicherdruck führen. Verwenden Sie clamscan ohne den Daemon auf speicherbeschränkten Instanzen.

Kann ClamAV komprimierte Archive und E-Mail-Anhänge scannen?

Ja. ClamAV entpackt und scannt nativ ZIP-, RAR-, 7z-, TAR-, GZIP-, BZIP2-, CAB- und viele andere Archivformate sowie OLE2-Dokumente (Microsoft Office), PDF-Dateien und ELF/PE-Executables. Die Direktiven MaxScanSize und MaxFileSize in clamd.conf steuern die Tiefe und Größenbeschränkungen für das Archiv-Scanning.

Warum meldet freshclam unmittelbar nach der Installation „locked by another process”?

Auf Debian/Ubuntu startet der systemd-Dienst clamav-freshclam automatisch nach der Paketinstallation und hält eine exklusive Sperre auf das Datenbankverzeichnis. Das manuelle Ausführen von freshclam während dieser Dienst aktiv ist, verursacht einen Sperrkonflikt. Stoppen Sie den Dienst mit sudo systemctl stop clamav-freshclam, führen Sie das manuelle Update durch und starten Sie den Dienst dann neu.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen