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¶
-
Instala las dependencias necesarias:
bash sudo apt-get install zenity libnotify-bin at -
Configura ClamAV según el primer archivo (sigue todos los pasos)
-
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
-
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 -
Asegúrate de que el servicio 'at' esté habilitado:
bash sudo systemctl enable atd sudo systemctl start atd -
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?