ClamAV (Español)

Clam AntiVirus
es un conjunto de herramientas de antivirus de código abierto (GPL) para UNIX. Proporciona una serie de utilidades que incluyen un demonio multiproceso flexible y escalable, un escáner de línea de órdenes y una herramienta avanzada para actualizaciones automáticas de las bases de datos. Debido a que el uso principal de ClamAV es en servidores de archivos/correos electrónicos para escritorios de Windows, detecta principalmente virus y malware de Windows con sus firmas incorporadas.
La situación actual de los productos antimalware en Linux es inadecuada debido a varios factores:
Variedad limitada: En comparación con Windows, hay menos usuarios/clientes, lo que resulta en un interés limitado de las empresas en desarrollar productos para Linux.
Complacencia: Muchos creen que Linux es intrínsecamente seguro, lo que genera una falta de conocimiento y atención en la protección contra malware. Esto crea una brecha en los mecanismos de defensa proactivos.
Falta de funcionalidades: Las herramientas existentes a menudo carecen de funciones avanzadas, comunes en los productos antimalware de Windows, lo que las hace menos efectivas en Linux.
Esto es especialmente grave porque la cantidad de malware en Linux está aumentando, al igual que la posible superficie de ataque debido al creciente número de servidores y dispositivos IoT basados en Linux.
Actualmente, en Linux, una de las pocas soluciones antimalware existentes y en desarrollo activo es ClamAV.
Instalación
Instale
el paquete
clamav
.
Esto instalará las siguientes herramientas:
clamd: ClamAV Daemon
clamonacc: Protección en tiempo real
clamdscan: Un simple cliente de escaneo
clamdtop: Una interfaz de monitoreo de recursos para clamd
freshclam: Daemon para actualizaciones de firmas de virus
clamconf: Herramienta para crear y comprobar archivos de configuración
Todas las herramientas, servicios y demonios relacionados con ClamAV se comunican con clamd vía socket.
Por defecto esto se hace a través de un socket local configurado y llamado "LocalSocket".
ClamAV también ofrece la posibilidad de permitir la comunicación a través de ubicaciones remotas mediante el uso de un socket de red que está configurado y los nombres como "TCPSocket".
Advertencia
Tenga en cuenta la siguiente advertencia sobre la seguridad del puerto de almeja al cambiar la configuración para usar TCPSocket en lugar de LocalSocket. Generalmente utilice un socket local unix, pero tenga en cuenta que este puerto no está autenticado o protegido.
Para más detalles, véase:
https://blog.clamav.net/2016/06/regarding-use-of-clamav-daemons-tcp.html
https://docs.clamav.net/manual/Usage/Scanning.html.clamd-v0101
[
enlace roto
2025-08-15]
(Daemon y luego sección ClamD)
Otra cosa importante a tener en cuenta es que al usar LocalSocket, clamd deberá ejecutarse bajo un usuario con los permisos adecuados para escanear los archivos que planea incluir en su monitoreo.
Configuración
Los archivos de configuración predeterminados ya deberían existir. De lo contrario, puede crearlos manualmente con clamconf:
# clamconf -g freshclam.conf > freshclam.conf
# clamconf -g clamd.conf > clamd.conf
# clamconf -g clamav-milter.conf > clamav-milter.conf
Los siguientes archivos contienen las opciones de configuración relevantes.
freshclam:
/etc/clamav/freshclam.conf
clamd:
/etc/clamav/clamd.conf
clamd mail filtering:
/etc/clamav/clamav-milter.conf
Por último, puede comprobar sus archivos de configuración ejecutando
clamconf
.
La instalación predeterminada creará configuraciones predeterminadas válidas, como el usuario y el grupo de clamav y la configuración de clamd requerida.
Se pueden establecer configuraciones adicionales recomendadas:
/etc/clamav/clamd.conf
# Registrar la hora con cada mensaje.
# Predeterminado: no
LogTime yes

# Registrar información adicional sobre el archivo infectado, como su tamaño y hash, junto con el nombre del virus.
ExtendedDetectionInfo yes

# Ejecutar como otro usuario (clamd debe iniciarse como root para que esta opción funcione).
# Predeterminado: no perder privilegios.
Usuario clamav

# Se escanean los directorios a la máxima profundidad.
# Predeterminado: 15
MaxDirectoryRecursion 20

DetectPUA yes
HeuristicAlerts yes
ScanPE yes
ScanELF yes
ScanOLE2 yes
ScanPDF yes
ScanSWF yes
ScanXMLDOCS yes
ScanHWP3 yes
ScanOneNote yes
ScanMail yes
ScanHTML yes
ScanArchive yes
Bytecode yes
AlertBrokenExecutables yes
AlertBrokenMedia yes
AlertEncrypted yes
AlertEncryptedArchive yes
AlertEncryptedDoc yes
AlertOLE2Macros yes
AlertPartitionIntersection yes
Habilitación de la protección en tiempo real OnAccessScan
El análisis en tiempo real es el demonio de protección en tiempo real que analiza el archivo mientras lo lee, escribe o ejecuta. Se puede configurar para notificar o prevenir/bloquear la detección.
La configuración de OnAccessScan se realiza editando el archivo de configuración
/etc/clamav/clamd.conf
.
Para que OnAccessScan funcione, se requieren los siguientes cambios:
/etc/clamav/clamd.conf
# Excluir el UID del escáner de la comprobación para evitar bucles
OnAccessExcludeUname clamav
Se recomiendan los siguientes cambios adicionales, que activarán el modo de solo notificación del escáner en tiempo real:
/etc/clamav/clamd.conf
# Establezca el punto de montaje donde se realizará el análisis recursivo.
# Puede ser cualquier ruta o varias (una línea por ruta).
OnAccessMountPath /

# Alternativamente, agregue directorios en lugar de puntos de montaje.
# OnAccessIncludePath /home

# La prevención no funciona con OnAccessMountPath.
# Funciona con OnAccessIncludePath, siempre que no se incluyan /usr ni /etc.
# Tampoco se recomienda incluir /var al activar la prevención, ya que
# esto ralentizaría la instalación de paquetes por un factor de 1000.
OnAccessPrevention no

# Realiza análisis de archivos recién creados, movidos o renombrados.
OnAccessExtraScanning yes

# Excluye opcionalmente los procesos que pertenecen a la raíz.
# OnAccessExcludeRootUID true
Creación de notificaciones emergentes para alertas
Hasta ahora, ClamAV registrará silenciosamente cualquier detección, pero no alertará al usuario. Se puede añadir una ventana emergente para alertar al usuario sobre cualquier detección.
Primero, agregue la siguiente línea a su configuración de clamd:
/etc/clamav/clamd.conf
VirusEvent /etc/clamav/virus-event.bash
A continuación, permita que el usuario "clamav" ejecute "notify-send" como cualquier usuario con variables de entorno personalizadas mediante
sudo
:
/etc/sudoers.d/clamav
clamav ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send
A continuación, cree el archivo
/etc/clamav/virus-event.bash
, conviértalo en
ejecutable
y agregue lo siguiente:
/etc/clamav/virus-event.bash
#!/bin/bash
PATH=/usr/bin
ALERT="Firma detectada por clamav: $CLAM_VIRUSEVENT_VIRUSNAME en $CLAM_VIRUSEVENT_FILENAME"

# Enviar una alerta a Todos los usuarios gráficos.
for ADDRESS in /run/user/*; do
USERID=${ADDRESS#/run/user/}
/usr/bin/sudo -u "#$USERID" DBUS_SESSION_BUS_ADDRESS="unix:path=$ADDRESS/bus" PATH=${PATH} \
/usr/bin/notify-send -u critic -i dialog-warning "¡Virus encontrado!" "$ALERT"
done
Esto permite cambiar o especificar el mensaje cuando el servicio de análisis en acceso de clamd detecta un virus.
Por defecto, "clamonacc" pasa a "clamav" los nombres de los archivos recién accedidos para su análisis. Esto supone un problema, ya que los archivos inaccesibles para el usuario "clamav" no se pueden analizar de esta manera. En su lugar, es posible indicar a "clamonacc" (que siempre se ejecuta como "root") que utilice el paso de descriptores de archivo.
Editar
clamav-clamonacc.service
con lo siguiente:
[Servicio]
ExecStart=
ExecStart=/usr/sbin/clamonacc -F
--fdpass
--log=/var/log/clamav/clamonacc.log
Por último, deberá
iniciar/habilitar
o
reiniciar
clamav-clamonacc.service
, así como
clamav-daemon.service
.
Consulte:
#Iniciar el demonio ClamAV + OnAccessScanning
Si recibe denegaciones de
AppArmor
sobre
clamd
, configure el perfil en modo de solo quejas:
aa-complain clamd
Actualizando la base de datos
Actualice las definiciones de virus con:
# freshclam
Si está utilizando un proxy, edite
/etc/clamav/freshclam.conf
y actualice HTTPProxyServer, HTTPProxyPort, HTTPProxyUsername y HTTPProxyPassword.
Los archivos de la base de datos se guardan en:
/var/lib/clamav/daily.cld
/var/lib/clamav/main.cld
/var/lib/clamav/bytecode.cvd
Para actualizaciones automáticas, primero cree y configure el archivo freshclam.log:
touch /var/log/clamav/freshclam.log
chmod 600 /var/log/clamav/freshclam.log
chown clamav /var/log/clamav/freshclam.log
Iniciar/habilitar
clamav-freshclam.service
o
clamav-freshclam-once.timer
para mantener las definiciones de virus actualizadas.
El servicio
clamav-freshclam.service
ejecuta
freshclam
en modo demonio, con un valor predeterminado de 12 comprobaciones diarias (cada 2 horas). La frecuencia se puede modificar en
/etc/clamav/freshclam.conf
.
El temporizador
clamav-freshclam-once.timer
ejecuta la comprobación de
freshclam
una vez al día. La frecuencia se puede modificar en
/usr/lib/systemd/system/clamav-freshclam-once.timer
.
Nota
Freshclam en modo demonio realiza comprobaciones cada vez que se inicia un servicio.
Si se realiza más de una comprobación por hora, la CDN lo bloquea durante 24 horas.
La unidad
.timer
sigue la programación establecida, independientemente de los reinicios o reinicios del servicio. * Puede agregar bases de datos de firmas de virus adicionales siguiendo
#Agregar más bases de datos/repositorios de firmas
[
enlace roto
: sección no válida]
.
Iniciar el demonio ClamAV + OnAccessScanning
Esto cargará todas las firmas de virus en la RAM. A partir de febrero de 2024, estas firmas requieren al menos 1,6 GB de RAM libre. El doble de RAM se utilizará próximamente, durante la actualización periódica de las firmas.
Nota
Deberá ejecutar
freshclam
antes de iniciar el servicio por primera vez; de lo contrario, se producirán problemas o errores que impedirán que ClamAV se inicie correctamente.
El demonio no es necesario si solo desea realizar análisis independientes. Consulte
Análisis de virus
a continuación.
El demonio por sí solo no realiza ninguna acción a menos que habilite el Análisis en Acceso. Consulte:
#Habilitación de la protección en tiempo real OnAccessScan
El servicio se llama
clamav-daemon.service
. Inícielo y habilítelo para que se inicie al arrancar el sistema.
Además, inicie y habilite
clamav-clamonacc.service
para la protección en tiempo real al acceder.
Prueba del software
Para asegurarse de que ClamAV y las definiciones estén instaladas correctamente, escanee el
archivo de prueba EICAR
(una firma inofensiva sin código de virus) con "clamscan".
$ curl https://secure.eicar.org/eicar.com.txt | clamscan -
La salida
debe
incluir:
stdin: Win.Test.EICAR_HDB-1 FOUND
Protección en tiempo real
Puede descargar y guardar el archivo eicar en uno de los directorios que configuró para que Clamonacc monitorizara. Por ejemplo:
$ cd /home/user/Downloads/
$ wget https://secure.eicar.org/eicar.com.txt
$ cat eicar.com.txt
Añadiendo más repositorios de bases de datos/firmas
ClamAV puede usar bases de datos/firmas de otros repositorios o proveedores de seguridad.
Para agregar las más importantes en un solo paso, instale
clamav-unofficial-sigs
AUR
(consulte la
descripción de GitHub
) o
python-fangfrisch
AUR
(consulte la
documentación en línea
). Ambos agregarán firmas/bases de datos de proveedores populares, por ejemplo, MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect, etc.
Nota
Debe tener el servicio
clamav-freshclam.service
iniciado
para obtener actualizaciones de firmas oficiales de los servidores de réplica de ClamAV.
Opción n.° 1: Configurar Fangfrisch
Fangfrisch
se diseñó como un sustituto más seguro, flexible y práctico de clamav-unofficial-sigs y requiere
muy poca configuración
(
/etc/fangfrisch/fangfrisch.conf
).
Y lo más importante, Fangfrisch nunca necesita ejecutarse con permisos de root, a diferencia de clamav-unofficial-sigs.
Cree la estructura de la base de datos ejecutando:
# sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb
Habilitar
el
fangfrisch.timer
(a nivel de sistema).
Opción n.° 2: Configurar clamav-unofficial-sigs
Habilitar
el
clamav-unofficial-sigs.timer
.
Esto actualizará periódicamente las firmas no oficiales según los archivos de configuración del directorio
/etc/clamav-unofficial-sigs
.
Para actualizar las firmas manualmente, ejecute lo siguiente:
# clamav-unofficial-sigs.sh
Para cambiar la configuración predeterminada, consulte y modifique
/etc/clamav-unofficial-sigs/user.conf
.
Base de datos de MalwarePatrol
Si desea utilizar la base de datos de MalwarePatrol, regístrese en
https://malwareblocklist.org/
(de pago).
En
/etc/clamav-unofficial-sigs/user.conf
, modifique lo siguiente para habilitar esta función:
malwarepatrol_receipt_code="YOUR-RECEIPT-NUMBER" # Introduzca aquí su número de recibo
malwarepatrol_product_code="8" # Use 8 si tiene una cuenta gratuitar 15 si eres cliente Premium.
malwarepatrol_list="clamav_basic" # clamav_basic o clamav_ext
malwarepatrol_free="yes" # Establécelo en yes si tienes una cuenta gratuita o en no si eres cliente Premium.
Fuente:
https://www.malwarepatrol.net/clamav-configuration-guide/
Análisis de virus
Hay dos opciones para el análisis bajo demanda:
usar el análisis independiente
clamscan
puede usarse para analizar archivos específicos, directorios de inicio o un sistema completo:
$ clamscan myfile
$ clamscan --recursive --infected /home/archie
# clamscan --recursive --infected --exclude-dir='^/sys|^/dev' /
Si desea que
clamscan
elimine el archivo infectado, agregue la opción
--remove
al comando o puede usar
--move=/dir
para ponerlo en cuarentena.
También puede usar
clamscan
para analizar archivos más grandes. En este caso, añada las opciones
--max-filesize=4000M
y
--max-scansize=4000M
al comando. '4000M' es el valor máximo posible y puede reducirse según sea necesario.
Usar la opción
-l /path/to/file
imprimirá los registros de
clamscan
en un archivo de texto para localizar las infecciones reportadas.
usando el demonio
clamdscan
es similar al anterior, pero utiliza el demonio, que debe estar ejecutándose para que el comando funcione. La mayoría de las opciones se ignoran, ya que el demonio lee la configuración especificada en
/etc/clamav/clamd.conf
.
Usando milter
Milter escaneará su servidor de sendmail en busca de correos electrónicos con virus. Ajuste
/etc/clamav/clamav-milter.conf
según sus necesidades. Por ejemplo:
/etc/clamav/clamav-milter.conf
MilterSocket /tmp/clamav-milter.socket
MilterSocketMode 660
FixStaleSocket yes
Usuario clamav
MilterSocketGroup clamav
PidFile /run/clamav/clamav-milter.pid
TemporaryDirectory /tmp
ClamdSocket unix:/run/clamav/clamd.ctl
LogSyslog yes
LogInfected Basic
Crear
/etc/systemd/system/clamav-milter.service
:
/etc/systemd/system/clamav-milter.service
[Unit]
Descripción='ClamAV Milter
After=clamav-daemon.service

[Service]
Type=bifurcación
ExecStart=/usr/bin/clamav-milter --config-file /etc/clamav/clamav-milter.conf
Restart=Always

[Install]
WantedBy=multi-user.target
Su sistema podría requerir una directiva
Restart=
diferente. Es necesaria, por ejemplo, cuando un automatismo como
logrotate
detiene el servicio.
Enable
y
start
clamav-milter.service
.
Para
Postfix
, agregue las siguientes líneas a
/etc/postfix/main.cf
:
/etc/postfix/main.cf
smtpd_milters = unix:/tmp/clamav-milter.socket
milter_default_action = tempfail
Compruebe
journalctl
si el permiso de acceso a
clamav-milter.socket
para Postfix está configurado correctamente. De lo contrario, agregue el usuario Postfix al grupo
clamav
.
Consejos y trucos
Ejecutar en múltiples hilos
Usar clamscan
Al escanear un archivo o directorio desde la línea de comandos con
clamscan
, solo se utiliza un hilo de la CPU. Esto puede ser adecuado si la sincronización no es crítica o si no desea que el equipo se ralentice. Si necesita escanear rápidamente un directorio grande o una unidad USB, puede usar todas las CPU disponibles para acelerar el proceso.
clamscan
está diseñado para un solo subproceso, por lo que
xargs
puede usarse para ejecutar el escaneo en paralelo:
$ find /home/archie -type f -print0 | xargs -0 -P $(nproc) clamscan
En este ejemplo, el parámetro
-P
para
xargs
ejecuta
clamscan
en tantos procesos como CPU haya (indicadas por
nproc
) simultáneamente. Las opciones
--max-lines
y
--max-args
permiten un control aún más preciso de la agrupación de la carga de trabajo entre los subprocesos.
Esto consumirá mucha RAM, ya que cada proceso es individual y cargará los archivos de firma. Un solo hilo consumirá alrededor de 1 GB (o más) de RAM y podría bloquear el equipo a menos que OOM sea lo suficientemente inteligente. Quizás le interese usar clamdscan en su lugar.
Uso de clamdscan
Si ya tiene el demonio
clamd
ejecutándose, puede usar
clamdscan
en su lugar (consulte
#Iniciar el demonio ClamAV + OnAccessScanning
):
$ clamdscan --multiscan --fdpass /home/archie
Aquí, el parámetro
--multiscan
permite que
clamd
escanee el contenido del directorio en paralelo usando los hilos disponibles. El parámetro
--fdpass
es necesario para transferir los permisos del descriptor de archivo a
clamd
, ya que el demonio se ejecuta bajo el usuario y grupo
clamav
.
El número de subprocesos disponibles para
clamdscan
se determina en
/etc/clamav/clamd.conf
mediante el parámetro
MaxThreads
clamd.conf(5)
. Aunque puede ver que el número de
MaxThreads
especificado es superior a uno (el valor predeterminado actual es 10), al iniciar el análisis con
clamdscan
desde la línea de comandos y no especificar la opción
--multiscan
, solo se usará un subproceso de CPU efectivo para el análisis.
Habilitar TCPSocket
Si habilita TCPSocket en
/etc/clamav/clamd.conf
, también debe
editar
clamav-daemon.socket
(consulte el error
FS#57669
). El archivo de socket
systemd
nDebe configurarse con un puerto y una dirección IP coincidentes:
/etc/systemd/system/clamav-daemon.socket.d/override.conf
[Socket]
ListenStream=
ListenStream=/run/clamav/clamd.ctl
ListenStream=127.0.0.1:3310
Y finalmente,
reinicie
clamav-daemon.socket
para ver un enlace de Clamd en el puerto TCP 3310:
# ss -tulpn | grep clamd
tcp LISTEN 0 4096 127.0.0.1:3310 0.0.0.0:* Usuarios:(("clamd",pid=599,fd=4),("systemd",pid=1,fd=44))
Solución de problemas
Nota
Asegúrese de que el usuario desde el que ejecuta
clamscan
tenga permisos de lectura para los archivos de la base de datos (
/var/lib/clamav/*.c?d
)
Error: Clamd NO fue notificado
Si recibe los siguientes mensajes después de ejecutar freshclam:
WARNING: Clamd was NOT notified: Cannot connect to clamd through /var/lib/clamav/clamd.sock connect(): No such file or directory
Añadir un archivo sock para ClamAV:
Advertencia
Consulte la advertencia en
#Instalación
sobre la seguridad del puerto de clamd.
# touch /run/clamav/clamd.ctl
# chown clamav:clamav /run/clamav/clamd.ctl
Luego, edite
/etc/clamav/clamd.conf
y descomente esta línea:
LocalSocket /run/clamav/clamd.ctl
Guarde el archivo y
reinicie
clamav-daemon.service
.
Error: No se encontraron archivos de base de datos compatibles
Si recibe el siguiente error al iniciar el demonio:
LibClamAV Error: cli_loaddb(): No supported database files found in /var/lib/clamav ERROR: Not supported data format
Esto ocurre debido a una discrepancia entre la configuración
/etc/clamav/freshclam.conf
, que corresponde a
DatabaseDirectory
, y la configuración
/etc/clamav/clamd.conf
, que corresponde a
DatabaseDirectory
.
/etc/clamav/freshclam.conf
apunta a
/var/lib/clamav
, pero
/etc/clamav/clamd.conf
(directorio predeterminado) apunta a
/usr/share/clamav
o a otro directorio. Edite en
/etc/clamav/clamd.conf
y reemplácelo con el mismo
DatabaseDirectory
que en
/etc/clamav/freshclam.conf
. Después de eso, "clamav" se iniciará correctamente.
Error: No se puede crear el directorio temporal
Si recibe el siguiente error, junto con una "HINT" que contiene un UID y un GID:
can't create temporary directory
Permisos correctos:
# chown UID:GID /var/lib/clamav && chmod 755 /var/lib/clamav
Véase también
Wikipedia:ClamAV