15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
24.10.2024

Jak zainstalować ClamAV na Linux: Kompletny przewodnik techniczny

ClamAV to wieloplatformowy silnik antywirusowy o otwartym kodzie źródłowym, utrzymywany przez Cisco Talos, który wykrywa wirusy, trojany, rootkity, złośliwe oprogramowanie i inne złośliwe zagrożenia. Działa w oparciu o model wykrywania oparty na sygnaturach, wspierany przez stale aktualizowaną bazę danych (/var/lib/clamav/) i jest de facto standardowym rozwiązaniem antywirusowym dla serwerów Linux, bram pocztowych i środowisk hostingowych.

Ten przewodnik obejmuje pełny cykl instalacji: przygotowanie systemu, instalację pakietów w głównych dystrybucjach, zarządzanie bazą wirusów za pomocą freshclam, konfigurację demona, strategie skanowania, obsługę kwarantanny, automatyzację cron oraz skanowanie w czasie rzeczywistym za pomocą clamonacc — w tym błędy produkcyjne, które większość poradników pomija.

Dlaczego ClamAV ma znaczenie na serwerach Linux

Systemy Linux nie są odporne na złośliwe oprogramowanie. Chociaż exploity atakujące Linux są mniej powszechne niż zagrożenia dla Windows, serwery obsługujące aplikacje internetowe, przekaźniki poczty lub usługi udostępniania plików są aktywnymi wektorami dystrybucji złośliwego oprogramowania — nawet gdy sam host Linux nie jest głównym celem. Skompromitowane środowisko VPS Hosting może po cichu redystrybuować zainfekowane pliki do użytkowników końcowych, powodować umieszczenie na czarnych listach przez bazy danych spamu lub służyć jako punkt zwrotny w większym łańcuchu ataku.

ClamAV rozwiązuje ten problem, zapewniając:

  • Skanowanie na żądanie do zaplanowanej lub wyzwalanej analizy
  • Skanowanie w trybie demona (clamd) do kontroli o wysokiej przepustowości i niskim opóźnieniu
  • Integrację z bramą pocztową za pomocą clamsmtp, amavisd-new lub Milter
  • Monitorowanie systemu plików w czasie rzeczywistym za pomocą clamonacc (jądro Linux fanotify)
  • Sygnatury bajtokodu do heurystycznego wykrywania wykraczającego poza statyczne dopasowywanie wzorców

Krok 1: Przygotowanie i aktualizacja systemu

Przed zainstalowaniem jakiegokolwiek pakietu zsynchronizuj indeks pakietów i zastosuj oczekujące poprawki bezpieczeństwa. Uruchamianie nieaktualnych bibliotek systemowych obok narzędzia bezpieczeństwa tworzy fałszywe poczucie ochrony.

Dla Debian/Ubuntu:

sudo apt update && sudo apt upgrade -y

Dla CentOS/RHEL 7:

sudo yum update -y

Dla Rocky Linux / AlmaLinux / RHEL 8+:

sudo dnf update -y

Dla Fedora:

sudo dnf update -y

Upewnij się, że wersje jądra i glibc są aktualne, ponieważ clamonacc (skanowanie w czasie rzeczywistym) wymaga jądra 5.1+ dla stabilnej obsługi fanotify.

Krok 2: Instalacja ClamAV

ClamAV jest dostępny w domyślnych repozytoriach wszystkich głównych dystrybucji. Kluczową różnicą jest to, czy instalujesz tylko skaner (clamav), czy również demona działającego w tle (clamav-daemon / clamd), co jest zdecydowanie zalecane dla każdego serwera produkcyjnego.

Dla Debian/Ubuntu:

sudo apt install clamav clamav-daemon -y
  • clamav — instaluje clamscan i freshclam
  • clamav-daemon — instaluje clamd, trwałego demona skanującego, który przechowuje bazę wirusów w pamięci, znacznie redukując narzut na każde skanowanie
    
    Dla CentOS/RHEL 7 (wymaga EPEL):
    sudo yum install epel-release -y
    sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y
    Dla Rocky Linux / AlmaLinux / RHEL 8+ (wymaga EPEL):
    sudo dnf install epel-release -y
    sudo dnf install clamav clamav-update clamd -y
    Dla Fedora:
    sudo dnf install clamav clamav-update clamd -y
    Lokalizacje plików binarnych po instalacji do weryfikacji:
    
    
    
    
    Plik binarny
    Ścieżka
    Przeznaczenie
    
    
    
    
    clamscan
    /usr/bin/clamscan
    Skaner CLI na żądanie
    
    
    clamd
    /usr/sbin/clamd
    Demon skanujący działający w tle
    
    
    freshclam
    /usr/bin/freshclam
    Aktualizator bazy wirusów
    
    
    clamdscan
    /usr/bin/clamdscan
    Klient delegujący do clamd
    
    
    clamonacc
    /usr/sbin/clamonacc
    Skaner dostępu w czasie rzeczywistym
    
    
    
    
    Krok 3: Aktualizacja bazy sygnatur wirusów
    Możliwości wykrywania ClamAV są całkowicie zależne od aktualności jego bazy sygnatur. Baza danych znajduje się w /var/lib/clamav/ i składa się z kilku plików: main.cvd, daily.cvd (lub .cld) i bytecode.cvd.
    Zatrzymaj demona przed pierwszą aktualizacją (Debian/Ubuntu)
    W systemach Debian/Ubuntu clamav-freshclam.service uruchamia się automatycznie po instalacji i blokuje katalog bazy danych. Jeśli spróbujesz uruchomić freshclam ręcznie, gdy ta usługa jest aktywna, napotkasz konflikt blokady. Najpierw ją zatrzymaj:
    sudo systemctl stop clamav-freshclam
    sudo freshclam
    sudo systemctl start clamav-freshclam
    Na CentOS/RHEL/Rocky/Alma:
    sudo freshclam
    Oczekiwane wyjście po pomyślnej aktualizacji:
    ClamAV update process started at ...
    daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
    main.cvd is up to date
    bytecode.cvd is up to date
    Konfiguracja automatycznych aktualizacji bazy danych
    freshclam jest kontrolowany przez /etc/clamav/freshclam.conf. Kluczowe dyrektywy do przeglądu:
    sudo nano /etc/clamav/freshclam.conf
    Krytyczne parametry:
    
    Checks 24 — liczba sprawdzeń aktualizacji dziennie (domyślnie: 12 w niektórych dystrybucjach)
    DatabaseMirror database.clamav.net — oficjalne lustro; nie zmieniaj, chyba że używasz prywatnego lustra
    NotifyClamd /etc/clamav/clamd.conf — instruuje freshclam, aby zasygnalizował clamd po aktualizacji, dzięki czemu demon przeładowuje sygnatury bez restartu
    
    Krok 4: Konfiguracja i uruchomienie demona ClamAV
    Demon clamd przechowuje pełną bazę wirusów w RAM (zazwyczaj 500 MB–1,2 GB w zależności od wersji bazy danych). Eliminuje to wielosekundowy koszt uruchamiania clamscan, co czyni go niezbędnym w każdym środowisku wykonującym częste lub równoległe skanowania.
    Debian/Ubuntu
    sudo systemctl start clamav-daemon
    sudo systemctl enable clamav-daemon
    sudo systemctl status clamav-daemon
    CentOS/RHEL 7
    Na RHEL 7 jednostka usługi nosi nazwę clamd@scan, odwołując się do pliku konfiguracyjnego /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
    Kluczowe parametry clamd.conf
    Konfiguracja demona znajduje się w /etc/clamav/clamd.conf (Debian/Ubuntu) lub /etc/clamd.d/scan.conf (rodzina RHEL). Przejrzyj te dyrektywy:
    sudo nano /etc/clamav/clamd.conf
    Ważne ustawienia:
    
    LocalSocket /run/clamav/clamd.ctl — ścieżka gniazda Unix używana przez clamdscan; upewnij się, że odpowiada konfiguracji klienta
    MaxFileSize 100M — maksymalny rozmiar pliku do skanowania; zwiększ dla serwerów pocztowych obsługujących duże załączniki
    MaxScanSize 400M — maksymalna ilość danych skanowanych na plik po dekompresji
    StreamMaxLength 100M — istotne dla skanowania opartego na milter/strumieniu
    User clamav — demon działa jako użytkownik clamav; upewnij się, że ten użytkownik ma dostęp do odczytu katalogów, które zamierzasz skanować
    LogFile /var/log/clamav/clamd.log — włącz trwałe rejestrowanie dla ścieżek audytu
    
    Krytyczna pułapka: Jeśli clamd działa jako użytkownik clamav i skanujesz /home/user/uploads/, użytkownik clamav musi mieć uprawnienia do odczytu tej ścieżki. Zapomnienie o tym skutkuje cichymi błędami skanowania — clamd będzie zgłaszać błędy „Odmowa dostępu” w swoim dzienniku zamiast zwracać werdykt czysty/zainfekowany.
    Krok 5: Uruchamianie skanowań za pomocą clamscan i clamdscan
    Skanowanie na żądanie za pomocą clamscan
    clamscan to samodzielny skaner. Ładuje bazę danych z dysku przy każdym wywołaniu, co czyni go wolniejszym, ale niezależnym od demona.
    Skanowanie określonego katalogu rekurencyjnie:
    clamscan -r /path/to/directory
    Skanowanie i wyświetlanie tylko zainfekowanych plików:
    clamscan -r --infected /path/to/directory
    Skanowanie ze szczegółowym wyjściem i zapisem wyników:
    sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html
    Przenoszenie zainfekowanych plików do katalogu kwarantanny:
    sudo clamscan -r --move=/var/quarantine /path/to/directory
    Automatyczne usuwanie zainfekowanych plików (używaj ostrożnie w środowisku produkcyjnym):
    sudo clamscan -r --remove /path/to/directory
    Skanowanie całego systemu plików (spodziewaj się znacznego czasu działania na dużych dyskach):
    sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /
    Wykluczenie /sys, /proc i /dev jest obowiązkowe — skanowanie tych pseudosystemów plików powoduje fałszywe błędy i może powodować zawieszenia.
    Skanowanie o wysokiej wydajności za pomocą clamdscan
    Gdy clamd jest uruchomiony, używaj clamdscan zamiast clamscan. Przesyła żądania skanowania do już załadowanego demona przez gniazdo Unix, co czyni go o rzędy wielkości szybszym przy powtarzających się lub masowych skanowaniach.
    clamdscan --fdpass /path/to/directory
    Flaga --fdpass przekazuje deskryptor pliku bezpośrednio do clamd, omijając problemy z uprawnieniami, które pojawiają się, gdy użytkownik demona nie może bezpośrednio odczytać ścieżki docelowej.
    Wielowątkowe skanowanie za pomocą clamdscan:
    clamdscan --multiscan --fdpass /var/www/html
    --multiscan instruuje clamd, aby skanował pliki równolegle przy użyciu puli wątków, znacznie skracając czas rzeczywisty na systemach wielordzeniowych.
    clamscan vs. clamdscan: Porównanie wydajności
    
    
    
    
    Atrybut
    `clamscan`
    `clamdscan`
    
    
    
    
    Ładowanie bazy danych przy każdym skanowaniu
    Tak (wolne uruchamianie)
    Nie (demon przechowuje bazę danych w RAM)
    
    
    Typowy czas uruchamiania
    5–30 sekund
    Poniżej 1 sekundy
    
    
    Wymaga działającego clamd
    Nie
    Tak
    
    
    Skanowanie równoległe
    Nie
    Tak (--multiscan)
    
    
    Najlepszy przypadek użycia
    Jednorazowe ręczne skanowania
    Zautomatyzowane, częste lub masowe skanowania
    
    
    Model uprawnień
    Działa jako wywołujący użytkownik
    Działa jako użytkownik clamav (użyj --fdpass)
    
    
    
    
    Krok 6: Automatyzacja skanowania za pomocą Cron
    Aby zapewnić ciągłą ochronę, zaplanuj regularne skanowania za pomocą cron. Poniższy przykład skanuje katalog główny witryny codziennie o 02:00 i rejestruje wyniki ze znacznikiem czasu.
    sudo crontab -e
    Dodaj następujący wpis:
    0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html
    Cron klasy produkcyjnej z alertami e-mail o infekcji:
    0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com
    Przekazuje niepuste wyjście bezpośrednio do odbiorcy poczty, zapewniając otrzymywanie alertów tylko wtedy, gdy coś zostanie znalezione lub wystąpi błąd. Upewnij się, że mailutils lub postfix jest skonfigurowany na serwerze.
    Rotacja dzienników skanowania w celu zapobiegania nieograniczonemu wzrostowi dysku:
    sudo nano /etc/logrotate.d/clamav-scan
    /var/log/clamav/daily_scan_*.log {
        weekly
        rotate 4
        compress
        missingok
        notifempty
    }
    Krok 7: Skanowanie w czasie rzeczywistym z clamonacc
    clamonacc to komponent skanowania dostępu ClamAV, wprowadzony jako stabilna funkcja w ClamAV 0.102. Podłącza się do podsystemu fanotify jądra Linux, aby przechwytywać zdarzenia otwierania i zamykania plików, skanując pliki przed ich dostępem.
    Wymagania:
    
    Jądro Linux 5.1 lub nowsze (dla fanotify z FAN_OPEN_EXEC_PERM)
    ClamAV 0.102+
    clamd musi być uruchomiony
    Uprawnienia roota
    
    Włącz skanowanie dostępu w clamd.conf
    sudo nano /etc/clamav/clamd.conf
    Dodaj lub odkomentuj:
    OnAccessIncludePath /home
    OnAccessIncludePath /var/www/html
    OnAccessPrevention yes
    OnAccessExcludeUname clamav
    
    OnAccessPrevention yes — blokuje dostęp do zainfekowanych plików w czasie rzeczywistym (tryb odmowy); ustaw na no dla trybu tylko wykrywania
    OnAccessExcludeUname clamav — zapobiega wywoływaniu przez clamd rekurencyjnych pętli skanowania
    
    Uruchom clamonacc
    sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonize
    Aby uruchomić go jako usługę systemd, utwórz plik jednostki:
    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
    Znana pułapka: Na serwerach o wysokiej przepustowości (np. zajętych punktach końcowych przesyłania plików) OnAccessPrevention yes może wprowadzać mierzalne opóźnienia I/O. Przetestuj swoje obciążenie przed włączeniem trybu zapobiegania w środowisku produkcyjnym. Rozważ ograniczenie OnAccessIncludePath do jak najwęższej niezbędnej ścieżki, zamiast szerokich katalogów takich jak /.
    Krok 8: Integracja ClamAV z serwerami pocztowymi
    Najbardziej rozpowszechnionym produkcyjnym przypadkiem użycia ClamAV jest skanowanie bramy pocztowej. Jeśli uruchamiasz serwer pocztowy na infrastrukturze VPS Hosting lub Serwerów Dedykowanych, integracja ClamAV z MTA jest krytyczną warstwą bezpieczeństwa.
    Typowe stosy integracji:
    
    Postfix + amavisd-new + ClamAV — amavisd-new działa jako filtr treści między Postfix a ClamAV, obsługując również SpamAssassin
    Postfix + clamsmtp — lekki proxy w stylu milter
    Exim + ClamAV — natywna dyrektywa Exim av_scanner obsługuje clamd bezpośrednio przez gniazdo
    
    Przykład: Integracja clamd Exim w /etc/exim4/exim4.conf:
    av_scanner = clamd:/run/clamav/clamd.ctl
    Ta pojedyncza dyrektywa kieruje całą zawartość wiadomości przez działającą instancję clamd przed dostarczeniem. Połącz to z odpowiednią konfiguracją Hostingu Poczty E-mail, aby zapewnić pełną ochronę infrastruktury pocztowej.
    Rozwiązywanie typowych problemów z ClamAV
    freshclam kończy się niepowodzeniem z komunikatem „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 nie uruchamia się: „ERROR: Can’t open/parse the config file”
    Sprawdź ścieżkę pliku konfiguracyjnego i składnię:
    sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50
    Wysokie zużycie pamięci
    clamd zazwyczaj zużywa 500 MB–1,2 GB RAM przy załadowanej pełnej bazie danych. Na systemach z ograniczoną pamięcią rozważ:
    
    Ustawienie MaxThreads 2 w clamd.conf w celu ograniczenia współbieżności
    Używanie clamscan bez demona do rzadkich skanowań
    Uaktualnienie do planu z wystarczającą ilością RAM — plan VPS Hosting z co najmniej 2 GB RAM to praktyczne minimum do uruchomienia clamd obok stosu webowego
    
    Skanowanie zwraca „Access denied” dla plików
    Demon clamd działa jako użytkownik clamav. Przyznaj dostęp do odczytu:
    sudo setfacl -R -m u:clamav:rX /path/to/scan
    Lub użyj clamdscan --fdpass do przekazywania deskryptorów plików z kontekstu wywołującego użytkownika.
    Fałszywe alarmy
    ClamAV czasami oznacza legalne pliki, szczególnie skompresowane archiwa lub niektóre frameworki PHP. Aby umieścić znany bezpieczny plik na białej liście według skrótu:
    sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp
    Uruchom ponownie clamd po modyfikacji plików .fp.
    ClamAV na hostingu współdzielonym vs. VPS vs. serwer dedykowany
    Model wdrożenia znacząco wpływa na sposób konfiguracji ClamAV:
    
    
    
    
    Środowisko
    Zalecany tryb
    Uwagi
    
    
    
    
    Hosting Współdzielony
    clamscan na żądanie przez cron
    Brak dostępu roota; tryb demona niedostępny
    
    
    VPS (2–4 GB RAM)
    Demon clamd + cron clamdscan
    Równoważenie wydajności z ograniczeniami pamięci
    
    
    Serwer dedykowany
    clamd + clamonacc + integracja pocztowa
    Pełny zestaw funkcji; bez kompromisów zasobowych
    
    
    Węzeł GPU/wysokich obliczeń
    Tylko demon clamd
    Unikaj narzutu I/O clamonacc na potokach danych
    
    
    
    
    W środowiskach wymagających maksymalnej przepustowości i pełnej kontroli nad narzędziami bezpieczeństwa, Serwery Dedykowane zapewniają zasoby sprzętowe do jednoczesnego uruchamiania clamd, clamonacc i skanowania poczty bez rywalizacji o zasoby.
    Macierz decyzji technicznych i kluczowe wnioski
    Przed wdrożeniem ClamAV zweryfikuj każde z poniższych:
    
    Wersja jądra — uruchom uname -r; potwierdź 5.1+, jeśli wymagany jest clamonacc
  • Dostępna pamięć RAMclamd potrzebuje 1–1,5 GB; zaplanuj odpowiednio przed włączeniem demona
  • Automatyzacja freshclam — potwierdź, że clamav-freshclam.service jest włączony i NotifyClamd jest ustawiony w freshclam.conf
  • Uprawnienia gniazda — sprawdź, czy użytkownik clamav może odczytać wszystkie cele skanowania; używaj --fdpass z clamdscan tam, gdzie listy ACL są niepraktyczne
  • Ścieżki wykluczeń — zawsze wykluczaj /proc, /sys, /dev z rekurencyjnych skanowań
  • Rotacja dzienników — zaimplementuj logrotate dla wszystkich plików dziennika ClamAV przed włączeniem codziennych zadań cron
  • OnAccessPrevention — testuj w trybie tylko wykrywania (no) przed przełączeniem na tryb blokowania (yes) w systemach produkcyjnych
  • Integracja pocztowa — jeśli uruchamiasz serwer pocztowy, integruj przez amavisd-new lub natywną dyrektywę MTA av_scanner, a nie tylko przez okresowe skanowania plików
  • Katalog kwarantanny — utwórz wcześniej /var/quarantine z odpowiednią własnością przed użyciem --move; clamscan nie utworzy go automatycznie
  • Zarządzanie fałszywymi alarmami — utrzymuj plik białej listy .fp i przeglądaj dzienniki skanowania po każdej aktualizacji bazy danych pod kątem regresji

Często zadawane pytania

Czy ClamAV zapewnia ochronę w czasie rzeczywistym na Linux domyślnie?

Nie. Po instalacji ClamAV działa wyłącznie w trybie na żądanie. Ochrona w czasie rzeczywistym wymaga jawnego włączenia clamonacc z dyrektywami OnAccessIncludePath i OnAccessPrevention w clamd.conf, a także jądra obsługującego fanotify (5.1+).

Jaka jest różnica między clamscan a clamdscan?

clamscan to samodzielny plik binarny, który ładuje bazę wirusów z dysku przy każdym wywołaniu, powodując opóźnienie uruchamiania 5–30 sekund. clamdscan to cienki klient, który przesyła zadania skanowania do już działającego demona clamd, który przechowuje bazę danych w RAM — co czyni go znacznie szybszym przy powtarzających się lub zautomatyzowanych skanowaniach.

Ile RAM wymaga demon ClamAV?

clamd z aktualną pełną bazą danych (main + daily + bytecode) zazwyczaj wymaga od 700 MB do 1,2 GB pamięci rezydentnej. Na systemach z mniej niż 2 GB całkowitej pamięci RAM uruchomienie demona obok serwera WWW lub bazy danych może powodować presję pamięci. Używaj clamscan bez demona na instancjach z ograniczoną pamięcią.

Czy ClamAV może skanować skompresowane archiwa i załączniki e-mail?

Tak. ClamAV natywnie rozpakowuje i skanuje ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB i wiele innych formatów archiwów, a także dokumenty OLE2 (Microsoft Office), pliki PDF i pliki wykonywalne ELF/PE. Dyrektywy MaxScanSize i MaxFileSize w clamd.conf kontrolują głębokość i limity rozmiaru dla skanowania archiwów.

Dlaczego freshclam zgłasza „locked by another process” bezpośrednio po instalacji?

Na Debian/Ubuntu usługa systemd clamav-freshclam uruchamia się automatycznie po instalacji pakietu i utrzymuje wyłączną blokadę na katalogu bazy danych. Ręczne uruchomienie freshclam podczas aktywności tej usługi powoduje konflikt blokady. Zatrzymaj usługę za pomocą sudo systemctl stop clamav-freshclam, uruchom ręczną aktualizację, a następnie uruchom ponownie usługę.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij