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-newoderMilter - Echtzeit-Dateisystemüberwachung über
clamonacc(Linux-Kernelfanotify) - 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 -yFür CentOS/RHEL 7:
sudo yum update -yFür Rocky Linux / AlmaLinux / RHEL 8+:
sudo dnf update -yFür Fedora:
sudo dnf update -yStellen 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 -yclamav— installiertclamscanundfreshclamclamav-daemon— installiertclamd, 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 -yFür Rocky Linux / AlmaLinux / RHEL 8+ (erfordert EPEL):
sudo dnf install epel-release -y
sudo dnf install clamav clamav-update clamd -yFür Fedora:
sudo dnf install clamav clamav-update clamd -yNach der Installation zu prüfende Binary-Speicherorte:
| Binary | Pfad | Zweck |
|---|---|---|
clamscan | /usr/bin/clamscan | On-Demand-CLI-Scanner |
clamd | /usr/sbin/clamd | Hintergrund-Scanning-Daemon |
freshclam | /usr/bin/freshclam | Virendatenbank-Aktualisierungsprogramm |
clamdscan | /usr/bin/clamdscan | Client, der Aufgaben an clamd delegiert |
clamonacc | /usr/sbin/clamonacc | Echtzeit-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-freshclamAuf CentOS/RHEL/Rocky/Alma:
sudo freshclamErwartete 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 dateAutomatische Datenbankaktualisierungen konfigurieren
freshclam wird durch /etc/clamav/freshclam.conf gesteuert. Wichtige zu prüfende Direktiven:
sudo nano /etc/clamav/freshclam.confKritische 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 MirrorNotifyClamd /etc/clamav/clamd.conf— weistfreshclaman, nach einem Update ein Signal anclamdzu 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-daemonCentOS/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@scanRocky Linux / AlmaLinux / RHEL 8+
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scanWichtige 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.confWichtige Einstellungen:
LocalSocket /run/clamav/clamd.ctl— Unix-Socket-Pfad, der vonclamdscanverwendet wird; stellen Sie sicher, dass dieser mit Ihrer Client-Konfiguration übereinstimmtMaxFileSize 100M— maximale Dateigröße zum Scannen; für Mail-Server mit großen Anhängen erhöhenMaxScanSize 400M— maximale gescannte Datenmenge pro Datei nach der DekomprimierungStreamMaxLength 100M— relevant für Milter/Stream-basiertes ScanningUser clamav— Daemon läuft als Benutzerclamav; stellen Sie sicher, dass dieser Benutzer Lesezugriff auf die zu scannenden Verzeichnisse hatLogFile /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/directoryScannen und nur infizierte Dateien anzeigen:
clamscan -r --infected /path/to/directoryMit ausführlicher Ausgabe scannen und Ergebnisse protokollieren:
sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/htmlInfizierte Dateien in ein Quarantäneverzeichnis verschieben:
sudo clamscan -r --move=/var/quarantine /path/to/directoryInfizierte Dateien automatisch entfernen (im Produktionsbetrieb mit Vorsicht verwenden):
sudo clamscan -r --remove /path/to/directoryDas 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/directoryDas 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 Scan | Ja (langsamer Start) | Nein (Daemon hält DB im RAM) |
| Typische Startzeit | 5–30 Sekunden | Unter 1 Sekunde |
Erfordert laufendes clamd | Nein | Ja |
| Paralleles Scanning | Nein | Ja (--multiscan) |
| Bester Anwendungsfall | Einmalige manuelle Scans | Automatisierte, häufige oder Massen-Scans |
| Berechtigungsmodell | Läuft als aufrufender Benutzer | Lä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 -eFolgenden Eintrag hinzufügen:
0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/htmlProduktionsreifer 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.comDies 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
fanotifymitFAN_OPEN_EXEC_PERM) - ClamAV 0.102+
clamdmuss laufen- Root-Rechte
On-Access-Scanning in clamd.conf aktivieren
sudo nano /etc/clamav/clamd.confHinzufügen oder auskommentieren:
OnAccessIncludePath /home
OnAccessIncludePath /var/www/html
OnAccessPrevention yes
OnAccessExcludeUname clamavOnAccessPrevention yes— blockiert den Zugriff auf infizierte Dateien in Echtzeit (Deny-Modus); aufnosetzen für den reinen ErkennungsmodusOnAccessExcludeUname clamav— verhindert, dassclamdselbst rekursive Scan-Schleifen auslöst
clamonacc starten
sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonizeUm 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.targetsudo systemctl daemon-reload
sudo systemctl enable --now clamonaccBekannter 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 + ClamAV —
amavisd-newfungiert als Inhaltsfilter zwischen Postfix und ClamAV und verarbeitet auch SpamAssassin - Postfix + clamsmtp — leichtgewichtiger Milter-artiger Proxy
- Exim + ClamAV — die native Exim-Direktive
av_scannerunterstütztclamddirekt über Socket
Beispiel: Exim-clamd-Integration in /etc/exim4/exim4.conf:
av_scanner = clamd:/run/clamav/clamd.ctlDiese 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-freshclamclamd 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 -50Hoher 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 2inclamd.confsetzen, um die Parallelität zu begrenzenclamscanohne 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
clamdneben 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/scanOder 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.fpclamd 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:
| Umgebung | Empfohlener Modus | Hinweise |
|---|---|---|
| Shared Web Hosting | On-Demand clamscan via Cron | Kein Root-Zugriff; Daemon-Modus nicht verfügbar |
| VPS (2–4 GB RAM) | clamd-Daemon + Cron clamdscan | Leistung und Speicherbeschränkungen ausbalancieren |
| Dedicated Server | clamd + clamonacc + Mail-Integration | Vollständiger Funktionsumfang; keine Ressourcenkompromisse |
| GPU/Hochleistungs-Knoten | Nur clamd-Daemon | clamonacc-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-Version —
uname -rausführen; 5.1+ bestätigen, wennclamonaccerforderlich ist - Verfügbarer RAM —
clamdbenötigt 1–1,5 GB; entsprechend planen, bevor der Daemon aktiviert wird freshclam-Automatisierung — bestätigen, dassclamav-freshclam.serviceaktiviert ist undNotifyClamdinfreshclam.confgesetzt ist- Socket-Berechtigungen — sicherstellen, dass der Benutzer
clamavalle Scan-Ziele lesen kann;--fdpassmitclamdscanverwenden, wo ACLs unpraktisch sind - Ausschlusspfade —
/proc,/sys,/devimmer von rekursiven Scans ausschließen - Protokollrotation —
logrotatefü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-newoder native MTA-av_scanner-Direktive integrieren, nicht nur über periodische Datei-Scans - Quarantäneverzeichnis —
/var/quarantinemit entsprechender Eigentümerschaft vor der Verwendung von--movevorab erstellen;clamscanerstellt 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.
