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.