Por fin el 21 de agosto liberé la versión 1.1.0 del módulo para escaneo de documentos mediante antivirus llamado Alfviral (el nombre a lo mejor no es muy apropiado pero fue el que se me ocurrió en ese momento).
Básicamente lo que se ha incluido ha sido una pequeña refactorización del código y la inclusión de la posibilidad de poder escanear los documentos mediante la página www.virustotal.com que a su vez utiliza más de 40 motores de antivirus.
Las características actuales del módulo son:
1. Escanear en base a tres modos distintos:
COMMAND: Permite utilizar un script o directamente el programa ejecutable del antivirus que se quiera siempre y cuando permita al menos un parámetro que sea el fichero a escanear. Este proceso depende del arranque del comando antivirus en si.
INSTREAM: Utilizado para lanzar un flujo de datos del fichero en Alfresco hacia el puerto (3310TCP) utilizado por ClamAV. Esto permite tener un antivirus ClamAV central en un servidor y utilizarlo remotamente desde Alfresco.
VIRUSTOTAL: En este modo se sube el fichero que sube o se actualiza en Alfresco a la web virustotal.com vía HTTP mediante el método POST y se recoge el resultado mediante JSON para su análisis.
2. Si el documento se detecta como infectado se añade el aspecto «infected» así como un aspecto adicional dependiendo del método utilizado para su análisis.
3. Uso de las «policies» de Alfresco usando los métodos onContentUpdate y onContentRead para analizar los documentos que son subidos, modificados y/o leídos.
4. Se puede utilizar el análisis mediante una programación de tiempo indicando a partir de qué espacio se quiere analizar y si se utiliza en profundidad, es decir, a los subespacios.
5. Implemena acciones de usuario tanto en la interface /alfresco como en /share para poder analizar documentos de forma interactiva.
6. Uso de reglas para personalizar los análisis utilizando la acción de escanear.
7. Facilidad de instalación utilizando las Alfresco Module Management Tools para la parte de repositorio y copiando directamente una librería en extension/lib para Share.
8. Configuración flexible y sencilla para establecer el modo de análisis y las formas en las que se quiere realizar el análisis:
– Al subir/modificar un documento
– Al leer un documento
– En una programación horaria y/o de fecha concreta
– Desde una carpeta (espacio de trabajo) en adelante
Un ejemplo de configuración es:
# Command to exec, i.e. clamscan, alfviral.sh, etc. alfviral.command=C:\Users\fegor\Documents\alfviral.bat # Config for ClamAV in stream data alfviral.timeout=30000 alfviral.host=127.0.0.1 alfviral.port=3310 #Config for VIRUSTOTAL vt.key=246df658bca5e096895683c01ba4bd2eb3a00303b506bda774b71488134bf984 vt.url=https://www.virustotal.com/vtapi/v2/file/scan # Modes: COMMAND, INSTREAM, VIRUSTOTAL alfviral.mode=VIRUSTOTAL # Events alfviral.on_update=TRUE alfviral.on_read=FALSE # Scheduled action alfviral.scheduled.pathQuery=/app:company_home/st:sites alfviral.scheduled.cronExpression=* * 3 * * ? 2099
Toda la información tanto en español como en inglés está en la página principal del proyecto: http://code.google.com/p/alfviral/
Como es un proyecto libre y personal las mejoras y nuevas funcionalidades dependen mucho de mi tiempo libre pero más o menos algunas ideas que tengo en mente son:
– Añadir estadísticas sobre los documentos infectados
– Posibilidad de mover los documentos infectados a un espacio de cuarentena
– Recuperación de los documentos infectados a su ubicación original si son desinfectados o se eliminan los aspectos de infección.
– Añadir nuevos protocolos de comunicación con antivirus (Symantec, McAfee,…)
– Poder utilizar distintos modos de análisis al mismo tiempo y para diferentes objetos (espacios y ficheros)
Buenos días,
En primer lugar darte la enhorabuena por el trabajo realizado.
A continuación queria realizarte una cuestión. Hace un mes instalé la versión de alfviral 1.0 beta, al instalar esta nueva versión y redesplegar el war, me aparece un error indicando que la versión anterior debería ser desinstalada, ¿como se realizaría dicha desinstalación? Muchas gracias!
Hola,
Gracias por usar mi modulo. Alfresco hasta el momento no tiene un des-instalador de módulos así que tienes que recurrir a renombrar el fichero de backup que te genero al instalar el modulo. ¿Has probado de todas formas a usar el modificador -force al instalar el modulo con las Alfresco Management Module Tools?
Hola,
Muchas gracias por la pronta respuesta.
La instalación de Alviral 1.1.0 se realiza correctamente tal y como indica al realizar un list de los módulos instalados:
Module 'alfviral' installed in '/opt/alfresco40d/tomcat/webapps/alfresco.war'
Title: Alfresco Virus Alert
Version: 1.1.0
Install Date: Thu Sep 06 12:04:44 CEST 2012
Description: Alfresco module for viruses scan files
El problema aparece cuando descomprimo el tar que he creado anteriormente del directorio alfresco con el objetivo de mantener ciertas modificaciones de mi Alfresco. Al reiniciar Alfresco, me aparece lo siguiente:
Downgrading of modules is not supported.
Module 'alfviral' version 1.1.0 is currently installed and must be uninstalled before version 1.0 can be installed.
at org.alfresco.error.AlfrescoRuntimeException.create(AlfrescoRuntimeException.java:46)
at org.alfresco.repo.module.ModuleComponentHelper.startModule(ModuleComponentHelper.java:550)
at org.alfresco.repo.module.ModuleComponentHelper.access$400(ModuleComponentHelper.java:57)
at org.alfresco.repo.module.ModuleComponentHelper$1$1.execute(ModuleComponentHelper.java:239)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:388)
at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:278)
at org.alfresco.repo.module.ModuleComponentHelper$1.doWork(ModuleComponentHelper.java:260)
… 54 more
En un principio he planteado que la metodología a seguir sería desinstalar la versión previa del módulo (opción no posible), realizar un tar del directorio de alfresco, instalar el nuevo módulo, redesplewar el war, descomprimir el tar del directorio de tomcat/webapps/alfresco creado a fin de mantener las modificaciones y reiniciar alfresco. Pero aparece el error anterior. ¿Es esta una «metodología» correcta? ¿O debería por ejemplo, crear un script que haga esas modificaciones (de apariencia sobretodo) a posteriori de la instalación de nuevos módulos o nuevas versiones de los mismos?
Muchas gracias!
Hola Antonio, la forma en la que haces el proceso no es correcta ni fiable. Mira la documentación de Alfresco para la instalación y mantenimiento de módulos y sobre todo, intenta que tus personalizaciones sean módulos o estén en la parte de tomcat/shared/classes/alfresco/extension para no tener que copiar cosas en el despliegue. Seguramente al recuperar el tar estás sobrescribiendo ficheros y por eso se produce este error.
Muchas gracias. Voy a ponerme a ello y a configurarlo todo correctamente. Saludos.
Muy grande Fegor!!!
Sabía que andabas en esas aguas y no se esperaba menos de ti.
A ver si te mola esto… no se quien lo ha escrito 😛
http://maculi33.blogspot.com.es/2012/09/modsecurity-analizando-archivos-subidos.html
Buenos días,
Tras solucionar el problema de la instalación de los módulos, he pasado a configurar alfviral. Me interesa realizarlo en modo INSTREAM, de modo que cuando los usuarios suban un nuevo documento en el sitio de Alfresco Share, éstos sean analizados por ClamaAV.
La cuestión es que en la salida del servidor puedo ver como se analizan todos los directorios y documentos de mis sitios de Alfresco, incluyendo ficheros *.xml de configuración, cuando solo me interesaría que se analizara el documento subido. Además en algún determinado fichero se produce el siguiente error:
2012-09-24 11:50:09,019 DEBUG [alfresco.action.VirusScan] [DefaultScheduler_Worker-10] com.fegor.alfresco.action.VirusScan: [Mode: INSTREAM]
2012-09-24 11:50:16,743 ERROR [alfresco.action.VirusScan] [DefaultScheduler_Worker-10] Error in instream operation.
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.DataOutputStream.write(DataOutputStream.java:90)
[…]
¿Qué es lo que puede estar fallando? ¿Cuál sería la configuración correcta?
Muchas gracias.
Antonio, sobre lo de escanear solo en base a una lista de documentos por extensiones lo tengo planeado hacer usando en la configuración una lista tipo «xml, doc, xsl,…» pero si puedes hacer la petición de mejora en el proyecto te lo agradecería ya que ahí puedes realizar un seguimiento de esta nueva capacidad. El enlace para crear «issues» es: https://code.google.com/p/alfviral/issues/list
En cuanto a tu segunda cuestión, es un error en la conexión lo que puede ser provocada por multitud de situaciones, abre también una incidencia en el proyecto y me pongo con ella.
Buenos días Fegor,
Estoy realizando unas pruebas con mi Alfresco y me interesa desactivar el escaneo de los documentos temporalmente, ¿existe alguna opción (por ejemplo indicándolo en la propiedad alfviral.command) para que no realice el escaneo de documentos?
Muchas gracias!
Por supuesto Antonio, puedes desactivar el escaneo programado si desactivas la programación, por ejemplo:
alfviral.scheduled.cronExpression=* * * * * ? 2099
Y también el escaneo de documentos que subes, creas o modificas si desactivas el evento on_update, por ejemplo:
alfviral.on_update=FALSE