Amavis - Amavis

Amavis
Desarrollador (es) Patrick Ben Koetter
Versión inicial 1997  ( 1997 )
Lanzamiento estable 2.11.1 (9 de octubre de 2018 ; hace 2 años ) [±]  ( 09/10/2018 )
Repositorio Edita esto en Wikidata
Escrito en Perl
Sistema operativo Tipo Unix
Escribe Filtrado de correo
Licencia GPLv2 , licencia BSD simplificada
Sitio web www .amavis .org Edita esto en Wikidata

Amavis es una fuente abierta de filtro de contenido para el correo electrónico , la aplicación de transferencia de mensajes de correo electrónico, la decodificación, algún tipo de procesamiento y comprobación, y la interfaz con filtros de contenido externo para proporcionar protección contra el spam y los virus y otros programas maliciosos . Puede considerarse una interfaz entre un remitente ( MTA , Agente de transferencia de correo) y uno o más filtros de contenido .

Amavis se puede utilizar para:

  • detectar virus, spam, tipos de contenido prohibido o errores de sintaxis en los mensajes de correo
  • bloquear, etiquetar, redirigir (utilizando subdirección ) o reenviar correo según su contenido, origen o tamaño
  • poner en cuarentena (y liberar) o archivar mensajes de correo en archivos, buzones de correo o una base de datos relacional
  • desinfectar los mensajes transmitidos con un desinfectante externo
  • generar firmas DKIM
  • verificar las firmas DKIM y proporcionar listas blancas basadas en DKIM

Características notables:

Una instalación común de filtrado de correo con Amavis consiste en un Postfix como MTA, SpamAssassin como clasificador de spam y ClamAV como protección antivirus, todos ejecutados bajo un sistema operativo similar a Unix. Muchos otros escáneres de virus (unos 30) y algunos otros escáneres de spam ( CRM114 , DSPAM , Bogofilter ) son compatibles, también, al igual que algunos otros MTA.

Topología de interfaz

Se admiten tres topologías para la interfaz con un MTA . El proceso amavisd se puede intercalar entre dos instancias de un MTA, lo que produce una configuración clásica de filtrado de correo posterior a la cola, o amavisd se puede usar como un filtro proxy SMTP en una configuración de filtrado antes de la cola, o se puede consultar el proceso amavisd para proporcionar clasificación de correo, pero no para reenviar un mensaje de correo por sí mismo, en cuyo caso el cliente de consultoría permanece a cargo del reenvío de correo. Este último enfoque se utiliza en una configuración de Milter (con algunas limitaciones) o con un programa cliente histórico amavisd-submit .

Desde la versión 2.7.0, se prefiere una configuración de antes de la cola, ya que permite rechazar la transferencia de un mensaje de correo durante una sesión SMTP con un cliente de envío. En una configuración posterior a la cola, el filtrado se lleva a cabo después de que un MTA ya haya recibido y puesto en cola un mensaje de correo, en cuyo caso un filtro de correo ya no puede rechazar un mensaje, sino que solo puede entregarlo (posiblemente etiquetado) o descartarlo. o generar una notificación de no entrega, que puede causar una retrodispersión no deseada en caso de rebotar un mensaje con una dirección de remitente falsa.

Una desventaja de una configuración antes de la cola es que requiere recursos (CPU, memoria) proporcionales a una tasa de transferencia de correo actual (máxima), a diferencia de una configuración posterior a la cola, donde se acepta cierta demora y el uso de recursos corresponde a la tasa de transferencia de correo promedio . Con la introducción de una opción smtpd_proxy_options = speed_adjust en Postfix 2.7.0, los requisitos de recursos para un filtro de contenido antes de la cola se han reducido mucho.

En algunos países, la legislación no permite el filtrado de correo para descartar un mensaje de correo una vez que ha sido aceptado por un MTA, por lo que esto descarta una configuración de filtrado posterior a la cola con descarte o cuarentena de mensajes, pero deja la posibilidad de entregar (posiblemente etiquetado ) mensajes, o rechazarlos en una configuración de antes de la cola (proxy SMTP o milter).

Protocolos de interfaz

