15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
24.10.2024

Cómo Instalar ClamAV en Linux: Una Guía Técnica Completa

ClamAV es un motor antivirus de código abierto y multiplataforma mantenido por Cisco Talos que detecta virus, troyanos, rootkits, malware y otras amenazas maliciosas. Funciona mediante un modelo de detección basado en firmas respaldado por una base de datos actualizada continuamente (/var/lib/clamav/), y es la solución antivirus estándar de facto para servidores Linux, pasarelas de correo y entornos de alojamiento web.

Esta guía cubre el ciclo de vida completo de instalación: preparación del sistema, instalación de paquetes en las principales distribuciones, gestión de la base de datos de virus con freshclam, configuración del daemon, estrategias de escaneo, manejo de cuarentena, automatización con cron y escaneo en tiempo real mediante clamonacc — incluyendo errores de nivel de producción que la mayoría de los tutoriales omiten.

Por qué ClamAV es importante en servidores Linux

Los sistemas Linux no son inmunes al malware. Si bien los exploits dirigidos a Linux son menos comunes que las amenazas de Windows, los servidores que ejecutan aplicaciones web, relés de correo o servicios de intercambio de archivos son vectores activos de distribución de malware — incluso cuando el host Linux en sí no es el objetivo principal. Un entorno de VPS Hosting comprometido puede redistribuir silenciosamente archivos infectados a los usuarios finales, provocar la inclusión en listas negras de bases de datos de spam, o servir como punto de pivote en una cadena de ataque mayor.

ClamAV aborda esto proporcionando:

  • Escaneo bajo demanda para análisis programado o activado
  • Escaneo en modo daemon (clamd) para verificaciones de alto rendimiento y baja latencia
  • Integración con pasarela de correo mediante clamsmtp, amavisd-new o Milter
  • Monitoreo del sistema de archivos en tiempo real mediante clamonacc (kernel Linux fanotify)
  • Firmas de bytecode para detección heurística más allá de la coincidencia de patrones estáticos

Paso 1: Preparar y actualizar su sistema

Antes de instalar cualquier paquete, sincronice su índice de paquetes y aplique los parches de seguridad pendientes. Ejecutar bibliotecas del sistema desactualizadas junto con una herramienta de seguridad crea una falsa sensación de protección.

Para Debian/Ubuntu:

sudo apt update && sudo apt upgrade -y

Para CentOS/RHEL 7:

sudo yum update -y

Para Rocky Linux / AlmaLinux / RHEL 8+:

sudo dnf update -y

Para Fedora:

sudo dnf update -y

Confirme que las versiones de su kernel y glibc estén actualizadas, ya que clamonacc (escaneo en tiempo real) requiere kernel 5.1+ para soporte estable de fanotify.

Paso 2: Instalar ClamAV

ClamAV está disponible en los repositorios predeterminados de todas las distribuciones principales. La distinción clave es si instala solo el escáner (clamav) o también el daemon en segundo plano (clamav-daemon / clamd), lo cual es muy recomendable para cualquier servidor en producción.

Para Debian/Ubuntu:

sudo apt install clamav clamav-daemon -y
  • clamav — instala clamscan y freshclam
  • clamav-daemon — instala clamd, el daemon de escaneo persistente que mantiene la base de datos de virus cargada en memoria, reduciendo drásticamente la sobrecarga por escaneo
    
    Para CentOS/RHEL 7 (requiere EPEL):
    sudo yum install epel-release -y
    sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y
    Para Rocky Linux / AlmaLinux / RHEL 8+ (requiere EPEL):
    sudo dnf install epel-release -y
    sudo dnf install clamav clamav-update clamd -y
    Para Fedora:
    sudo dnf install clamav clamav-update clamd -y
    Ubicaciones de binarios post-instalación a verificar:
    
    
    
    
    Binario
    Ruta
    Propósito
    
    
    
    
    clamscan
    /usr/bin/clamscan
    Escáner CLI bajo demanda
    
    
    clamd
    /usr/sbin/clamd
    Daemon de escaneo en segundo plano
    
    
    freshclam
    /usr/bin/freshclam
    Actualizador de base de datos de virus
    
    
    clamdscan
    /usr/bin/clamdscan
    Cliente que delega a clamd
    
    
    clamonacc
    /usr/sbin/clamonacc
    Escáner de acceso en tiempo real
    
    
    
    
    Paso 3: Actualizar la base de datos de firmas de virus
    La capacidad de detección de ClamAV depende completamente de la actualidad de su base de datos de firmas. La base de datos reside en /var/lib/clamav/ y consta de varios archivos: main.cvd, daily.cvd (o .cld) y bytecode.cvd.
    Detener el daemon antes de la primera actualización (Debian/Ubuntu)
    En sistemas Debian/Ubuntu, clamav-freshclam.service se ejecuta automáticamente después de la instalación y bloquea el directorio de la base de datos. Si intenta ejecutar freshclam manualmente mientras este servicio está activo, encontrará un conflicto de bloqueo. Deténgalo primero:
    sudo systemctl stop clamav-freshclam
    sudo freshclam
    sudo systemctl start clamav-freshclam
    En CentOS/RHEL/Rocky/Alma:
    sudo freshclam
    Salida esperada en una actualización exitosa:
    ClamAV update process started at ...
    daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
    main.cvd is up to date
    bytecode.cvd is up to date
    Configurar actualizaciones automáticas de la base de datos
    freshclam está controlado por /etc/clamav/freshclam.conf. Directivas clave a revisar:
    sudo nano /etc/clamav/freshclam.conf
    Parámetros críticos:
    
    Checks 24 — número de verificaciones de actualización por día (predeterminado: 12 en algunas distribuciones)
    DatabaseMirror database.clamav.net — espejo oficial; no cambie a menos que use un espejo privado
    NotifyClamd /etc/clamav/clamd.conf — indica a freshclam que señale a clamd después de una actualización para que el daemon recargue las firmas sin reiniciarse
    
    Paso 4: Configurar e iniciar el daemon de ClamAV
    El daemon clamd mantiene la base de datos completa de virus residente en RAM (típicamente 500 MB–1,2 GB dependiendo de la versión de la base de datos). Esto elimina el costo de inicio de varios segundos de clamscan, haciéndolo esencial para cualquier entorno que realice escaneos frecuentes o concurrentes.
    Debian/Ubuntu
    sudo systemctl start clamav-daemon
    sudo systemctl enable clamav-daemon
    sudo systemctl status clamav-daemon
    CentOS/RHEL 7
    En RHEL 7, la unidad de servicio se llama clamd@scan, haciendo referencia al archivo de configuración /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
    Parámetros clave de clamd.conf
    La configuración del daemon reside en /etc/clamav/clamd.conf (Debian/Ubuntu) o /etc/clamd.d/scan.conf (familia RHEL). Revise estas directivas:
    sudo nano /etc/clamav/clamd.conf
    Configuraciones importantes:
    
    LocalSocket /run/clamav/clamd.ctl — ruta del socket Unix utilizada por clamdscan; asegúrese de que coincida con la configuración de su cliente
    MaxFileSize 100M — tamaño máximo de archivo a escanear; aumente para servidores de correo que manejan archivos adjuntos grandes
    MaxScanSize 400M — datos máximos escaneados por archivo después de la descompresión
    StreamMaxLength 100M — relevante para el escaneo basado en milter/stream
    User clamav — el daemon se ejecuta como el usuario clamav; asegúrese de que este usuario tenga acceso de lectura a los directorios que desea escanear
    LogFile /var/log/clamav/clamd.log — habilite el registro persistente para registros de auditoría
    
    Error crítico: Si clamd se ejecuta como usuario clamav y escanea /home/user/uploads/, el usuario clamav debe tener permisos de lectura en esa ruta. Olvidar esto resulta en fallos de escaneo silenciosos — clamd reportará errores de “Acceso denegado” en su registro en lugar de devolver un veredicto limpio/infectado.
    Paso 5: Ejecutar escaneos con clamscan y clamdscan
    Escaneo bajo demanda con clamscan
    clamscan es el escáner independiente. Carga la base de datos desde el disco en cada invocación, haciéndolo más lento pero independiente del daemon.
    Escanear un directorio específico de forma recursiva:
    clamscan -r /path/to/directory
    Escanear y mostrar solo archivos infectados:
    clamscan -r --infected /path/to/directory
    Escanear con salida detallada y registrar resultados:
    sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html
    Mover archivos infectados a un directorio de cuarentena:
    sudo clamscan -r --move=/var/quarantine /path/to/directory
    Eliminar archivos infectados automáticamente (usar con precaución en producción):
    sudo clamscan -r --remove /path/to/directory
    Escanear todo el sistema de archivos (espere un tiempo de ejecución significativo en discos grandes):
    sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /
    Excluir /sys, /proc y /dev es obligatorio — escanear estos pseudosistemas de archivos produce errores falsos y puede causar bloqueos.
    Escaneo de alto rendimiento con clamdscan
    Cuando clamd está en ejecución, use clamdscan en lugar de clamscan. Envía solicitudes de escaneo al daemon ya cargado a través del socket Unix, haciéndolo órdenes de magnitud más rápido para escaneos repetidos o masivos.
    clamdscan --fdpass /path/to/directory
    El indicador --fdpass pasa el descriptor de archivo directamente a clamd, evitando problemas de permisos que surgen cuando el usuario del daemon no puede leer la ruta de destino directamente.
    Escaneo multihilo con clamdscan:
    clamdscan --multiscan --fdpass /var/www/html
    --multiscan indica a clamd que escanee archivos en paralelo usando su grupo de hilos, reduciendo significativamente el tiempo de reloj en sistemas multinúcleo.
    clamscan vs. clamdscan: Comparación de rendimiento
    
    
    
    
    Atributo
    `clamscan`
    `clamdscan`
    
    
    
    
    Carga de base de datos por escaneo
    Sí (inicio lento)
    No (el daemon mantiene la BD en RAM)
    
    
    Tiempo de inicio típico
    5–30 segundos
    Menos de 1 segundo
    
    
    Requiere clamd en ejecución
    No
    Sí
    
    
    Escaneo paralelo
    No
    Sí (--multiscan)
    
    
    Mejor caso de uso
    Escaneos manuales puntuales
    Escaneos automatizados, frecuentes o masivos
    
    
    Modelo de permisos
    Se ejecuta como el usuario que lo invoca
    Se ejecuta como usuario clamav (use --fdpass)
    
    
    
    
    Paso 6: Automatizar escaneos con Cron
    Para una protección continua, programe escaneos regulares usando cron. El siguiente ejemplo escanea la raíz web diariamente a las 02:00 AM y registra los resultados con una marca de tiempo.
    sudo crontab -e
    Agregue la siguiente entrada:
    0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html
    Cron de nivel de producción con alertas por correo electrónico en caso de infección:
    0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com
    Esto canaliza la salida no vacía directamente a un destinatario de correo, asegurando que solo reciba alertas cuando se encuentre algo o ocurra un error. Asegúrese de que mailutils o postfix esté configurado en el servidor.
    Rotar los registros de escaneo para evitar el crecimiento ilimitado del disco:
    sudo nano /etc/logrotate.d/clamav-scan
    /var/log/clamav/daily_scan_*.log {
        weekly
        rotate 4
        compress
        missingok
        notifempty
    }
    Paso 7: Escaneo de acceso en tiempo real con clamonacc
    clamonacc es el componente de escaneo de acceso de ClamAV, introducido como característica estable en ClamAV 0.102. Se conecta al subsistema fanotify del kernel Linux para interceptar eventos de apertura y cierre de archivos, escaneando los archivos antes de que sean accedidos.
    Requisitos:
    
    Kernel Linux 5.1 o posterior (para fanotify con FAN_OPEN_EXEC_PERM)
    ClamAV 0.102+
    clamd debe estar en ejecución
    Privilegios de root
    
    Habilitar el escaneo de acceso en clamd.conf
    sudo nano /etc/clamav/clamd.conf
    Agregue o descomente:
    OnAccessIncludePath /home
    OnAccessIncludePath /var/www/html
    OnAccessPrevention yes
    OnAccessExcludeUname clamav
    
    OnAccessPrevention yes — bloquea el acceso a archivos infectados en tiempo real (modo de denegación); establezca en no para el modo de solo detección
    OnAccessExcludeUname clamav — evita que clamd en sí mismo desencadene bucles de escaneo recursivos
    
    Iniciar clamonacc
    sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonize
    Para ejecutarlo como un servicio systemd, cree un archivo de unidad:
    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
    Error conocido: En servidores de alto rendimiento (p. ej., endpoints de carga de archivos con mucho tráfico), OnAccessPrevention yes puede introducir latencia de E/S medible. Evalúe su carga de trabajo antes de habilitar el modo de prevención en producción. Considere limitar OnAccessIncludePath a la ruta más estrecha necesaria en lugar de directorios amplios como /.
    Paso 8: Integrar ClamAV con servidores de correo
    El caso de uso de producción más extendido de ClamAV es el escaneo de pasarelas de correo. Si está ejecutando un servidor de correo en su infraestructura de VPS Hosting o Servidores Dedicados, integrar ClamAV con su MTA es una capa de seguridad crítica.
    Pilas de integración comunes:
    
    Postfix + amavisd-new + ClamAV — amavisd-new actúa como filtro de contenido entre Postfix y ClamAV, también gestionando SpamAssassin
    Postfix + clamsmtp — proxy ligero estilo milter
    Exim + ClamAV — la directiva nativa av_scanner de Exim admite clamd directamente mediante socket
    
    Ejemplo: integración de clamd de Exim en /etc/exim4/exim4.conf:
    av_scanner = clamd:/run/clamav/clamd.ctl
    Esta única directiva enruta todo el contenido de los mensajes a través de la instancia de clamd en ejecución antes de la entrega. Combínela con una configuración adecuada de Alojamiento de Correo Electrónico para garantizar que su infraestructura de correo esté completamente protegida.
    Solución de problemas comunes de ClamAV
    freshclam falla con “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 no inicia: “ERROR: Can’t open/parse the config file”
    Verifique la ruta del archivo de configuración y la sintaxis:
    sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50
    Alto uso de memoria
    clamd típicamente consume entre 500 MB y 1,2 GB de RAM con la base de datos completa cargada. En sistemas con memoria limitada, considere:
    
    Establecer MaxThreads 2 en clamd.conf para limitar la concurrencia
    Usar clamscan sin el daemon para escaneos poco frecuentes
    Actualizar a un plan con RAM suficiente — un plan de VPS Hosting con al menos 2 GB de RAM es el mínimo práctico para ejecutar clamd junto con una pila web
    
    El escaneo devuelve “Access denied” para archivos
    El daemon clamd se ejecuta como el usuario clamav. Otorgue acceso de lectura:
    sudo setfacl -R -m u:clamav:rX /path/to/scan
    O use clamdscan --fdpass para pasar descriptores de archivo desde el contexto del usuario que lo invoca.
    Falsos positivos
    ClamAV ocasionalmente marca archivos legítimos, particularmente archivos comprimidos o ciertos frameworks PHP. Para incluir en la lista blanca un archivo conocido como seguro por hash:
    sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp
    Reinicie clamd después de modificar los archivos .fp.
    ClamAV en alojamiento compartido vs. VPS vs. servidor dedicado
    El modelo de implementación afecta significativamente cómo debe configurarse ClamAV:
    
    
    
    
    Entorno
    Modo recomendado
    Notas
    
    
    
    
    Alojamiento Web Compartido
    clamscan bajo demanda mediante cron
    Sin acceso root; modo daemon no disponible
    
    
    VPS (2–4 GB RAM)
    Daemon clamd + cron clamdscan
    Equilibrio entre rendimiento y limitaciones de memoria
    
    
    Servidor Dedicado
    clamd + clamonacc + integración de correo
    Conjunto completo de características; sin compromiso de recursos
    
    
    Nodo GPU/alto cómputo
    Solo daemon clamd
    Evite la sobrecarga de E/S de clamonacc en pipelines de datos
    
    
    
    
    Para entornos que requieren el máximo rendimiento y control total sobre las herramientas de seguridad, los Servidores Dedicados proporcionan el margen de hardware para ejecutar clamd, clamonacc y el escaneo de correo simultáneamente sin contención de recursos.
    Matriz de decisión técnica y conclusiones clave
    Antes de implementar ClamAV, valide cada uno de los siguientes puntos:
    
    Versión del kernel — ejecute uname -r; confirme 5.1+ si se requiere clamonacc
  • RAM disponibleclamd necesita 1–1,5 GB; planifique en consecuencia antes de habilitar el daemon
  • Automatización de freshclam — confirme que clamav-freshclam.service esté habilitado y que NotifyClamd esté configurado en freshclam.conf
  • Permisos del socket — verifique que el usuario clamav pueda leer todos los destinos de escaneo; use --fdpass con clamdscan donde las ACL sean impracticables
  • Rutas de exclusión — excluya siempre /proc, /sys, /dev de los escaneos recursivos
  • Rotación de registros — implemente logrotate para todos los archivos de registro de ClamAV antes de habilitar trabajos cron diarios
  • OnAccessPrevention — pruebe en modo de solo detección (no) antes de cambiar al modo de bloqueo (yes) en sistemas de producción
  • Integración de correo — si ejecuta un servidor de correo, integre mediante amavisd-new o la directiva nativa av_scanner del MTA, no solo mediante escaneos periódicos de archivos
  • Directorio de cuarentena — cree previamente /var/quarantine con la propiedad adecuada antes de usar --move; clamscan no lo creará automáticamente
  • Gestión de falsos positivos — mantenga un archivo de lista blanca .fp y revise los registros de escaneo después de cada actualización de la base de datos para detectar regresiones

Preguntas frecuentes

¿ClamAV proporciona protección en tiempo real en Linux de forma predeterminada?

No. Después de la instalación, ClamAV opera únicamente en modo bajo demanda. La protección en tiempo real requiere habilitar explícitamente clamonacc con las directivas OnAccessIncludePath y OnAccessPrevention en clamd.conf, además de un kernel que admita fanotify (5.1+).

¿Cuál es la diferencia entre clamscan y clamdscan?

clamscan es un binario independiente que carga la base de datos de virus desde el disco en cada invocación, resultando en un retraso de inicio de 5–30 segundos. clamdscan es un cliente ligero que envía trabajos de escaneo al daemon clamd ya en ejecución, que mantiene la base de datos en RAM — haciéndolo significativamente más rápido para escaneos repetidos o automatizados.

¿Cuánta RAM requiere el daemon de ClamAV?

clamd con la base de datos completa actual (main + daily + bytecode) típicamente requiere entre 700 MB y 1,2 GB de memoria residente. En sistemas con menos de 2 GB de RAM total, ejecutar el daemon junto con un servidor web o base de datos puede causar presión de memoria. Use clamscan sin el daemon en instancias con memoria limitada.

¿Puede ClamAV escanear archivos comprimidos y adjuntos de correo electrónico?

Sí. ClamAV desempaqueta y escanea de forma nativa ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB y muchos otros formatos de archivo, así como documentos OLE2 (Microsoft Office), archivos PDF y ejecutables ELF/PE. Las directivas MaxScanSize y MaxFileSize en clamd.conf controlan los límites de profundidad y tamaño para el escaneo de archivos.

¿Por qué freshclam reporta “locked by another process” inmediatamente después de la instalación?

En Debian/Ubuntu, el servicio systemd clamav-freshclam se inicia automáticamente después de la instalación del paquete y mantiene un bloqueo exclusivo sobre el directorio de la base de datos. Ejecutar freshclam manualmente mientras este servicio está activo provoca un conflicto de bloqueo. Detenga el servicio con sudo systemctl stop clamav-freshclam, ejecute la actualización manual y luego reinicie el servicio.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar