Saltar a contenido

Resumen de configuración de ClamAV de bajo consumo

Te he preparado dos archivos con todo lo que necesitas para implementar una configuración eficiente de ClamAV:

1. Configuración de bajo consumo de recursos

He creado un documento detallado con la configuración optimizada para reducir el consumo de recursos. Incluye: - Configuración de clamd.conf - Configuración de freshclam.conf - Cómo desactivar el demonio de escaneo en tiempo real - Paso a paso para implementar todos los cambios

La clave de esta configuración es: - Limitar el número de hilos a 2 - Reducir el tamaño máximo de archivos a escanear - Excluir directorios del sistema que no necesitan ser escaneados - Desactivar el escaneo en tiempo real y hacerlo solo programado

2. Script para escaneo programado con notificación

El script que he creado: - Notifica 2 minutos antes del inicio del escaneo - Permite aceptar, posponer o cancelar el escaneo - Si se pospone, lo reprograma para 1 hora después - Ejecuta el escaneo con prioridad baja (nice -n 19) - Notifica cuando el escaneo finaliza y si se encontraron amenazas

3. Configuración del cron para lunes a las 00:00

Para programar el escaneo los lunes a las 00:00 horas, he incluido la configuración exacta del crontab.

Implementación paso a paso

  1. Instala las dependencias necesarias: bash sudo apt-get install zenity libnotify-bin at

  2. Configura ClamAV según el primer archivo (sigue todos los pasos)

  3. Crea el script de escaneo interactivo: bash sudo nano /usr/local/bin/clamav-interactive-scan.sh # Pega el contenido del segundo archivo sudo chmod +x /usr/local/bin/clamav-interactive-scan.sh

Script para escaneo programado de ClamAV con notificación al usuario

   #!/bin/bash
   # Script para escaneo programado de ClamAV con notificación al usuario
   # Guardar como: /usr/local/bin/clamav-interactive-scan.sh

   # Función para enviar notificación
   send_notification() {
   # Detecta el entorno de escritorio y usuario activo
   active_user=$(who | grep tty | grep -v root | head -n 1 | awk '{print $1}')
   user_id=$(id -u "$active_user")

   # Envía notificación usando DBUS al usuario activo
   if [ -n "$active_user" ]; then
   su "$active_user" -c "DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$user_id/bus notify-send -i security-high 'Escaneo ClamAV' '$1' -t 60000"
   fi
   }

   # Función para mostrar diálogo de confirmación
   ask_confirmation() {
   active_user=$(who | grep tty | grep -v root | head -n 1 | awk '{print $1}')
   user_id=$(id -u "$active_user")

   if [ -n "$active_user" ]; then
   response=$(su "$active_user" -c "DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$user_id/bus zenity --question --title='Escaneo ClamAV programado' --text='El escaneo semanal de ClamAV está programado para iniciar ahora.\n\n¿Desea proceder?' --ok-label='Iniciar ahora' --cancel-label='Posponer 1 hora' --timeout=60" 2>/dev/null; echo $?)
   echo $response
   return $response
   fi
   # Si no hay usuario activo, proceder con el escaneo
   return 0
   }

   # Verifica si hay un usuario con sesión iniciada, si no - simplemente ejecuta el escaneo
   if [ -z "$(who | grep tty)" ]; then
   # Sistema sin usuario activo, ejecutar silenciosamente
   nice -n 19 ionice -c3 clamscan --recursive --quiet \
   --exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev --exclude-dir=/run \
   --max-filesize=100M --max-scansize=300M /home /etc /bin /sbin /usr/bin /usr/sbin > /var/log/clamav/weekly_scan.log
   exit $?
   fi

   # Envía notificación inicial
   send_notification "El escaneo semanal está programado para iniciar en 2 minutos. Puede cancelarlo desde el panel de notificaciones."

   # Espera un minuto
   sleep 60

   # Pide confirmación al usuario
   ask_confirmation
   response=$?

   # Verifica la respuesta
   if [ $response -eq 0 ]; then
   # Usuario aceptó o tiempo de espera expiró
   send_notification "Iniciando escaneo. Esto puede ralentizar temporalmente el sistema."

   # Ejecuta el escaneo con prioridad baja
   nice -n 19 ionice -c3 clamscan --recursive --quiet \
   --exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev --exclude-dir=/run \
   --max-filesize=100M --max-scansize=300M /home /etc /bin /sbin /usr/bin /usr/sbin > /var/log/clamav/weekly_scan.log

   # Verifica resultado y notifica finalización
   if [ $? -eq 0 ]; then
   send_notification "Escaneo completado. No se encontraron amenazas."
   else
        send_notification "⚠️ Escaneo completado. Se encontraron posibles amenazas. Revise el log en /var/log/clamav/weekly_scan.log"
   fi
   else
   # Usuario canceló o postergó
   send_notification "Escaneo pospuesto. Se ejecutará en 1 hora."

   # Programa nueva ejecución en una hora usando at
   at now + 1 hour -f /usr/local/bin/clamav-interactive-scan.sh
   fi
  1. Configura el cron: bash sudo nano /etc/cron.d/clamav-scan # Pega el contenido del tercer archivo sudo chmod 644 /etc/cron.d/clamav-scan

  2. Asegúrate de que el servicio 'at' esté habilitado: bash sudo systemctl enable atd sudo systemctl start atd

  3. Crea el directorio de logs si no existe: bash sudo mkdir -p /var/log/clamav sudo chown clamav:clamav /var/log/clamav

Con esta implementación tendrás un sistema de seguridad que: - No consume recursos innecesariamente - Te avisa antes de realizar un escaneo - Te permite posponer el escaneo si estás ocupado - Se ejecuta automáticamente cada lunes a medianoche

¿Necesitas alguna aclaración adicional o ayuda con algún paso específico?