Amavis puede recibir mensajes de correo de un MTA a través de uno o más sockets de las familias de protocolos PF_INET ( IPv4 ), PF_INET6 ( IPv6 ) o PF_LOCAL ( socket de dominio Unix ), a través de los protocolos SMTP , LMTP o un simple protocolo privado AM.PDP con un programa auxiliar como amavisd-milter para interactuar con milters . En el lado de la salida, los protocolos SMTP o LMTP se pueden usar para pasar un mensaje a una instancia de MTA de back-end oa un LDA , o se puede pasar un mensaje a un proceso generado a través de una tubería Unix . Cuando se utilizan SMTP o LMTP, una sesión se puede cifrar opcionalmente utilizando una extensión TLS STARTTLS ( RFC 3207 ) del protocolo. La canalización de comandos SMTP ( RFC 2920 ) es compatible con el código de cliente y servidor.

Interfaz con SpamAssassin

Cuando el análisis de spam está habilitado, un proceso daemon amavisd es conceptualmente muy similar a un proceso de spam de un proyecto SpamAssassin . En ambos casos, los procesos secundarios bifurcados llaman directamente a los módulos SpamAssassin Perl , por lo que su rendimiento es similar.

La principal diferencia está en los protocolos utilizados: Amavis generalmente habla un protocolo SMTP estándar a un MTA, mientras que en el caso de spamc / spamd, un MTA generalmente genera un programa spamc que le pasa un mensaje a través de una tubería Unix, luego el proceso spamc transfiere el mensaje. a un demonio de spam usando un protocolo privado, y spam luego llama a los módulos de Perl de SpamAssassin.

Prioridades de diseño

Las prioridades de diseño de amavisd-new (en adelante llamado Amavis ) son: confiabilidad, seguridad, adherencia a los estándares, desempeño y funcionalidad.

Fiabilidad

Con la intención de que no se pierda ningún mensaje de correo debido a eventos inesperados como fallas de E / S, agotamiento de recursos y terminaciones inesperadas del programa, el programa amavisd verifica meticulosamente el estado de finalización de cada llamada del sistema y operación de E / S. Los eventos inesperados se registran si es posible y se manejan con varias capas de manejo de eventos. Amavis nunca asume la responsabilidad de la entrega de un mensaje de correo fuera de un MTA: el estado de éxito final se informa a un MTA solo después de que el mensaje se haya pasado a la instancia del MTA de back-end y se haya confirmado la recepción. En caso de fallas fatales durante el procesamiento o la transferencia de un mensaje, el mensaje que se está procesando simplemente permanece en una cola de la instancia del MTA de front-end, para volver a intentarlo más tarde. Este enfoque también cubre posibles fallas inesperadas del host, bloqueos del proceso amavisd o uno de sus componentes.

Se controla el uso de los recursos del programa, como el tamaño de la memoria, los descriptores de archivos, el uso del disco y la creación de subprocesos. Los mensajes de correo grandes no se guardan en la memoria, por lo que el tamaño de memoria disponible no impone un límite en el tamaño de los mensajes de correo que se pueden procesar y los recursos de memoria no se desperdician innecesariamente.

Seguridad

Se presta mucha atención a los aspectos de seguridad, necesarios para el manejo de datos potencialmente maliciosos, no estándar o simplemente confusos en mensajes de correo que provienen de fuentes no confiables.

El proceso que maneja los mensajes de correo se ejecuta con privilegios reducidos bajo un ID de usuario dedicado. Opcionalmente, puede ejecutar chroot -ed. Los riesgos de desbordamientos de búfer y errores de asignación de memoria se evitan en gran medida mediante la implementación de todo el manejo de protocolos y procesamiento de correo en Perl , que maneja la administración de memoria dinámica de manera transparente. Se tiene cuidado de que el contenido de los mensajes procesados ​​no se propague inadvertidamente al sistema. Perl proporciona una red de seguridad adicional con su marcado de datos contaminados que se originan en la naturaleza, y Amavis tiene cuidado de hacer un buen uso de esta función de Perl evitando la eliminación automática de datos ( use re "taint" ) y solo eliminándolos explícitamente en estratégicos puntos, tarde en un flujo de datos.

Amavis puede utilizar varios programas externos para mejorar su funcionalidad. Estos son de- archivadores , de- compresores , virus escáneres y de spam escáneres. Como estos programas a menudo se implementan en lenguajes como C o C ++ , existe el riesgo potencial de que un mensaje de correo enviado a uno de estos programas pueda causar su falla o incluso abrir un agujero de seguridad. El riesgo se limita al ejecutar estos programas como un ID de usuario sin privilegios, y posiblemente chroot-ed. No obstante, deben evitarse los programas externos como los desarchivadores no mantenidos. El uso de estos programas externos es configurable y se pueden deshabilitar de forma selectiva o en grupo (como todos los decodificadores o todos los escáneres de virus).

Rendimiento

A pesar de estar implementado en un lenguaje de programación interpretado Perl , Amavis en sí no es lento. El buen rendimiento de la funcionalidad implementada por el propio Amavis (sin hablar de componentes externos) se logra tratando datos en grandes porciones (por ejemplo, no línea por línea), evitando la copia de datos innecesaria, optimizando las rutas de código que se recorren con frecuencia, mediante utilizando estructuras de datos y algoritmos adecuados, así como mediante algunas optimizaciones de bajo nivel. Los cuellos de botella se detectan durante el desarrollo mediante la creación de perfiles del código y la evaluación comparativa. El informe de tiempo detallado en el registro puede ayudar a reconocer los cuellos de botella en una instalación en particular.

Ciertos módulos o programas externos como SpamAssassin o algunos escáneres de virus de línea de comandos pueden ser muy lentos, y su uso constituiría una gran mayoría del tiempo transcurrido y los recursos de procesamiento, lo que hace que los recursos utilizados por Amavis sean proporcionalmente bastante pequeños.

Los componentes como decodificadores de correo externos, escáneres de virus y escáneres de spam pueden desactivarse selectivamente si no son necesarios. Lo que queda es la funcionalidad implementada por el propio Amavis, como transferir mensajes de correo desde y hacia un MTA usando un protocolo SMTP o LMTP , verificar la validez de la sección del encabezado del correo, verificar los tipos de contenido de correo prohibido, verificar y generar firmas DKIM .

Como consecuencia, las tareas de procesamiento de correo como la firma y verificación DKIM (con otras verificaciones de correo deshabilitadas) pueden ser excepcionalmente rápidas y pueden competir con implementaciones en lenguajes compilados. Incluso las comprobaciones completas con un escáner de virus rápido pero con el rastreo de spam desactivado pueden ser sorprendentemente rápidos.

Adherencia a los estándares

La implementación de protocolos y estructuras de mensajes sigue de cerca un conjunto de estándares aplicables como RFC 5322 , RFC 5321 , RFC 2033 , RFC 3207 , RFC 2045 , RFC 2046 , RFC 2047 , RFC 3461 , RFC 3462 , RFC 3463 , RFC 3464 , RFC 4155 , RFC 5965 , RFC 6376 , RFC 5451 , RFC 6008 y RFC 4291 . En varios casos, algunas funciones se reimplementaron en el código de Amavis a pesar de que existe un módulo de Perl público ( CPAN ) , pero carece de atención al detalle al seguir un estándar o carece de verificación y manejo de errores suficientes.

Licencia

Amavis tiene una licencia GPLv2 . Esto se aplica al código actual, así como a las ramas históricas. Una excepción a esto son algunos de los programas de apoyo (como monitoreo y reporte de estadísticas), que están cubiertos por una Nueva Licencia BSD .

El proyecto

El proyecto comenzó en 1997 como un script de shell de Unix para detectar y bloquear mensajes de correo electrónico que contengan un virus . Su objetivo era bloquear virus en la etapa MTA (agente de transferencia de correo) o LDA (entrega local), que se ejecuta en una plataforma similar a Unix , complementando otros mecanismos de protección antivirus que se ejecutan en las computadoras personales de los usuarios finales.

A continuación, la herramienta se volvió a implementar como un programa Perl , que luego se convirtió en un proceso demonizado . Una docena de desarrolladores se turnaron durante los primeros cinco años del proyecto, desarrollando varias variantes manteniendo un objetivo común, el nombre del proyecto y parte de la infraestructura de desarrollo.

Desde diciembre de 2008 (hasta 2018-10-09) la única rama activa era oficialmente amavisd-new , que estaba siendo desarrollada y mantenida por Mark Martinec desde marzo de 2002. Esto fue acordado entre los desarrolladores en ese momento en una correspondencia privada: Christian Bricart , Lars Hecking, Hilko Bengen, Rainer Link y Mark Martinec. El nombre del proyecto Amavis es en gran parte intercambiable con el nombre de la rama amavisd-new .

Se han agregado muchas funciones a lo largo de los años, como agregar protección contra correo no deseado y otro contenido no deseado, además de la protección original contra virus. El enfoque se mantiene en la confiabilidad, la seguridad, el cumplimiento de los estándares y el desempeño.

Un dominio amavis.org en uso por el proyecto fue registrado en 1998 por Christian Bricart, uno de los primeros desarrolladores, que aún mantiene el registro del nombre de dominio. El dominio ahora está completamente dedicado a la única rama activa. La lista de correo del proyecto se trasladó de SourceForge a amavis.org en marzo de 2011 y está alojada por Ralf Hildebrandt y Patrick Ben Koetter. La página web del proyecto y el sitio principal de distribución se ubicaron en el Instituto Jožef Stefan , Ljubljana, Eslovenia (hasta la entrega en 2018), donde la mayor parte del desarrollo se llevó a cabo entre los años 2002 y 2018.

Anuncio de cambio de líderes de proyecto

El 9 de octubre de 2018, Mark Martinec anunció en la lista de correo de discusión y soporte general su retiro del proyecto y también que Patrick Ben Koetter continuará como nuevo líder del proyecto.

Conozco a Ben personalmente, es uno de los dos autores de The Book of Postfix y también usa a Amavis en su vida profesional, así que creo que el proyecto estará en buenas manos.

-  Mark Martinec

Después de eso, Patrick notificó la migración del código fuente a un repositorio público de GitLab y su plan para los próximos pasos con respecto al desarrollo del proyecto.

Ramas y nombre del proyecto

A lo largo de la historia del proyecto, el nombre del proyecto o sus ramas varió un poco. Inicialmente, la ortografía del nombre del proyecto era AMaViS (A Mail Virus Scanner), introducido por Christian Bricart. Con una reescritura a Perl, el nombre del programa era Amavis-perl . Las versiones daemonizadas se distribuyeron inicialmente con el nombre amavisd-snapshot y luego como amavisd . Una reescritura modular de Hilko Bengen se llamó Amavis-ng .

En marzo de 2002, Mark Martinec introdujo la rama amavisd-new , inicialmente como un parche contra amavisd-snapshot-20020300 . Esto luego se convirtió en un proyecto autónomo, que ahora es la única rama sobreviviente y mantenida activamente. Hoy en día, el nombre de un proyecto se escribe preferiblemente Amavis (mientras que el nombre del programa en sí es amavisd ). El nombre Amavis ahora es mayormente intercambiable con amavisd-new .

Historia del proyecto

programa de shell

  • 1997 (código original de Mogens Kjær - Laboratorio Carlsberg, modificado por Jürgen Quade) inicial, no publicado oficialmente
  • 1998-01-17 AMaViS 0.1 (Christian Bricart) AMaViS, primer lanzamiento oficial
  • 1998-01-28 AMaViS 0.1.1
  • 1998-12-08 AMaViS 0.2.0-pre1
  • 1999-02-25 AMaViS 0.2.0-pre2
  • 1999-03-29 AMaViS 0.2.0-pre3
  • 1999-03-31 AMaViS 0.2.0-pre4
  • 1999-07-19 AMaViS 0.2.0-pre5
  • 1999-07-20 AMaViS 0.2.0-pre6
  • 2000-10-31 AMaViS 0.2.1 (Christian Bricart, Rainer Link, Chris Mason)

Programa Perl

  • 2000-01 Amavis-perl (Chris Mason)
  • 2000-08 Amavis-perl-8
  • 2000-12 Amavis-perl-10
  • 2001-04 Amavis-perl-11 (dividido en amavisd)
  • 2003-03-07 Amavis-0.3.12 (Lars Hecking)

Demonio de Perl: amavisd

  • Demonización 2001-01 (Geoff Winkless)
  • 2001-04 amavisd-snapshot-20010407 (Lars Hecking)
  • 2001-07 amavisd-instantánea-20010714
  • 2002-03 amavisd-snapshot-20020300 (dividido en amavisd-nuevo)
  • 2003-03-03 amavisd-0.1

Perl, rediseño modular

(Hilko Bengen)

  • 2002-03 amavis-ng-0.1
  • 2003-03 amavis-ng-0.1.6.2

amavisd-nuevo

(Mark Martinec)

  • 2002-03-30 amavisd-nuevo, pre-bifurcado, Net :: Server
  • 2002-05-17
  • 2002-06-30 paquetes, búsquedas SQL
  • 2002-11-16 integrado - un archivo
  • 2002-12-27
  • 2003-03-14 LDAP operaciones de búsqueda
  • 2003-06-16
  • 2003-08-25 p5
  • 2003-11-10 p6 @ * _ mapas
  • 2004-01-05 p7
  • 2004-03-09 p8
  • 2004-04-02 p9
  • 2004-06-29 p10
  • 2004-07-01 2.0 bancos de políticas, formatos de dirección IPv6
  • 2004-08-15 2.1.0 utilidad de monitoreo amavisd-nanny
  • 2004-09-06 2.1.2
  • 2004-11-02 2.2.0
  • 2004-12-22 2.2.1
  • 2005-04-24 2.3.0 @decoders, reglas de prohibición por destinatario
  • 2005-05-09 2.3.1
  • 2005-06-29 2.3.2
  • 2005-08-22 2.3.3
  • 2006-04-02 2.4.0 DSN en SMTP,% * _ by_ccat
  • 2006-05-08 2.4.1
  • 2006-06-27 2.4.2 amigos por correspondencia, registro SQL y cuarentena
  • 2006-09-30 2.4.3
  • 2006-11-20 2.4.4
  • 2007-01-30 2.4.5
  • 2007-04-23 2.5.0 bloqueo de categorías de contenido, cliente SMTP reescrito
  • 2007-05-31 2.5.1 amavisd-requeue
  • 2007-06-27 2.5.2
  • 2007-12-12 2.5.3
  • 2008-03-12 2.5.4
  • 2008-04-23 2.6.0 DKIM , asesino de rebotes , TLS
  • 2008-06-29 2.6.1
  • 2008-12-12 Amavis es amavisd-nuevo
  • 2008-12-15 2.6.2
  • 2009-04-22 2.6.3 apoyo a CRM114 y DSPAM , truncamiento
  • 2009-06-25 2.6.4 monitoreo sobre SNMP
  • 2010-04-25 2.7.0-pre4
  • 2011-02-03 2.7.0-pre14
  • 2011-03-07 lista de correo movida de SourceForge a amavis.org
  • 2011-04-07 2.6.5
  • 2011-05-19 2.6.6
  • 2011-06-01 2.7.0 mejoras previas a la cola, aceleración
  • 2012-04-29 2.7.1
  • 2012-06-30 2.7.2
  • 2012-06-30 2.8.0 utiliza ØMQ en lugar de BDB , optimizaciones de rendimiento
  • 27 de abril de 2013 2.8.1-rc1
  • 2013-06-28 2.8.1 puede usar Redis para el almacenamiento de amigos por correspondencia
  • 2013-09-04 2.8.2-rc1 (2.8.2 no lanzado)
  • 2014-05-09 2.9.0 registro estructurado en formato JSON , reputación automática de direcciones IP
  • 2014-06-27 2.9.1
  • 2014-10-22 2.10.0 Correo electrónico internacionalizado ( RFC 6530 , SMTPUTF8 , EAI , IDN )
  • 2014-10-22 2.10.1
  • 2016-04-26 2.11.0
  • 2018-10-09 2.11.1 actualizaciones menores, justo antes de la migración a un repositorio de GitLab

Ver también

Referencias

enlaces externos