Amavis es un filtro de contenido de código abierto para correo electrónico que implementa la transferencia, decodificación, procesamiento y verificación de mensajes de correo, además de interactuar con filtros de contenido externos para brindar protección contra spam , virus y otro malware . Puede considerarse una interfaz entre un servidor de correo ( MTA , Agente de Transferencia de Correo) y uno o más filtros de contenido . [ 2 ]
Amavis se puede utilizar para:
- detectar virus, spam, tipos de contenido prohibidos o errores de sintaxis en los mensajes de correo electrónico
- bloquear, etiquetar, redirigir (usando subdirecciones ) o reenviar correo dependiendo de su contenido, origen o tamaño.
- poner en cuarentena (y liberar), o archivar mensajes de correo en archivos, buzones de correo o en una base de datos relacional.
- Desinfectar los mensajes transmitidos mediante un desinfectante externo.
- generar firmas DKIM
- verificar firmas DKIM y proporcionar listas blancas basadas en DKIM
Características destacadas:
- Proporciona estadísticas SNMP y monitorización del estado mediante una MIB extensa con más de 300 variables.
- Proporciona un registro de eventos estructurado en formato JSON.
- El protocolo IPv6 es compatible con la interfaz y las direcciones IPv6 se forman en la sección de encabezado del correo.
- Respeta correctamente la configuración por destinatario incluso en mensajes con múltiples destinatarios, escaneando cada mensaje solo una vez.
- Admite correo electrónico internacional (RFC 6530, SMTPUTF8 , EAI , IDN ).
Una instalación común de filtrado de correo con Amavis consiste en Postfix como MTA, SpamAssassin como clasificador de spam y ClamAV como antivirus, todo ello ejecutándose en un sistema operativo tipo Unix . También admite muchos otros antivirus (unos 30) y algunos otros escáneres de spam ( CRM114 , DSPAM , Bogofilter ), así como otros MTA.
Topología de interfaz
Se admiten tres topologías para la interfaz con un MTA . El proceso amavisd puede estar intercalado entre dos instancias de un MTA, lo que produce una configuración clásica de filtrado de correo posterior a la cola [ 3 ] , o amavisd puede usarse como un filtro proxy SMTP en una configuración de filtrado anterior a la cola [ 4 ] , o el proceso amavisd puede ser consultado para proporcionar clasificación de correo pero no para reenviar un mensaje de correo por sí mismo, en cuyo caso el cliente consultor sigue a cargo del reenvío de correo. Este último enfoque se utiliza en una configuración 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 previa a la cola, ya que permite que se rechace la transferencia de un mensaje de correo durante una sesión SMTP [ 4 ] con un cliente remitente. En una configuración posterior a la cola, el filtrado se realiza después de que un mensaje de correo ya ha sido recibido y puesto en cola por un MTA, en cuyo caso un filtro de correo ya no puede rechazar un mensaje, sino que solo puede entregarlo (posiblemente etiquetado), descartarlo o generar una notificación de no entrega, lo que puede causar retrodispersión no deseada en caso de que se rechace un mensaje con una dirección de remitente falsa.
Una desventaja de una configuración previa a la cola [ 4 ] es que requiere recursos (CPU, memoria) proporcionales a la tasa de transferencia de correo actual (máxima), a diferencia de una configuración posterior a la cola, donde se acepta cierto retraso y el uso de recursos corresponde a la tasa de transferencia de correo promedio. Con la introducción de la opción smtpd_proxy_options=speed_adjust en Postfix 2.7.0, los requisitos de recursos para un filtro de contenido previo a la cola se han reducido considerablemente. [ 5 ]
En algunos países [ 6 ] la legislación no permite que el filtrado de correo descarte 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 mensajes (posiblemente etiquetados) o rechazarlos en una configuración anterior a 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 protocolo privado simple AM.PDP se puede usar con un programa auxiliar como amavisd-milter [ 7 ] para interactuar con milters . En el lado de salida, los protocolos SMTP o LMTP se pueden usar para pasar un mensaje a una instancia de MTA de back-end o a un LDA , o un mensaje se puede pasar un mensaje a un proceso generado a través de una tubería Unix . Cuando se usan SMTP o LMTP, una sesión se puede cifrar opcionalmente usando una extensión TLS STARTTLS (RFC 3207) al protocolo. El canalizado de comandos SMTP (RFC 2920) es compatible en el código del cliente y del servidor.
Interacción con SpamAssassin
Cuando el escaneo de spam está habilitado, el proceso demonio amavisd es conceptualmente muy similar al proceso spamd de un proyecto SpamAssassin . En ambos casos, los procesos hijos bifurcados llaman directamente a los módulos Perl de SpamAssassin , por lo que su rendimiento es similar.
La principal diferencia radica en los protocolos utilizados: Amavis normalmente utiliza un protocolo SMTP estándar para comunicarse con un MTA, mientras que en el caso de spamc/spamd, un MTA normalmente inicia 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 spamd utilizando un protocolo privado, y luego spamd llama a los módulos Perl de SpamAssassin.
Prioridades de diseño
Las prioridades de diseño de amavisd-new (en adelante, simplemente Amavis ) son: fiabilidad, seguridad, cumplimiento de estándares, rendimiento y funcionalidad.
Fiabilidad
Con el objetivo de evitar la pérdida de mensajes de correo electrónico debido a eventos inesperados como fallos de E/S, agotamiento de recursos o cierres inesperados del programa, el programa amavisd verifica meticulosamente el estado de finalización de cada llamada al sistema y operación de E/S. Los eventos inesperados se registran siempre que sea posible y se gestionan mediante varias capas de control de eventos. Amavis nunca delega la responsabilidad de la entrega de un mensaje de correo electrónico a un MTA: el estado final de éxito se notifica al MTA solo después de que el mensaje se haya transferido a la instancia del MTA de back-end y se haya confirmado su recepción. En caso de fallos graves durante el procesamiento o la transferencia de un mensaje, este permanece en la cola de la instancia del MTA de front-end para ser reintentado posteriormente. Este enfoque también contempla posibles fallos inesperados del host, bloqueos del proceso amavisd o de alguno de sus componentes.
Se controla el uso de recursos del programa, como el tamaño de la memoria, los descriptores de archivo, el uso del disco y la creación de subprocesos. Los mensajes de correo electrónico grandes no se almacenan en la memoria, por lo que el tamaño de la memoria disponible no limita el tamaño de los mensajes que se pueden procesar, y no se desperdician recursos de memoria 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 ilegibles en mensajes de correo electrónico provenientes de fuentes no confiables.
El proceso que gestiona los mensajes de correo se ejecuta con privilegios reducidos bajo un ID de usuario dedicado. Opcionalmente, puede ejecutarse en un entorno chroot . Los riesgos de desbordamientos de búfer y errores de asignación de memoria se evitan en gran medida implementando todo el manejo de protocolos y el procesamiento de correo en Perl , que maneja la administración de memoria dinámica de forma 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 provenientes de fuentes externas, y Amavis se asegura de aprovechar esta característica de Perl evitando la eliminación automática de datos contaminados ( use re "taint" ) y eliminándolos explícitamente solo en puntos estratégicos, al final de un flujo de datos.
Amavis puede utilizar varios programas externos para mejorar su funcionalidad. Estos incluyen descompresores , descompresores , antivirus y antivirus . Dado que estos programas suelen estar implementados en lenguajes como C o C++ , existe el riesgo de que un mensaje de correo electrónico procesado por alguno de ellos provoque su fallo o incluso abra una vulnerabilidad de seguridad. Este riesgo se reduce ejecutando estos programas con un ID de usuario sin privilegios y, posiblemente, en un entorno chroot. No obstante, se recomienda evitar programas externos como descompresores sin mantenimiento. 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 antivirus).
Actuación
A pesar de estar implementado en Perl , un lenguaje de programación interpretado , Amavis no es lento. El buen rendimiento de la funcionalidad implementada por Amavis (sin considerar componentes externos) se logra mediante el procesamiento de datos en grandes bloques (no línea por línea), evitando copias innecesarias de datos, optimizando las rutas de código más transitadas, utilizando estructuras de datos y algoritmos adecuados, así como optimizaciones de bajo nivel. Los cuellos de botella se detectan durante el desarrollo mediante el análisis del código y pruebas de rendimiento. Un informe detallado de tiempos en el registro puede ayudar a identificar cuellos de botella en una instalación específica.
Ciertos módulos o programas externos, como SpamAssassin o algunos antivirus de línea de comandos, pueden ser muy lentos, y su uso constituiría la gran mayoría del tiempo transcurrido y de los recursos de procesamiento, lo que haría que los recursos utilizados por Amavis fueran proporcionalmente muy pequeños.
Los componentes como los decodificadores de correo externos, los antivirus y los detectores de spam pueden desactivarse selectivamente si no son necesarios. Lo que permanece es la funcionalidad implementada por Amavis, como la transferencia de mensajes de correo desde y hacia un MTA mediante el protocolo SMTP o LMTP , la comprobación de la validez de la sección de encabezado del correo, la detección de tipos de contenido de correo prohibidos y la verificación y generación de firmas DKIM .
Como consecuencia, las tareas de procesamiento de correo como la firma y verificación DKIM (con otras comprobaciones de correo desactivadas) pueden ser excepcionalmente rápidas y rivalizar con las implementaciones en lenguajes compilados. [ 8 ] [ 9 ] [ 10 ] Incluso las comprobaciones completas utilizando un escáner de virus rápido pero con el escaneo de spam desactivado pueden ser sorprendentemente rápidas.
Adherencia a las normas
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, se reimplementó alguna funcionalidad en el código de Amavis a pesar de que existe un módulo Perl público ( CPAN ) , pero carece de atención al detalle en el cumplimiento de un estándar o carece de una verificación y manejo de errores suficientes.
Licencia
Amavis está licenciado bajo la licencia GPLv2 . Esto se aplica tanto al código actual como a las ramas históricas. Una excepción son algunos de los programas de soporte (como los de monitorización e informes estadísticos), que están cubiertos por la licencia New BSD .
Historia
El proyecto comenzó en 1997 como un script de shell de Unix para detectar y bloquear mensajes de correo electrónico que contenían un virus . Su objetivo era bloquear los virus en la etapa MTA (agente de transferencia de correo) o LDA (entrega local), ejecutándose en una plataforma similar a Unix , complementando otros mecanismos de protección antivirus instalados en las computadoras personales de los usuarios finales.
A continuación, la herramienta se reimplementó como un programa Perl , que posteriormente evolucionó hasta convertirse en un proceso demonio . Durante los primeros cinco años del proyecto, una docena de desarrolladores se turnaron para crear varias variantes, manteniendo un objetivo común, el nombre del proyecto y parte de la infraestructura de desarrollo.
Desde diciembre de 2008 (hasta el 9 de octubre de 2018), la única rama activa era oficialmente amavisd-new , desarrollada y mantenida por Mark Martinec desde marzo de 2002. Esto se acordó entre los desarrolladores de la época mediante correspondencia privada: Christian Bricart, Lars Hecking, Hilko Bengen, Rainer Link y Mark Martinec. El nombre del proyecto Amavis es prácticamente intercambiable con el nombre de la rama amavisd-new .
Con el paso de los años, se han añadido numerosas funcionalidades, como la protección contra el spam y otros contenidos no deseados, además de la protección antivirus original. El enfoque principal sigue siendo la fiabilidad, la seguridad, el cumplimiento de los estándares y el rendimiento.
El dominio amavis.org, utilizado por el proyecto, fue registrado en 1998 por Christian Bricart, uno de los primeros desarrolladores, quien aún mantiene el registro del nombre de dominio. Actualmente, el dominio está dedicado exclusivamente a la única rama activa. La lista de correo del proyecto se trasladó de SourceForge a amavis.org en marzo de 2011 y está gestionada por Ralf Hildebrandt y Patrick Ben Koetter. La página web del proyecto y el sitio principal de distribución se ubicaban en el Instituto Jožef Stefan , en Liubliana, Eslovenia (hasta el traspaso en 2018), donde se llevó a cabo la mayor parte del desarrollo entre 2002 y 2018.
Anuncio de cambio de líderes de proyecto
El 9 de octubre de 2018, Mark Martinec anunció [ 11 ] en la lista de correo de soporte y discusión 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 utiliza Amavis en su vida profesional, así que creo que el proyecto estará en buenas manos. [ 11 ]
— Mark Martinec
Después de eso, Patrick notificó [ 12 ] 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 el nombre del proyecto
A lo largo de la historia del proyecto, el nombre del proyecto o de sus ramas varió ligeramente. Inicialmente, el nombre del proyecto era AMaViS (A Mail Virus Scanner), introducido por Christian Bricart. Tras una reescritura a Perl , el programa pasó a llamarse Amavis-perl . Las versiones demonio se distribuyeron inicialmente con el nombre amavisd-snapshot y posteriormente como amavisd . Una reescritura modular realizada por Hilko Bengen se denominó Amavis-ng .
En marzo de 2002, Mark Martinec introdujo la rama amavisd-new , inicialmente como un parche para amavisd-snapshot-20020300 . Posteriormente, esta rama evolucionó hasta convertirse en un proyecto independiente, que actualmente es la única rama que se mantiene activa. Hoy en día, se prefiere escribir Amavis como nombre del proyecto (mientras que el nombre del programa es amavisd ). El nombre Amavis es ahora prácticamente intercambiable con amavisd-new .
Véase también
- SpamAssassin , un popular clasificador de spam de código abierto
Referencias
- ↑ https://gitlab.com/amavis/amavis/-/tags/v2.13.1 . Consultado el 25 de agosto de 2024 .
{{cite web}}: Falta o está vacío|title=( ayuda ) - ↑ LeBlanc, Robert (11 de noviembre de 2004). "Combatiendo el spam y los virus con amavisd-new y Maia Mailguard | Linux Journal" . Linux Journal . Consultado el 10 de abril de 2022 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Venema, Wietse (17 de enero de 2010). "Filtro de contenido posterior a la cola de Postfix" . Archivado del original el 29 de julio de 2012.
- 1 2 3 Venema, Wietse (11 de diciembre de 2009). "Filtro de contenido antes de la cola de Postfix" . Archivado del original el 16 de junio de 2012.
- ↑ Venema, Wietse (14 de febrero de 2010). "Postfix versión estable 2.7.0" . Archivado del original el 19 de julio de 2012.
- ↑ "StGB (Alemania), § 206 Verletzung des Postoder Fernmeldegeheimnisses" . Bundesgesetzblattes. Archivado desde el original el 19 de octubre de 2012.
- ↑ Rehor, Petr (2010-05-02). "amavisd-milter" . Archivado del original el 30-06-2012.
- ↑ Martinec, Mark (10-06-2011). "amavisd 2.7.0 y Mail::OpenDKIM" .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Martinec, Mark (10-06-2011). "amavisd 2.7.0 y Mail::OpenDKIM" .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Martinec, Mark (10-06-2011). "amavisd 2.7.0 y Mail::OpenDKIM" .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - 1 2 Martinec, Mark (2018-10-09). "ANUNCIO: El proyecto Amavis ha sido entregado a nuevos líderes de proyecto" . Archivos de la lista de usuarios de Amavis . Proyecto amavisd-new.
- ↑ Koetter, Patrick Ben (09-10-2018). "amavis: Próximos pasos" . Archivos de la lista de usuarios de amavis . Proyecto amavisd-new.
Enlaces externos
- Spam
- Software de correo electrónico gratuito
- Software libre programado en Perl
- Software que utiliza la Licencia Pública General de GNU.
- Antispam