Как да инсталирате 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 -yclamav— инсталира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+, ако се изисква clamonaccclamd се нуждае от 1–1.5 GB; планирайте съответно преди активиране на демонаfreshclam — потвърдете, че clamav-freshclam.service е активиран и NotifyClamd е зададен в freshclam.confclamav може да чете всички цели за сканиране; използвайте --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, изпълнете ръчната актуализация, след което рестартирайте услугата.
