15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
24.10.2024

Как да инсталирате ClamAV на Linux: Пълно техническо ръководство

ClamAV е антивирусен двигател с отворен код за различни платформи, поддържан от Cisco Talos, който открива вируси, троянски коне, руткитове, зловреден софтуер и други злонамерени заплахи. Той работи с модел за откриване, базиран на сигнатури, подкрепен от непрекъснато актуализирана база данни (/var/lib/clamav/), и е де факто стандартното антивирусно решение за Linux сървъри, пощенски шлюзове и среди за уеб хостинг.

Това ръководство обхваща пълния жизнен цикъл на инсталацията: подготовка на системата, инсталиране на пакети в основните дистрибуции, управление на базата данни с вируси с freshclam, конфигурация на демона, стратегии за сканиране, управление на карантина, автоматизация с cron и сканиране в реално време чрез clamonacc — включително производствени проблеми, които повечето уроци пропускат.

Защо ClamAV е важен на Linux сървъри

Linux системите не са имунизирани срещу зловреден софтуер. Въпреки че експлойтите, насочени към Linux, са по-рядко срещани от заплахите за Windows, сървърите, изпълняващи уеб приложения, пощенски релета или услуги за споделяне на файлове, са активни вектори за разпространение на зловреден софтуер — дори когато самият Linux хост не е основната цел. Компрометирана среда за VPS Хостинг може безшумно да преразпределя заразени файлове към крайни потребители, да предизвика включване в черни списъци от бази данни за спам или да служи като отправна точка в по-голяма верига от атаки.

ClamAV адресира това, като предоставя:

  • Сканиране при поискване за планиран или задействан анализ
  • Сканиране в режим на демон (clamd) за проверки с висока пропускателна способност и ниска латентност
  • Интеграция с пощенски шлюз чрез clamsmtp, amavisd-new или Milter
  • Мониторинг на файловата система в реално време чрез clamonacc (Linux ядро fanotify)
  • Байткод сигнатури за евристично откриване извън статичното съпоставяне на шаблони

Стъпка 1: Подготовка и актуализиране на системата

Преди да инсталирате какъвто и да е пакет, синхронизирайте индекса на пакетите и приложете чакащите корекции за сигурност. Работата с остарели системни библиотеки заедно с инструмент за сигурност създава фалшиво усещане за защита.

За Debian/Ubuntu:

sudo apt update && sudo apt upgrade -y

За CentOS/RHEL 7:

sudo yum update -y

За Rocky Linux / AlmaLinux / RHEL 8+:

sudo dnf update -y

За Fedora:

sudo dnf update -y

Потвърдете, че версиите на вашето ядро и glibc са актуални, тъй като clamonacc (сканиране в реално време) изисква ядро 5.1+ за стабилна поддръжка на fanotify.

Стъпка 2: Инсталиране на ClamAV

ClamAV е наличен в стандартните хранилища на всички основни дистрибуции. Ключовото разграничение е дали инсталирате само скенера (clamav) или също и фоновия демон (clamav-daemon / clamd), което е силно препоръчително за всеки производствен сървър.

За Debian/Ubuntu:

