ClamAV es un potente antivirus diseñado para correr en sistemas GNU/Linux. A algunos esto les chirriará porque habrán léido que Linux no tiene virus, pero esto sólo es cierto si no ampliamos el concepto de virus a rootkits, exploits, troyans, y un largo etc. Pero no vamos a entrar en filosofías. El hecho es que dentro de un sistema de ficheros se puede esconder malware, y eso es lo que ClamAV va detectar. Ya sea como archivos adjuntos en el email, archivos comprimidos en el FTP, o cualquier otro medio.

ClamAV es un programa que se ejecuta en un equipo. Como tal, se puede ejecutar a través de CLI o GUI. Analizará el contenido del sistema de ficheros y producirá un resultado. Si gestionas un VPS o un equipo remoto, tendrías que entrar diariamente y ejecutarlo manualmente. Como esto no es cómodo, veamos cómo automatizar el proceso. Vamos a considerar que el equipo está basado en Debian, y que al menos ya tenemos configurado y en producción un MDA.También debemos tener privilegios de administrador (root) durante todo el proceso.
Instalación de los programas
ClamAV
apt-get update && apt-get install clamav clamav-freshclam
Esto por defecto te instala el antivirus y el freshclam que es un paquete para actualizarlo. Se actualiza 24 veces al día automáticamente, pero puedes hacerlo también manualmente así:
freshclam
Si por lo que fuera el daemon con el actualizador no arrancó, – cosa que puedes comprobar fácilmente ejecutando éstas lineas:
[[ $(pgrep freshclam) ]] && echo "arrancado" || echo "No arrancado"
– entonces puedes arrancarlo manualmente así:
service clamav-freshclam start
También necesitamos de un programa cliente que pueda realizar las operaciones típicas de un MTA que soporte SMTP. En ese caso sólo lo usaremos para enviar mail interno, es decir, entre usuarios del propio equipo. Al ser un programa cliente, es decir, no corre automáticamente como servicio, se debe invocar manualmente. Para instalarlo:
apt-get install heirloom-mailx
Para comprobar su funcionamiento puedes mandar un correo de prueba a uno o varios usuarios del sistema. El comando, sería el siguiente.
echo "Hola" | mail -s "Asunto"-r "root@localhost" "admin@localhost,user@localhost"
Y si tenéis algun MUA en local configurado para escuchar el MDA del servidor, os debería llegar el correo con el saludo.
Creación del script
Ahora, toca programar algo de scripting. Éste es un sencillo script en bash que ejecutará el antivirus para analizar todo el sistema de ficheros. Seguidamente, analizará el contenido del log generado para determinar si ha detectado archivos infectados para finalmente adjuntarlo a un email.
#!/bin/bash TARGET="/" LOGFILE="/var/log/clamav/clamav-`date +'%Y-%m-%d'`.log"; FROM="root@localhost"; TO="administrador@localhost,user@localhost"; # Pon aquí tus usuarios # OPCIONAL. Actualizar la base de datos de ClamAV echo "Looking for ClamAV database updates..."; freshclam --quiet; # Indicamos la prioridad del proceso para no colgar otros procesos nice -n5 clamscan -ri $TARGET --exclude-dir=/sys/ &>"$LOGFILE"; # Cogemos el valor "Infected files". Si es distinto de "0", hay malware. HOWMUCHMALWARE=`tail "$LOGFILE" | grep "Infected" | cut -d" " -f3`; # if the value is not equal to zero, send an email with the log file attached if [ "$HOWMUCHMALWARE" -ne "0" ];then echo -e "Warning! Possible malware detected. \n \ Check the attached log for more details." | mail -a "$LOGFILE" \ -s "Malware Found! at `date`" -r "$FROM" "$TO"; else echo -e "Everything seems to be trustworthy }:)" | mail -a "$LOGFILE" \ -s "Daily ClamAV report at `date`" -r "$FROM" "$TO"; fi exit 0
Antes de pasar al siguiente punto, es preferible que pruebes a ejecutarlo para comprobar si funciona todo correctamente. Cabe reseñar que estando la línea exit 0
, tendrás que ejecutarlo como un subproceso. Resumiendo; pruébalo así: ./clamav.sh
y no así source clamav.sh
o de lo contrario se te cerrará la sesión/terminal.
Tarea programada
Una vez probada la eficacia del ejecutable, el siguiente paso es programar su ejecución. El servicio que se encarga de contar el tiempo y ejecutar el script es cron. Dado que queremos que esto ocurra diariamente , debemos ponerlo en el directorio /etc/cron.daily/. Por otro lado, dado que éste script analiazará ficheros de todo el equipo es recomendable que pertenezca al usuario root . Puedes cambiar el propietario mediante chown , pero lo mejor es dejarlo en un lugar propiedad de root y luego crear un enlace a la mencionada carpeta. La secuencia de comandos, sería:
1. Mover el fichero desde donde lo hayamos creado hasta el directorio root
mkdir /root/scripts/ && mv /ruta/al/clamav.sh /root/scripts
2. Permisos de ejecución
chown root:root /root/scripts/clamav.sh && chmod 774 /root/scripts/clamav.sh
3. Crear el enlace
ln /root/scripts/clamav.sh /etc/cron.daily/clamavthroughmail
Y ya sólo queda esperar a recibir los informes por mail. Por cierto, cron garantiza que lo ejecutará una vez el día en este caso, pero no cuándo, exactamente. Si tiene que ser a una determinada hora, deberás editar el crontab de root para ello. Por supuesto, esto no queda relegado a un análisis diario. Si ejecutas ls -ld /etc/cron.*
obtendrás una lista de alternativas.
Glosario
- FTP: Protocolo para transferir ficheros.
- SMTP: Protocolo de envío de correo.
- CLI: Interfaz de línea de comandos.
- GUI: Interfaz gráfica de usuario.
- MUA: Agente de correo de usuario. Por ejemplo: Icedove, Thunderbird, gmail, outlook, …
- MTA: Agente de transferencia de correo. Por ejemplo: Postfix, sendmail, Exim, …
- MDA: Agente de entrega de correo. Por ejemplo: Dovecot, Procmail, Maildrop, Courier, …
- VPS: Servidor privado virtual.