Cum să Instalezi ClamAV pe Linux: Un Ghid Tehnic Complet
ClamAV este un motor antivirus open-source, multiplatformă, menținut de Cisco Talos, care detectează viruși, troieni, rootkit-uri, malware și alte amenințări malițioase. Funcționează folosind un model de detecție bazat pe semnături, susținut de o bază de date actualizată continuu (/var/lib/clamav/), și este soluția antivirus standard de facto pentru serverele Linux, gateway-urile de mail și mediile de web hosting.
Acest ghid acoperă întregul ciclu de viață al instalării: pregătirea sistemului, instalarea pachetelor pe distribuțiile majore, gestionarea bazei de date de viruși cu freshclam, configurarea daemon-ului, strategii de scanare, gestionarea carantinei, automatizarea cu cron și scanarea în timp real prin clamonacc — inclusiv capcane de nivel producție pe care majoritatea tutorialelor le omit.
De ce contează ClamAV pe serverele Linux
Sistemele Linux nu sunt imune la malware. Deși exploit-urile care vizează Linux sunt mai puțin frecvente decât amenințările Windows, serverele care rulează aplicații web, relee de mail sau servicii de partajare a fișierelor sunt vectori activi pentru distribuirea malware-ului — chiar și atunci când gazda Linux în sine nu este ținta principală. Un mediu VPS Hosting compromis poate redistribui în tăcere fișiere infectate utilizatorilor finali, poate declanșa includerea pe lista neagră a bazelor de date de spam sau poate servi ca punct de pivot într-un lanț de atac mai amplu.
ClamAV abordează acest lucru oferind:
- Scanare la cerere pentru analiză programată sau declanșată
- Scanare în mod daemon (
clamd) pentru verificări cu debit ridicat și latență scăzută - Integrare gateway de mail prin
clamsmtp,amavisd-newsauMilter - Monitorizare în timp real a sistemului de fișiere prin
clamonacc(kernel Linuxfanotify) - Semnături bytecode pentru detecție euristică dincolo de potrivirea statică a tiparelor
Pasul 1: Pregătirea și actualizarea sistemului
Înainte de a instala orice pachet, sincronizați indexul de pachete și aplicați patch-urile de securitate în așteptare. Rularea unor biblioteci de sistem învechite alături de un instrument de securitate creează o falsă senzație de protecție.
Pentru Debian/Ubuntu:
sudo apt update && sudo apt upgrade -yPentru CentOS/RHEL 7:
sudo yum update -yPentru Rocky Linux / AlmaLinux / RHEL 8+:
sudo dnf update -yPentru Fedora:
sudo dnf update -yConfirmați că versiunile kernel și glibc sunt actuale, deoarece clamonacc (scanare în timp real) necesită kernel 5.1+ pentru suport stabil fanotify.
Pasul 2: Instalarea ClamAV
ClamAV este disponibil în depozitele implicite ale tuturor distribuțiilor majore. Distincția cheie este dacă instalați doar scanner-ul (clamav) sau și daemon-ul de fundal (clamav-daemon / clamd), care este recomandat cu tărie pentru orice server de producție.
Pentru Debian/Ubuntu:
sudo apt install clamav clamav-daemon -yclamav— instaleazăclamscanșifreshclam
clamav-daemon — instalează clamd, daemon-ul de scanare persistent care menține baza de date de viruși încărcată în memorie, reducând dramatic costul per scanare
Pentru CentOS/RHEL 7 (necesită EPEL):
sudo yum install epel-release -y
sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y
Pentru Rocky Linux / AlmaLinux / RHEL 8+ (necesită EPEL):
sudo dnf install epel-release -y
sudo dnf install clamav clamav-update clamd -y
Pentru Fedora:
sudo dnf install clamav clamav-update clamd -y
Locații binare post-instalare de verificat:
Binar
Cale
Scop
clamscan
/usr/bin/clamscan
Scanner CLI la cerere
clamd
/usr/sbin/clamd
Daemon de scanare în fundal
freshclam
/usr/bin/freshclam
Actualizator bază de date de viruși
clamdscan
/usr/bin/clamdscan
Client care delegă către clamd
clamonacc
/usr/sbin/clamonacc
Scanner în timp real cu acces la fișiere
Pasul 3: Actualizarea bazei de date de semnături de viruși
Capacitatea de detecție a ClamAV depinde în totalitate de actualitatea bazei sale de date de semnături. Baza de date se află în /var/lib/clamav/ și constă din mai multe fișiere: main.cvd, daily.cvd (sau .cld) și bytecode.cvd.
Opriți daemon-ul înainte de prima actualizare (Debian/Ubuntu)
Pe sistemele Debian/Ubuntu, clamav-freshclam.service rulează automat după instalare și blochează directorul bazei de date. Dacă încercați să rulați freshclam manual în timp ce acest serviciu este activ, veți întâmpina un conflict de blocare. Opriți-l mai întâi:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam
Pe CentOS/RHEL/Rocky/Alma:
sudo freshclam
Rezultat așteptat la o actualizare reușită:
ClamAV update process started at ...
daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
main.cvd is up to date
bytecode.cvd is up to date
Configurarea actualizărilor automate ale bazei de date
freshclam este controlat de /etc/clamav/freshclam.conf. Directive cheie de revizuit:
sudo nano /etc/clamav/freshclam.conf
Parametri critici:
Checks 24 — numărul de verificări de actualizare pe zi (implicit: 12 pe unele distribuții)
DatabaseMirror database.clamav.net — oglindă oficială; nu modificați decât dacă utilizați o oglindă privată
NotifyClamd /etc/clamav/clamd.conf — instruiește freshclam să semnaleze clamd după o actualizare, astfel încât daemon-ul să reîncarce semnăturile fără a reporni
Pasul 4: Configurarea și pornirea daemon-ului ClamAV
Daemon-ul clamd menține întreaga bază de date de viruși rezidentă în RAM (de obicei 500 MB–1,2 GB în funcție de versiunea bazei de date). Aceasta elimină costul de pornire de mai multe secunde al clamscan, făcându-l esențial pentru orice mediu care efectuează scanări frecvente sau concurente.
Debian/Ubuntu
sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon
sudo systemctl status clamav-daemon
CentOS/RHEL 7
Pe RHEL 7, unitatea de serviciu se numește clamd@scan, referindu-se la fișierul de configurare /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
Parametri cheie clamd.conf
Configurația daemon-ului se află la /etc/clamav/clamd.conf (Debian/Ubuntu) sau /etc/clamd.d/scan.conf (familia RHEL). Revizuiți aceste directive:
sudo nano /etc/clamav/clamd.conf
Setări importante:
LocalSocket /run/clamav/clamd.ctl — calea socket-ului Unix utilizată de clamdscan; asigurați-vă că aceasta corespunde configurației clientului dvs.
MaxFileSize 100M — dimensiunea maximă a fișierului de scanat; măriți pentru serverele de mail care gestionează atașamente mari
MaxScanSize 400M — datele maxime scanate per fișier după decompresie
StreamMaxLength 100M — relevant pentru scanarea bazată pe milter/stream
User clamav — daemon-ul rulează ca utilizatorul clamav; asigurați-vă că acest utilizator are acces de citire la directoarele pe care intenționați să le scanați
LogFile /var/log/clamav/clamd.log — activați jurnalizarea persistentă pentru trasee de audit
Capcană critică: Dacă clamd rulează ca utilizatorul clamav și scanați /home/user/uploads/, utilizatorul clamav trebuie să aibă permisiuni de citire pe acea cale. Uitarea acestui lucru duce la eșecuri silențioase ale scanării — clamd va raporta erori „Access denied” în jurnalul său în loc să returneze un verdict curat/infectat.
Pasul 5: Rularea scanărilor cu clamscan și clamdscan
Scanare la cerere cu clamscan
clamscan este scanner-ul standalone. Încarcă baza de date de pe disc la fiecare invocare, făcându-l mai lent, dar independent de daemon.
Scanați un director specific recursiv:
clamscan -r /path/to/directory
Scanați și afișați doar fișierele infectate:
clamscan -r --infected /path/to/directory
Scanați cu ieșire detaliată și înregistrați rezultatele:
sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html
Mutați fișierele infectate într-un director de carantină:
sudo clamscan -r --move=/var/quarantine /path/to/directory
Eliminați automat fișierele infectate (utilizați cu precauție în producție):
sudo clamscan -r --remove /path/to/directory
Scanați întregul sistem de fișiere (așteptați un timp de execuție semnificativ pe discuri mari):
sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /
Excluderea /sys, /proc și /dev este obligatorie — scanarea acestor pseudo-sisteme de fișiere produce erori false și poate cauza blocări.
Scanare de înaltă performanță cu clamdscan
Când clamd rulează, utilizați clamdscan în loc de clamscan. Acesta trimite cereri de scanare către daemon-ul deja încărcat prin socket-ul Unix, făcându-l cu ordine de mărime mai rapid pentru scanări repetate sau în masă.
clamdscan --fdpass /path/to/directory
Indicatorul --fdpass transmite descriptorul de fișier direct către clamd, ocolind problemele de permisiuni care apar atunci când utilizatorul daemon-ului nu poate citi direct calea țintă.
Scanare multi-thread cu clamdscan:
clamdscan --multiscan --fdpass /var/www/html
--multiscan instruiește clamd să scaneze fișierele în paralel folosind pool-ul său de fire, reducând semnificativ timpul de execuție pe sistemele multi-core.
clamscan vs. clamdscan: Comparație de performanță
Atribut
`clamscan`
`clamdscan`
Încărcare bază de date per scanare
Da (pornire lentă)
Nu (daemon-ul menține BD în RAM)
Timp tipic de pornire
5–30 secunde
Sub 1 secundă
Necesită clamd în execuție
Nu
Da
Scanare paralelă
Nu
Da (--multiscan)
Cel mai bun caz de utilizare
Scanări manuale ocazionale
Scanări automate, frecvente sau în masă
Model de permisiuni
Rulează ca utilizatorul apelant
Rulează ca utilizatorul clamav (utilizați --fdpass)
Pasul 6: Automatizarea scanărilor cu Cron
Pentru protecție continuă, programați scanări regulate folosind cron. Exemplul următor scanează rădăcina web zilnic la 02:00 AM și înregistrează rezultatele cu un marcaj de timp.
sudo crontab -e
Adăugați următoarea intrare:
0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html
Cron de nivel producție cu alertare prin email la infecție:
0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com
Aceasta direcționează ieșirea non-goală direct către un destinatar de mail, asigurând că primiți alerte doar când se găsește ceva sau apare o eroare. Asigurați-vă că mailutils sau postfix este configurat pe server.
Rotiți jurnalele de scanare pentru a preveni creșterea nelimitată a discului:
sudo nano /etc/logrotate.d/clamav-scan
/var/log/clamav/daily_scan_*.log {
weekly
rotate 4
compress
missingok
notifempty
}
Pasul 7: Scanare în timp real cu acces la fișiere prin clamonacc
clamonacc este componenta de scanare cu acces la fișiere a ClamAV, introdusă ca funcție stabilă în ClamAV 0.102. Se conectează la subsistemul fanotify al kernel-ului Linux pentru a intercepta evenimentele de deschidere și închidere a fișierelor, scanând fișierele înainte de a fi accesate.
Cerințe:
Kernel Linux 5.1 sau mai recent (pentru fanotify cu FAN_OPEN_EXEC_PERM)
ClamAV 0.102+
clamd trebuie să ruleze
Privilegii root
Activați scanarea cu acces la fișiere în clamd.conf
sudo nano /etc/clamav/clamd.conf
Adăugați sau decomentați:
OnAccessIncludePath /home
OnAccessIncludePath /var/www/html
OnAccessPrevention yes
OnAccessExcludeUname clamav
OnAccessPrevention yes — blochează accesul la fișierele infectate în timp real (mod deny); setați la no pentru modul doar-detecție
OnAccessExcludeUname clamav — împiedică clamd însuși să declanșeze bucle de scanare recursive
Porniți clamonacc
sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonize
Pentru a-l rula ca serviciu systemd, creați un fișier de unitate:
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
Capcană cunoscută: Pe serverele cu debit ridicat (de ex., endpoint-uri aglomerate de încărcare fișiere), OnAccessPrevention yes poate introduce latență I/O măsurabilă. Testați performanța sarcinii de lucru înainte de a activa modul de prevenire în producție. Luați în considerare limitarea OnAccessIncludePath la cea mai restrânsă cale necesară, mai degrabă decât directoare largi precum /.
Pasul 8: Integrarea ClamAV cu serverele de mail
Cel mai răspândit caz de utilizare în producție al ClamAV este scanarea gateway-ului de mail. Dacă rulați un server de mail pe infrastructura dvs. de VPS Hosting sau Servere Dedicate, integrarea ClamAV cu MTA-ul dvs. este un nivel critic de securitate.
Stive comune de integrare:
Postfix + amavisd-new + ClamAV — amavisd-new acționează ca filtru de conținut între Postfix și ClamAV, gestionând și SpamAssassin
Postfix + clamsmtp — proxy ușor de tip milter
Exim + ClamAV — directiva nativă Exim av_scanner suportă clamd direct prin socket
Exemplu: integrare Exim clamd în /etc/exim4/exim4.conf:
av_scanner = clamd:/run/clamav/clamd.ctl
Această singură directivă rutează tot conținutul mesajelor prin instanța clamd în execuție înainte de livrare. Combinați aceasta cu o configurare adecvată de Email Hosting pentru a vă asigura că infrastructura de mail este complet protejată.
Depanarea problemelor comune ClamAV
freshclam eșuează cu „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 nu pornește: „ERROR: Can’t open/parse the config file”
Verificați calea fișierului de configurare și sintaxa:
sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50
Utilizare ridicată a memoriei
clamd consumă de obicei 500 MB–1,2 GB de RAM cu baza de date completă încărcată. Pe sistemele cu memorie limitată, luați în considerare:
Setarea MaxThreads 2 în clamd.conf pentru a limita concurența
Utilizarea clamscan fără daemon pentru scanări infrequente
Actualizarea la un plan cu RAM suficient — un plan de VPS Hosting cu cel puțin 2 GB RAM este minimul practic pentru rularea clamd alături de un stack web
Scanarea returnează „Access denied” pentru fișiere
Daemon-ul clamd rulează ca utilizatorul clamav. Acordați acces de citire:
sudo setfacl -R -m u:clamav:rX /path/to/scan
Sau utilizați clamdscan --fdpass pentru a transmite descriptorii de fișiere din contextul utilizatorului apelant.
Fals pozitive
ClamAV semnalează ocazional fișiere legitime, în special arhive comprimate sau anumite framework-uri PHP. Pentru a include pe lista albă un fișier cunoscut ca sigur prin hash:
sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp
Reporniți clamd după modificarea fișierelor .fp.
ClamAV pe Shared Hosting vs. VPS vs. Server Dedicat
Modelul de implementare afectează semnificativ modul în care ClamAV ar trebui configurat:
Mediu
Mod recomandat
Note
Web Hosting Shared
clamscan la cerere prin cron
Fără acces root; modul daemon indisponibil
VPS (2–4 GB RAM)
Daemon clamd + cron clamdscan
Echilibrați performanța cu constrângerile de memorie
Server Dedicat
clamd + clamonacc + integrare mail
Set complet de funcții; fără compromisuri de resurse
Nod GPU/calcul intensiv
Doar daemon clamd
Evitați overhead-ul I/O clamonacc pe pipeline-urile de date
Pentru mediile care necesită debit maxim și control complet asupra instrumentelor de securitate, Serverele Dedicate oferă resursele hardware necesare pentru a rula clamd, clamonacc și scanarea mail simultan, fără contention de resurse.
Matricea de decizie tehnică și concluzii cheie
Înainte de a implementa ClamAV, validați fiecare dintre următoarele:
Versiunea kernel — rulați uname -r; confirmați 5.1+ dacă clamonacc este necesar
RAM disponibil — clamd necesită 1–1,5 GB; planificați corespunzător înainte de a activa daemon-ul
Automatizare freshclam — confirmați că clamav-freshclam.service este activat și NotifyClamd este setat în freshclam.confclamav poate citi toate țintele de scanare; utilizați --fdpass cu clamdscan unde ACL-urile sunt impractice/proc, /sys, /dev din scanările recursivelogrotate pentru toate fișierele jurnal ClamAV înainte de a activa job-urile cron zilniceOnAccessPrevention — testați în modul doar-detecție (no) înainte de a trece la modul de blocare (yes) pe sistemele de producțieamavisd-new sau directiva nativă MTA av_scanner, nu doar prin scanări periodice ale fișierelor/var/quarantine cu proprietatea corespunzătoare înainte de a utiliza --move; clamscan nu îl va crea automat.fp și revizuiți jurnalele de scanare după fiecare actualizare a bazei de date pentru regresiiÎntrebări frecvente
ClamAV oferă protecție în timp real pe Linux în mod implicit?
Nu. După instalare, ClamAV funcționează doar în modul la cerere. Protecția în timp real necesită activarea explicită a clamonacc cu directivele OnAccessIncludePath și OnAccessPrevention în clamd.conf, plus un kernel care suportă fanotify (5.1+).
Care este diferența dintre clamscan și clamdscan?
clamscan este un binar standalone care încarcă baza de date de viruși de pe disc la fiecare invocare, rezultând o întârziere de pornire de 5–30 secunde. clamdscan este un client subțire care trimite job-uri de scanare către daemon-ul clamd deja în execuție, care menține baza de date în RAM — făcându-l semnificativ mai rapid pentru scanări repetate sau automate.
Câtă RAM necesită daemon-ul ClamAV?
clamd cu baza de date completă curentă (main + daily + bytecode) necesită de obicei între 700 MB și 1,2 GB de memorie rezidentă. Pe sistemele cu mai puțin de 2 GB RAM total, rularea daemon-ului alături de un server web sau bază de date poate cauza presiune pe memorie. Utilizați clamscan fără daemon pe instanțele cu memorie limitată.
Poate ClamAV să scaneze arhive comprimate și atașamente email?
Da. ClamAV despachetează și scanează nativ formatele ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB și multe alte formate de arhivă, precum și documente OLE2 (Microsoft Office), fișiere PDF și executabile ELF/PE. Directivele MaxScanSize și MaxFileSize din clamd.conf controlează limitele de adâncime și dimensiune pentru scanarea arhivelor.
De ce freshclam raportează „locked by another process” imediat după instalare?
Pe Debian/Ubuntu, serviciul systemd clamav-freshclam pornește automat după instalarea pachetului și deține o blocare exclusivă pe directorul bazei de date. Rularea freshclam manual în timp ce acest serviciu este activ cauzează un conflict de blocare. Opriți serviciul cu sudo systemctl stop clamav-freshclam, rulați actualizarea manuală, apoi reporniți serviciul.