sudo apt install clamav clamav-daemon -y
  • clamav — инсталира clamscan и freshclam
  • clamav-daemon — инсталира clamd, постоянния демон за сканиране, който поддържа базата данни с вируси заредена в паметта, като драстично намалява разходите за всяко сканиране
    
    За CentOS/RHEL 7 (изисква EPEL):
    sudo yum install epel-release -y
    sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y
    За Rocky Linux / AlmaLinux / RHEL 8+ (изисква EPEL):
    sudo dnf install epel-release -y
    sudo dnf install clamav clamav-update clamd -y
    За Fedora:
    sudo dnf install clamav clamav-update clamd -y
    Местоположения на бинарните файлове след инсталацията за проверка:
    
    
    
    
    Бинарен файл
    Път
    Предназначение
    
    
    
    
    clamscan
    /usr/bin/clamscan
    CLI скенер при поискване
    
    
    clamd
    /usr/sbin/clamd
    Фонов демон за сканиране
    
    
    freshclam
    /usr/bin/freshclam
    Актуализатор на базата данни с вируси
    
    
    clamdscan
    /usr/bin/clamdscan
    Клиент, който делегира към clamd
    
    
    clamonacc
    /usr/sbin/clamonacc
    Скенер за достъп в реално време
    
    
    
    
    Стъпка 3: Актуализиране на базата данни с вирусни сигнатури
    Способността за откриване на ClamAV е изцяло зависима от актуалността на неговата база данни със сигнатури. Базата данни се намира в /var/lib/clamav/ и се състои от няколко файла: main.cvd, daily.cvd (или .cld) и bytecode.cvd.
    Спиране на демона преди първата актуализация (Debian/Ubuntu)
    На системи с Debian/Ubuntu, clamav-freshclam.service се стартира автоматично след инсталацията и заключва директорията с базата данни. Ако се опитате да стартирате freshclam ръчно, докато тази услуга е активна, ще срещнете конфликт на заключване. Спрете я първо:
    sudo systemctl stop clamav-freshclam
    sudo freshclam
    sudo systemctl start clamav-freshclam
    На CentOS/RHEL/Rocky/Alma:
    sudo freshclam
    Очакван изход при успешна актуализация:
    ClamAV update process started at ...
    daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
    main.cvd is up to date
    bytecode.cvd is up to date
    Конфигуриране на автоматични актуализации на базата данни
    freshclam се контролира от /etc/clamav/freshclam.conf. Ключови директиви за преглед:
    sudo nano /etc/clamav/freshclam.conf
    Критични параметри:
    
    Checks 24 — брой проверки за актуализации на ден (по подразбиране: 12 при някои дистрибуции)
    DatabaseMirror database.clamav.net — официално огледало; не го променяйте, освен ако не използвате частно огледало
    NotifyClamd /etc/clamav/clamd.conf — инструктира freshclam да сигнализира на clamd след актуализация, така че демонът да презареди сигнатурите без рестартиране
    
    Стъпка 4: Конфигуриране и стартиране на демона ClamAV
    Демонът clamd поддържа пълната база данни с вируси резидентна в RAM (обикновено 500 MB–1.2 GB в зависимост от версията на базата данни). Това елиминира многосекундния разход за стартиране на clamscan, което го прави от съществено значение за всяка среда, която извършва чести или едновременни сканирания.
    Debian/Ubuntu
    sudo systemctl start clamav-daemon
    sudo systemctl enable clamav-daemon
    sudo systemctl status clamav-daemon
    CentOS/RHEL 7
    На RHEL 7 единицата на услугата се казва clamd@scan, като препраща към конфигурационния файл /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
    Ключови параметри на clamd.conf
    Конфигурацията на демона се намира в /etc/clamav/clamd.conf (Debian/Ubuntu) или /etc/clamd.d/scan.conf (семейство RHEL). Прегледайте тези директиви:
    sudo nano /etc/clamav/clamd.conf
    Важни настройки:
    
    LocalSocket /run/clamav/clamd.ctl — път до Unix сокета, използван от clamdscan; уверете се, че съответства на конфигурацията на вашия клиент
    MaxFileSize 100M — максимален размер на файла за сканиране; увеличете за пощенски сървъри, обработващи големи прикачени файлове
    MaxScanSize 400M — максимум данни, сканирани на файл след декомпресия
    StreamMaxLength 100M — релевантно за сканиране, базирано на milter/поток
    User clamav — демонът работи като потребител clamav; уверете се, че този потребител има достъп за четене до директориите, които възнамерявате да сканирате
    LogFile /var/log/clamav/clamd.log — активирайте постоянно регистриране за одитни записи
    
    Критичен проблем: Ако clamd работи като потребител clamav и сканирате /home/user/uploads/, потребителят clamav трябва да има права за четене на този път. Пропускането на това води до безшумни грешки при сканиране — clamd ще докладва грешки „Достъпът е отказан” в своя журнал, вместо да върне вердикт чист/заразен.
    Стъпка 5: Изпълнение на сканирания с clamscan и clamdscan
    Сканиране при поискване с clamscan
    clamscan е самостоятелният скенер. Той зарежда базата данни от диска при всяко извикване, което го прави по-бавен, но независим от демона.
    Рекурсивно сканиране на конкретна директория:
    clamscan -r /path/to/directory
    Сканиране и показване само на заразени файлове:
    clamscan -r --infected /path/to/directory
    Сканиране с подробен изход и записване на резултатите:
    sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html
    Преместване на заразени файлове в директория за карантина:
    sudo clamscan -r --move=/var/quarantine /path/to/directory
    Автоматично премахване на заразени файлове (използвайте с внимание в производствена среда):
    sudo clamscan -r --remove /path/to/directory
    Сканиране на цялата файлова система (очаквайте значително време за изпълнение на големи дискове):
    sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /
    Изключването на /sys, /proc и /dev е задължително — сканирането на тези псевдо-файлови системи предизвиква фалшиви грешки и може да причини блокиране.
    Сканиране с висока производителност с clamdscan
    Когато clamd работи, използвайте clamdscan вместо clamscan. То изпраща заявки за сканиране към вече заредения демон чрез Unix сокета, което го прави с порядъци по-бързо за повтарящи се или масови сканирания.
    clamdscan --fdpass /path/to/directory
    Флагът --fdpass предава файловия дескриптор директно на clamd, заобикаляйки проблемите с разрешенията, които възникват, когато потребителят на демона не може да чете директно целевия път.
    Многонишково сканиране с clamdscan:
    clamdscan --multiscan --fdpass /var/www/html
    --multiscan инструктира clamd да сканира файловете паралелно, използвайки своя пул от нишки, което значително намалява реалното време на многоядрени системи.
    clamscan срещу clamdscan: Сравнение на производителността
    
    
    
    
    Атрибут
    `clamscan`
    `clamdscan`
    
    
    
    
    Зареждане на базата данни при всяко сканиране
    Да (бавно стартиране)
    Не (демонът поддържа БД в RAM)
    
    
    Типично време за стартиране
    5–30 секунди
    Под 1 секунда
    
    
    Изисква работещ clamd
    Не
    Да
    
    
    Паралелно сканиране
    Не
    Да (--multiscan)
    
    
    Най-добър случай на употреба
    Еднократни ръчни сканирания
    Автоматизирани, чести или масови сканирания
    
    
    Модел на разрешения
    Работи като извикващия потребител
    Работи като потребител clamav (използвайте --fdpass)
    
    
    
    
    Стъпка 6: Автоматизиране на сканирането с Cron
    За непрекъсната защита, планирайте редовни сканирания с cron. Следващият пример сканира уеб корена ежедневно в 02:00 часа и записва резултатите с времеви печат.
    sudo crontab -e
    Добавете следния запис:
    0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html
    Производствен cron с имейл известяване при заразяване:
    0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com
    Това препраща непразния изход директно до получател на поща, като гарантира, че получавате известия само когато е открито нещо или е възникнала грешка. Уверете се, че mailutils или postfix е конфигуриран на сървъра.
    Ротирайте журналите от сканирането, за да предотвратите неограничен растеж на диска:
    sudo nano /etc/logrotate.d/clamav-scan
    /var/log/clamav/daily_scan_*.log {
        weekly
        rotate 4
        compress
        missingok
        notifempty
    }
    Стъпка 7: Сканиране при достъп в реално време с clamonacc
    clamonacc е компонентът на ClamAV за сканиране при достъп, въведен като стабилна функция в ClamAV 0.102. Той се свързва с подсистемата fanotify на Linux ядрото, за да прихваща събития за отваряне и затваряне на файлове, сканирайки файловете преди достъп до тях.
    Изисквания:
    
    Linux ядро 5.1 или по-ново (за fanotify с FAN_OPEN_EXEC_PERM)
    ClamAV 0.102+
    clamd трябва да работи
    Root привилегии
    
    Активиране на сканирането при достъп в clamd.conf
    sudo nano /etc/clamav/clamd.conf
    Добавете или разкоментирайте:
    OnAccessIncludePath /home
    OnAccessIncludePath /var/www/html
    OnAccessPrevention yes
    OnAccessExcludeUname clamav
    
    OnAccessPrevention yes — блокира достъпа до заразени файлове в реално време (режим на отказ); задайте на no за режим само на откриване
    OnAccessExcludeUname clamav — предотвратява clamd да задейства рекурсивни цикли на сканиране
    
    Стартиране на clamonacc
    sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonize
    За да го стартирате като systemd услуга, създайте файл с единица:
    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
    Известен проблем: На сървъри с висока пропускателна способност (напр. натоварени крайни точки за качване на файлове), OnAccessPrevention yes може да въведе измерима I/O латентност. Тествайте натоварването си преди да активирате режима на превенция в производствена среда. Помислете за ограничаване на OnAccessIncludePath до най-тесния необходим път, вместо широки директории като /.
    Стъпка 8: Интегриране на ClamAV с пощенски сървъри
    Най-разпространеният производствен случай на употреба на ClamAV е сканирането на пощенски шлюзове. Ако изпълнявате пощенски сървър на вашата инфраструктура за VPS Хостинг или Dedicated Servers, интегрирането на ClamAV с вашия MTA е критичен слой за сигурност.
    Общи стекове за интеграция:
    
    Postfix + amavisd-new + ClamAV — amavisd-new действа като филтър за съдържание между Postfix и ClamAV, като обработва и SpamAssassin
    Postfix + clamsmtp — лек прокси в стил milter
    Exim + ClamAV — нативната директива av_scanner на Exim поддържа clamd директно чрез сокет
    
    Пример: Интеграция на Exim clamd в /etc/exim4/exim4.conf:
    av_scanner = clamd:/run/clamav/clamd.ctl
    Тази единична директива насочва цялото съдържание на съобщенията през работещия екземпляр на clamd преди доставката. Комбинирайте това с правилна конфигурация на Email Хостинг, за да гарантирате, че вашата пощенска инфраструктура е напълно защитена.
    Отстраняване на често срещани проблеми с ClamAV
    freshclam се проваля с „заключен от друг процес”
    sudo systemctl stop clamav-freshclam
    sudo rm -f /var/lock/clamav/freshclam.lock
    sudo freshclam
    sudo systemctl start clamav-freshclam
    clamd не успява да стартира: „ГРЕШКА: Не може да отвори/анализира конфигурационния файл”
    Проверете пътя и синтаксиса на конфигурационния файл:
    sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50
    Висока употреба на памет
    clamd обикновено консумира 500 MB–1.2 GB RAM с пълната заредена база данни. На системи с ограничена памет, помислете за:
    
    Задаване на MaxThreads 2 в clamd.conf за ограничаване на едновременността
    Използване на clamscan без демона за нечести сканирания
    Надграждане до план с достатъчно RAM — план за VPS Хостинг с поне 2 GB RAM е практическият минимум за работа на clamd заедно с уеб стек
    
    Сканирането връща „Достъпът е отказан” за файлове
    Демонът clamd работи като потребител clamav. Предоставете достъп за четене:
    sudo setfacl -R -m u:clamav:rX /path/to/scan
    Или използвайте clamdscan --fdpass за предаване на файлови дескриптори от контекста на извикващия потребител.
    Фалшиви положителни резултати
    ClamAV понякога маркира легитимни файлове, особено компресирани архиви или определени PHP фреймуъркове. За да добавите в белия списък известен безопасен файл по хеш:
    sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp
    Рестартирайте clamd след промяна на файловете .fp.
    ClamAV на споделен хостинг срещу VPS срещу Dedicated Server
    Моделът на внедряване значително влияе върху начина, по който трябва да се конфигурира ClamAV:
    
    
    
    
    Среда
    Препоръчан режим
    Бележки
    
    
    
    
    Споделен уеб хостинг
    clamscan при поискване чрез cron
    Без root достъп; режимът на демон е недостъпен
    
    
    VPS (2–4 GB RAM)
    Демон clamd + cron clamdscan
    Баланс между производителност и ограничения на паметта
    
    
    Dedicated Server
    clamd + clamonacc + интеграция с поща
    Пълен набор от функции; без компромис с ресурсите
    
    
    GPU/Изчислителен възел с висока производителност
    Само демон clamd
    Избягвайте I/O разходите на clamonacc при конвейери за данни
    
    
    
    
    За среди, изискващи максимална пропускателна способност и пълен контрол върху инструментите за сигурност, Dedicated Servers осигуряват хардуерното пространство за едновременно изпълнение на clamd, clamonacc и сканиране на поща без конкуренция за ресурси.
    Матрица за технически решения и ключови изводи
    Преди внедряването на ClamAV, валидирайте всяко от следните:
    
    Версия на ядрото — изпълнете uname -r; потвърдете 5.1+, ако се изисква clamonacc
  • Налична RAMclamd се нуждае от 1–1.5 GB; планирайте съответно преди активиране на демона
  • Автоматизация на freshclam — потвърдете, че clamav-freshclam.service е активиран и NotifyClamd е зададен в freshclam.conf
  • Разрешения на сокета — проверете, че потребителят clamav може да чете всички цели за сканиране; използвайте --fdpass с clamdscan там, където ACL са непрактични
  • Пътища за изключване — винаги изключвайте /proc, /sys, /dev от рекурсивни сканирания
  • Ротация на журналите — внедрете logrotate за всички журнални файлове на ClamAV преди активиране на ежедневни cron задачи
  • OnAccessPrevention — тествайте в режим само на откриване (no) преди преминаване към режим на блокиране (yes) на производствени системи
  • Интеграция с поща — ако изпълнявате пощенски сървър, интегрирайте чрез amavisd-new или нативна директива av_scanner на MTA, а не само чрез периодични сканирания на файлове
  • Директория за карантина — предварително създайте /var/quarantine с подходяща собственост преди използване на --move; clamscan няма да я създаде автоматично
  • Управление на фалшиви положителни резултати — поддържайте файл с белия списък .fp и преглеждайте журналите от сканирането след всяка актуализация на базата данни за регресии

Често задавани въпроси

Осигурява ли ClamAV защита в реално време на Linux по подразбиране?

Не. След инсталацията, ClamAV работи само в режим при поискване. Защитата в реално време изисква изрично активиране на clamonacc с директивите OnAccessIncludePath и OnAccessPrevention в clamd.conf, плюс ядро, което поддържа fanotify (5.1+).

Каква е разликата между clamscan и clamdscan?

clamscan е самостоятелен бинарен файл, който зарежда базата данни с вируси от диска при всяко извикване, което води до закъснение при стартиране от 5–30 секунди. clamdscan е тънък клиент, който изпраща задачи за сканиране към вече работещия демон clamd, който поддържа базата данни в RAM — което го прави значително по-бърз за повтарящи се или автоматизирани сканирания.

Колко RAM изисква демонът на ClamAV?

clamd с текущата пълна база данни (main + daily + bytecode) обикновено изисква между 700 MB и 1.2 GB резидентна памет. На системи с по-малко от 2 GB обща RAM, работата на демона заедно с уеб сървър или база данни може да причини натиск върху паметта. Използвайте clamscan без демона на екземпляри с ограничена памет.

Може ли ClamAV да сканира компресирани архиви и имейл прикачени файлове?

Да. ClamAV нативно разопакова и сканира ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB и много други архивни формати, както и OLE2 документи (Microsoft Office), PDF файлове и ELF/PE изпълними файлове. Директивите MaxScanSize и MaxFileSize в clamd.conf контролират ограниченията за дълбочина и размер при сканиране на архиви.

Защо freshclam докладва „заключен от друг процес” веднага след инсталацията?

На Debian/Ubuntu, услугата clamav-freshclam на systemd стартира автоматично след инсталирането на пакета и държи изключително заключване на директорията с базата данни. Ръчното изпълнение на freshclam докато тази услуга е активна причинява конфликт на заключване. Спрете услугата с sudo systemctl stop clamav-freshclam, изпълнете ръчната актуализация, след което рестартирайте услугата.

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало