Cómo integrar pure-ftpd y clamav para buscar virus en subidas FTP

Con unos sencillos pasos (esta entrada está basada en este artículo de wiki.cpaneldirect.net) es posible integrar el servidor ftp pure-ftpd con el antivirus clamav. Gracias a esto automatizaremos la revisión en busca de virus en todos los ficheros que se suban por FTP.

Lo primero que debemos hacer es instalar clamav. Si el sistema es RHEL, CentOS, etc podemos instalarlo por yum (tendremos que tener el repositorio DAG):

# yum install clamav

Damos por supuesto que pure-ftpd está instalado y configurado, así que entramos directamente en materia. Lo primero es modificar la configuración de pure-ftpd y habilitar la llamada de scripts cuando se realicen subidas al servidor:

# vim /etc/pure-ftpd.conf

Descomentamos la línea CallUploadScript yes:

# If your pure-ftpd has been compiled with pure-uploadscript support,
# this will make pure-ftpd write info about new uploads to
# /var/run/pure-ftpd.upload.pipe so pure-uploadscript can read it and
# spawn a script to handle the upload.

CallUploadScript yes

Ahora tenemos que modificar el script de arranque de pure-ftpd para añadir la llamada al binario encargado de esta tarea (pure-uploadscript).

Justo debajo de la línea (sección START):

$DAEMONIZE $fullpath /etc/pure-ftpd.conf -O clf:/var/log/xferlog $OPTIONS --daemonize

Añadimos:

$DAEMONIZE /usr/sbin/pure-uploadscript -B -r /var/run/pure-ftpd/clamscan.sh

Y justo debajo de esta (sección STOP):

kill $(cat /var/run/pure-ftpd.pid)

Añadimos esta:

kill $(cat /var/run/pure-ftpd/pure-uploadscript.pid)

Ahora creamos el script encargado de revisar los ficheros en busca de virus, lo llamaremos /var/run/pure-ftpd/clamscan.sh, y contendrá lo siguiente.

#!/bin/sh

# /usr/local/bin/clamdscan is faster if clamd is running
CLAMLOC='/usr/local/bin/clamscan';

if [ ! -x $CLAMLOC ]; then
        echo 'clamscan not found';
        exit;
fi
if [ "$1" = "" ]; then
        echo 'Variable is blank';
        exit;
fi
if [ ! -f "$1" ]; then
        echo "$1 file not found"
        exit;
fi

# maybe you would prefer --move=/DIRECTORY instead of remove
$CLAMLOC --remove $1

Como podéis ver, en este script los ficheros que se detecten como maliciosos se eliminan, si queremos que los mueva a una ruta distinta en lugar de borrar usamos –move=/DIRECTORY.

Personalmente veía de gran utilidad que me avisara por correo electrónico, así que podéis usar esta variación del script si queréis en la que el fichero no se toca y si se detecta que es un virus se avisa por correo:

#!/bin/bash
# /usr/local/bin/clamdscan is faster if clamd is running
CLAMLOC='/usr/bin/clamscan';

if [ ! -x $CLAMLOC ]; then
        echo 'clamscan not found';
        exit;
fi
if [ "$1" = "" ]; then
	echo 'Variable is blank';
	exit;
fi
if [ ! -f "$1" ]; then
	echo "$1 file not found"
	exit;
fi
EMAIL="test@micorreo.com"  # Aqui pon tu dirección de correo electronico

# maybe you would prefer --move=/DIRECTORY instead of remove
$CLAMLOC $1 2>/dev/null | grep "FOUND"
if [ "$?" == "0" ]; then
        echo "Script $1 subido por $UPLOAD_USER." | mail -s "[$(hostname)] Upload de fichero malicioso" $EMAIL
fi

Modificamos los permisos del script a 755:

# chmod 755 /var/run/pure-ftpd/clamscan.sh

Y reiniciamos pure-ftpd:

# /etc/init.d/pure-ftpd restart

Ahora solo queda esperar o probar, podéis subir por FTP un fichero malicioso (shell en php, código ofuscado, etc) para verificar el funcionamiento.

6 comentarios en “Cómo integrar pure-ftpd y clamav para buscar virus en subidas FTP

  1. ———————— AUTHENTICATION MODULES ————————…Since release 1.0.8 anyone can add new custom authentication methods to.Pure-FTPd without recompiling anything using authentication modules …To enable it you must . configure with –with-extauth or.–with-everything. Linux binary packages have it enabled by default…Heres how they are working ..1 A client connects to the FTP server and issues a login password pair…2 The FTP server connects to a local separate daemon called pure-authd..Data transmitted to that daemon is users login users password the IP.address that user connected to the local port that user connected to and.the users remote IP address…3 pure-authd spawns an authentication program.

  2. Hola, no he podido continuar desde aquí:

    ———
    Ahora tenemos que modificar el script de arranque de pure-ftpd para añadir la llamada al binario encargado de esta tarea (pure-uploadscript).
    ———

    donde esta el archivo o hay que crearlo?

  3. algun script o archivo malicioso para hacer la prueba? o como saber si esta funcionando correctamente?
    subi uno para probar pero clamscan no lo reconoce como malicioso…

  4. Saludos, gracias por el dato, funciona perfecto, al menos reconocio el archivo malicioso y envió el mensaje correctamente.
    Espero que pueda detectar la mayoría de los archvos maliciosos…

Comments are closed.