En este tutorial, vamos a aprender cómo instalar ClamAV en Debian 11. ClamAV es un motor antivirus de código abierto para detectar troyanos, virus, malware, adware, rootkits y otras amenazas maliciosas.
Algunas de las características de ClamAV incluyen;
- soporte incorporado para varios formatos de archivo, incluidos Zip, Tar, Gzip, Bzip2, OLE2, Cabinet, CHM, BinHex, SIS y otros.
- soporte integrado para casi todos los formatos de archivo de correo
- soporte integrado para ejecutables ELF y archivos Portable Executable comprimidos con UPX, FSG, Petite, NsPack, wwpack32, MEW, Upack y ofuscados con SUE, Y0da Cryptor y otros;
- soporte incorporado para formatos de documentos populares, incluidos archivos de Microsoft Office y Mac Office, HTML, RTF y PDF.
- Admite múltiples lenguajes de firma, como coincidencia de firma basada en hash, comodines, lógica booleana y cualquier regla escrita personalizada en lenguaje Bytecode.
ClamAV incluye un demonio de análisis de subprocesos múltiples, utilidades de línea de comandos para el análisis de archivos bajo demanda y actualizaciones automáticas de firmas. Uno de sus usos principales es en los servidores de correo como un escáner de virus de correo electrónico del lado del servidor.
Instalar ClamAV en Debian 11
Actualizar caché de paquetes del sistema
Para empezar, actualice la memoria caché del paquete del sistema.
Te puede interesar:
5 razones prácticas para aprender Linux en 2023
apt update
Instalar ClamAV en Debian 11
En el momento de escribir este artículo, los repositorios predeterminados de Debian 11 garantizan la versión de ClamAV: 0.103.2.
apt-cache policy clamav clamav-daemon
clamav: Installed: 0.103.2+dfsg-2 Candidate: 0.103.2+dfsg-2 Version table: *** 0.103.2+dfsg-2 500 500 http://deb.debian.org/debian bullseye/main amd64 Packages 100 /var/lib/dpkg/statusclamav-daemon: Installed: 0.103.2+dfsg-2 Candidate: 0.103.2+dfsg-2 Version table: *** 0.103.2+dfsg-2 500 500 http://deb.debian.org/debian bullseye/main amd64 Packages 100 /var/lib/dpkg/status
La versión estable actual es la versión 0.104.0.
Por lo tanto, para asegurarse de que está funcionando la última versión de ClamAV, debe compilar e instalar desde las fuentes.
Instalar ClamAV desde fuentes en Debian 11
Instale las dependencias de paquetes requeridos y las herramientas de compilación.
apt install -y gcc make pkg-config python3 python3-pip python3-pytest valgrind check libbz2-dev libcurl4-openssl-dev libjson-c-dev libmilter-dev sudo libncurses5-dev libpcre2-dev libssl-dev libxml2-dev zlib1g-dev cmake
Crear cuenta de servicio ClamAV;
useradd -r -M -d /var/lib/clamav -s /bin/false -c "Clam Antivirus" clamav
Vaya a la página de descargas de clamav.net y descargue el código fuente. Puede ejecutar el siguiente comando para descargarlo en la versión de lanzamiento estable actual a partir de este escrito.
VER=0.104.0
wget https://www.clamav.net/downloads/production/clamav-$VER.tar.gz
Instalar ClamAV en Debian 11
Extrae el código fuente, compila e instala ClamAV en Debian 11.
tar xzf clamav-$VER.tar.gz
Compile e instale ClamAV;
cd clamav-$VER
mkdir build && cd build
cmake .. -D CMAKE_INSTALL_PREFIX=/usr -D CMAKE_INSTALL_LIBDIR=lib -D APP_CONFIG_DIRECTORY=/etc/clamav -D DATABASE_DIRECTORY=/var/lib/clamav -D ENABLE_JSON_SHARED=OFF
cmake --build .
ctest
Salida de muestra;
Test project /root/clamav-0.104.0/build Start 1: libclamav 1/10 Test #1: libclamav ........................ Passed 8.22 sec Start 2: libclamav_valgrind 2/10 Test #2: libclamav_valgrind ............... Passed 67.93 sec Start 3: clamscan 3/10 Test #3: clamscan ......................... Passed 2.64 sec Start 4: clamscan_valgrind 4/10 Test #4: clamscan_valgrind ................ Passed 35.01 sec Start 5: clamd 5/10 Test #5: clamd ............................ Passed 10.02 sec Start 6: clamd_valgrind 6/10 Test #6: clamd_valgrind ................... Passed 46.44 sec Start 7: freshclam 7/10 Test #7: freshclam ........................ Passed 2.03 sec Start 8: freshclam_valgrind 8/10 Test #8: freshclam_valgrind ............... Passed 20.16 sec Start 9: sigtool 9/10 Test #9: sigtool .......................... Passed 0.46 sec Start 10: sigtool_valgrind10/10 Test #10: sigtool_valgrind ................. Passed 1.23 sec100% tests passed, 0 tests failed out of 10Total Test time (real) = 194.14 sec
cmake --build . --target install
Configuración de ClamAV
Una vez finalizada la instalación, debe configurar ClamAV.
Hay tres configuraciones principales;
freshclam.conf
requerido para FreshClamclamd.conf
requerido por ClamDclamav-milter.conf
requerido por ClamAV-Milter si habilitó el soporte de ClamAV para el filtrado de correo (no lo hicimos en esta configuración).
Desde nuestra instalación, configuramos ClamAV para almacenar las configuraciones en /etc/clamav
.
ls -1 /etc/clamav/
clamav-milter.conf.sampleclamd.conf.samplefreshclam.conf.sample
Actualice estas configuraciones de la siguiente manera;
cat > /etc/clamav/freshclam.conf << 'EOL'DatabaseOwner clamavUpdateLogFile /var/log/clamav/freshclam.logLogVerbose falseLogSyslog falseLogFacility LOG_LOCAL6LogFileMaxSize 0LogRotate trueLogTime trueForeground falseDebug falseMaxAttempts 5DatabaseDirectory /var/lib/clamavDNSDatabaseInfo current.cvd.clamav.netConnectTimeout 30ReceiveTimeout 0TestDatabases yesScriptedUpdates yesCompressLocalDatabase noBytecode trueNotifyClamd /etc/clamav/clamd.confChecks 24DatabaseMirror db.local.clamav.netDatabaseMirror database.clamav.netEOL
cat > /etc/clamav/clamd.conf << 'EOL'LocalSocket /var/run/clamav/clamd.ctlFixStaleSocket trueLocalSocketGroup clamavLocalSocketMode 666User clamavScanMail trueScanArchive trueArchiveBlockEncrypted falseMaxDirectoryRecursion 15FollowDirectorySymlinks falseFollowFileSymlinks falseReadTimeout 180MaxThreads 12MaxConnectionQueueLength 15LogSyslog falseLogRotate trueLogFacility LOG_LOCAL6LogClean falseLogVerbose falsePreludeEnable noPreludeAnalyzerName ClamAVDatabaseDirectory /var/lib/clamavOfficialDatabaseOnly falseSelfCheck 3600Foreground falseDebug falseScanPE trueMaxEmbeddedPE 10MScanOLE2 trueScanPDF trueScanHTML trueMaxHTMLNormalize 10MMaxHTMLNoTags 2MMaxScriptNormalize 5MMaxZipTypeRcg 1MScanSWF trueExitOnOOM falseLeaveTemporaryFiles falseAlgorithmicDetection trueScanELF trueIdleTimeout 30CrossFilesystems truePhishingSignatures truePhishingScanURLs truePhishingAlwaysBlockSSLMismatch falsePhishingAlwaysBlockCloak falsePartitionIntersection falseDetectPUA falseScanPartialMessages falseHeuristicScanPrecedence falseStructuredDataDetection falseCommandReadTimeout 30SendBufTimeout 200MaxQueue 100ExtendedDetectionInfo trueOLE2BlockMacros falseAllowAllMatchScan trueForceToDisk falseDisableCertCheck falseDisableCache falseMaxScanTime 120000MaxScanSize 100MMaxFileSize 25MMaxRecursion 16MaxFiles 10000MaxPartitions 50MaxIconsPE 100PCREMatchLimit 10000PCRERecMatchLimit 5000PCREMaxFileSize 25MScanXMLDOCS trueScanHWP3 trueMaxRecHWP3 16StreamMaxLength 25MLogFile /var/log/clamav/clamav.logLogTime trueLogFileUnlock falseLogFileMaxSize 0Bytecode trueBytecodeSecurity TrustSignedBytecodeTimeout 60000OnAccessMaxFileSize 5MEOL
Dado que no compilamos ClamAV con soporte de filtrado de correo, las configuraciones anteriores son suficientes.
Cree los directorios de registro, base de datos y socket para FreshClam.
mkdir /var/log/clamav/ /var/lib/clamav /var/run/clamav/
Establezca la propiedad de los directorios de registro, base de datos y socket en Clamav usuario.
chown clamav: /var/log/clamav/ /var/lib/clamav /var/run/clamav/
Actualice la base de datos de firmas de ClamAV
Para que el escaneo funcione, necesita una base de datos de virus actualizada. Hay dos opciones para actualizar la base de datos de ClamAV:
clamav-freshclam
: actualiza la base de datos desde Internet. Esto se recomienda con acceso a Internet.Offline update
para sistemas sin acceso directo a Internet.
Actualizar base de datos de firmas con clamav-freshclam
Si tiene acceso a Internet, puede utilizar clamav-freshclam
para actualizar la base de datos de firmas de virus de ClamAV.
Luego actualice la base de datos de virus;
sudo -u clamav freshclam
El comando extraerá las actualizaciones de la base de datos y es posible que obtenga un resultado similar al siguiente.
Tue Sep 14 22:29:35 2021 -> ClamAV update process started at Tue Sep 14 22:29:35 2021Tue Sep 14 22:29:35 2021 -> daily database available for download (remote version: 26294)Time: 1m 18s, ETA: 0.0s [========================>] 55.56MiB/55.56MiBTue Sep 14 22:30:55 2021 -> Testing database: '/var/lib/clamav/tmp.6d40b4137a/clamav-ec762c472f7babc64cd6617646a05aa9.tmp-daily.cvd' ...Tue Sep 14 22:31:02 2021 -> Database test passed.Tue Sep 14 22:31:02 2021 -> daily.cvd updated (version: 26294, sigs: 1972718, f-level: 90, builder: raynman)Tue Sep 14 22:31:02 2021 -> main database available for download (remote version: 61)Time: 4m 00s, ETA: 0.0s [========================>] 160.41MiB/160.41MiBTue Sep 14 22:35:05 2021 -> Testing database: '/var/lib/clamav/tmp.6d40b4137a/clamav-f2c7c5efaa09e11ebb5085cbd4abe3f3.tmp-main.cvd' ...Tue Sep 14 22:35:13 2021 -> Database test passed.Tue Sep 14 22:35:13 2021 -> main.cvd updated (version: 61, sigs: 6607162, f-level: 90, builder: sigmgr)Tue Sep 14 22:35:13 2021 -> bytecode database available for download (remote version: 333)Time: 2.0s, ETA: 0.0s [========================>] 286.79KiB/286.79KiBTue Sep 14 22:35:15 2021 -> Testing database: '/var/lib/clamav/tmp.6d40b4137a/clamav-60d878c5920160c4068f0a9a43fc214e.tmp-bytecode.cvd' ...Tue Sep 14 22:35:15 2021 -> Database test passed.Tue Sep 14 22:35:15 2021 -> bytecode.cvd updated (version: 333, sigs: 92, f-level: 63, builder: awillia2)Tue Sep 14 22:35:15 2021 -> ^Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.ctl: No such file or directory
freshclam
descarga las bases de datos ClamAV, CVD y los coloca debajo, /var/lib/clamav/
.
ls -1 /var/lib/clamav/
bytecode.cvddaily.cvdfreshclam.datmain.cvd
Crear servicio FreshClam;
cat > /etc/systemd/system/clamav-freshclam.service << EOL[Unit]Description=ClamAV virus database updaterDocumentation=man:freshclam(1) man:freshclam.conf(5) https://www.clamav.net/documents# If user wants it run from cron, don't start the daemon.ConditionPathExists=!/etc/cron.d/clamav-freshclamWants=network-online.targetAfter=network-online.target[Service]User=clamavGroup=clamavExecStart=/usr/bin/freshclam -d --foreground=trueStandardOutput=syslog[Install]WantedBy=multi-user.targetEOL
Cree e inició el servicio demonio ClamAV;
cat > /etc/systemd/system/clamav-daemon.service << EOL[Unit]Description=Clam AntiVirus userspace daemonDocumentation=man:clamd(8) man:clamd.conf(5) https://www.clamav.net/documents/# Check for database existenceConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc}ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc}[Service]User=clamavGroup=clamavExecStart=/usr/sbin/clamd --foreground=true# Reload the databaseExecReload=/bin/kill -USR2 $MAINPIDStandardOutput=syslogTimeoutStartSec=420[Install]WantedBy=multi-user.targetEOL
Vuelva a cargar el demonio systemd y asegúrese de que los servicios estén habilitados para ejecutarse en el arranque del sistema;
systemctl daemon-reload
systemctl enable --now clamav-daemon
systemctl enable --now clamav-freshclam
Escaneo ClamAV
Opciones de la CLI de Clamscan y ejemplo de uso
Clamscan se utiliza para escanear archivos y directorios en busca de virus. Desde las páginas man, la sintaxis del comando clamscan es:
clamscan [options] [file/directory/-]
Algunas de las opciones del comando clamscan y su ejemplo de uso se ilustran a continuación;
Imprimir información de ayuda usando -h
o --help
opción.
clamscan -h
No un: Opciones marcadas con [=yes/no(*)] puede ser seguido opcionalmente por =si o = no. Si son llamados sin el argumento booleano, el escáner asumirá ‘sí’. El asterisco marca la configuración interna predeterminada para una opción determinada.
Escanea un directorio o archivo especifico;
clamscan /home/
Resultados de muestra
Loading: 16s, ETA: 0s [========================>] 8.56M/8.56M sigs Compiling: 3s, ETA: 0s [========================>] 41/41 tasks ----------- SCAN SUMMARY -----------Known viruses: 8564637Engine version: 0.104.0Scanned directories: 1Scanned files: 0Infected files: 0Data scanned: 0.00 MBData read: 0.00 MB (ratio 0.00:1)Time: 20.375 sec (0 m 20 s)Start Date: 2021:09:14 23:14:15End Date: 2021:09:14 23:14:35
clamscan /home/filename.docx
No mostrar el resumen al final del escaneo.
clamscan --no-summary /home/
Imprimir solo archivos establecidos (-i
, --infected
);
clamscan -i /
Omitir la impresión de archivos OK (-o
, --suppress-ok-results
);
clamscan -o /home/
Hacer sonar una campana en la deteccion de virus (--bell
);
clamscan --bell -i /home
Escanear directorios recursivamente (-r
, --recursive
).
clamscan --bell -i -r /home
Guardar informe de escaneo en ARCHIVO (-l FILE
, --log=FILE
);
clamscan --bell -i -r /home -l home-scan.txt
Escanee los archivos enumerados línea por línea en ARCHIVO (-f FILE
,--file-list=FILE
).
clamscan -i -f /tmp/scan
Eliminar ficheros activados (--remove[=yes/no(*)]
). Tenga cuidado ya que esto elimina el archivo por completo.
clamscan -r --remove /home/USER
Mover archivos realizados a DIRECTORIO (--move=DIRECTORY
). El directorio debe tener permisos de escritura para el usuario o el usuario sin privilegios que ejecuta clamscan.
clamscan -r -i --move=/home/USER/infected /home/
Copie los archivos obtenidos en el DIRECTORIO (–copy=DIRECTORIO). El directorio debe tener permisos de escritura para el usuario o el usuario sin privilegios que ejecuta clamscan.
clamscan -r -i --copy=/home/USER/infected /home/
Hay una lista bastante larga de opciones para varios usos de clamscan. consultar man clamscan
para más detalles.
Códigos de retorno ClamAV
Los siguientes son los códigos de retorno de salida para ClamAV.
- 0 : No se encontró ningún virus.
- 1 : Virus(es) encontrado(s).
- 2: Ocurrieron algunos errores.
Limitación del uso de la CPU de Clamscan
clamscan
puede hacer un uso intensivo de la CPU, especialmente si escanea un directorio grande.
Para limitar el tiempo de CPU de clamscan a ciertos niveles, puede utilizar dos herramientas;
nice
: reduce la prioridad de clamscan (limita el tiempo de CPU relativo).cpulimit
: limita el tiempo de CPU absoluto.
Para usar un buen comando,
nice -n 15 clamscan && clamscan -ir /
Siempre que ningún otro proceso requiera tiempo de CPU, clamscan lo maximizará. Pero tan pronto como otro proceso con una prioridad más alta necesita tiempo de cpu, clamscan lo perderá.
Usando cpulimit;
cpulimit -z -e clamscan -l 20 & clamscan -ir /
Limita el tiempo de CPU de clamscan al 15 % al escanear todo el directorio raíz.