Exim es un agente de transferencia de correo (MTA) utilizado en sistemas operativos tipo Unix . Exim es un software libre distribuido bajo los términos de la Licencia Pública General de GNU y su objetivo es ser un gestor de correo general y flexible con amplias funciones para comprobar el correo electrónico entrante .
Exim ha sido adaptado a la mayoría de los sistemas tipo Unix, así como a Microsoft Windows mediante la capa de emulación Cygwin . Exim 4 es actualmente el MTA predeterminado en los sistemas Debian Linux . [3]
Existen muchas instalaciones de Exim, especialmente en proveedores de servicios de Internet [4] y universidades del Reino Unido. Exim también se usa ampliamente con el administrador de listas de correo GNU Mailman y cPanel .
En marzo de 2023, un estudio realizado por E-Soft, Inc., [5] estimó que el 59% de los servidores de correo accesibles públicamente en Internet ejecutaban Exim.
La primera versión de Exim fue escrita en 1995 por Philip Hazel para su uso en los sistemas de correo electrónico del Servicio de Computación de la Universidad de Cambridge . El nombre inicialmente significaba EXPERIMENTAL INTERNET MAILER . [ 6] Originalmente se basaba en un MTA más antiguo, Smail -3, pero desde entonces se ha desviado de Smail-3 en su diseño y filosofía. [7] [8]
Exim, al igual que Smail , sigue el modelo de diseño de Sendmail , donde un único binario controla todas las funciones del MTA. Exim tiene etapas bien definidas durante las cuales gana o pierde privilegios . [9]
A lo largo de los años se han diagnosticado varios problemas graves de seguridad en Exim. [10] Desde que se lanzó la versión 4 rediseñada, hubo cuatro fallas de ejecución de código remoto y una falla conceptual relacionada con cuánta confianza es apropiado depositar en el usuario en tiempo de ejecución ; esta última se solucionó en un bloqueo de seguridad en la revisión 4.73, una de las raras ocasiones en las que Exim rompió la compatibilidad con versiones anteriores de configuraciones de trabajo.
Exim es altamente configurable y por lo tanto tiene características que faltan en otros MTA. Siempre ha tenido importantes funciones para el control de políticas de correo, brindando al administrador la posibilidad de controlar quién puede enviar o retransmitir correo a través del sistema. En la versión 4.x, esto ha evolucionado hasta convertirse en un sistema basado en listas de control de acceso que permite controles muy detallados y flexibles. La integración de un marco para el escaneo de contenido, que permitió una integración más sencilla de medidas antivirus y antispam , se produjo en las versiones 4.x. Esto hizo que Exim fuera muy adecuado para aplicar diversas políticas de correo.
La configuración se realiza a través de un archivo de configuración (normalmente único), que debe incluir la sección principal con configuraciones y variables genéricas, así como las siguientes secciones opcionales:
El archivo de configuración permite la inclusión de otros archivos, lo que genera dos estilos de configuración diferentes.
Existen dos escuelas principales de estilo de configuración para Exim. La escuela nativa mantiene la configuración de Exim en un archivo y los archivos externos solo se utilizan como fuentes de datos; esto está fuertemente influenciado por las preferencias de Philip Hazel y las notas sobre el rendimiento, ya que el archivo de configuración se vuelve a leer en cada ejecución, lo que sucede después de la bifurcación para recibir conexiones entrantes y en la entrega.
El segundo estilo que se encuentra con frecuencia es el estilo Debian , que está diseñado para facilitar que una aplicación instalada proporcione automáticamente soporte de integración de correo sin que el administrador tenga que editar los archivos de configuración. Hay un par de variantes de este y Debian proporciona documentación de su enfoque como parte de los paquetes. En estos enfoques, se utiliza un archivo de configuración debconf para crear el archivo de configuración de Exim, junto con plantillas y directorios con fragmentos de configuración. La metaconfiguración se ajusta con macros que tienen nombres que comienzan con DC_ . Cuando se invoca el supervisor de exim, este vuelve a procesar los archivos de configuración y produce una configuración de un solo archivo que utiliza el binario de exim.
Debido a que el enfoque de Debian difiere significativamente del de Exim, es común encontrar una falta de soporte para el enfoque de Debian en las listas de correo regulares de Exim, y se recomienda a la gente [11] [12] que haga preguntas sobre Debian en la lista de correo administrada por Debian. El paquete Ubuntu [13] aún recomienda a los usuarios que utilicen la lista de correo de Debian.
Exim cuenta con una documentación extensa y exhaustiva; si una característica o algún comportamiento no está documentado, se clasifica como un error. La documentación consta de la Especificación Exim y dos archivos auxiliares: la especificación experimental para las características que podrían desaparecer y "NewStuff", que rastrea los cambios muy recientes que podrían no haberse integrado completamente en la especificación principal. La Especificación Exim está disponible en varios formatos, incluso en línea en HTML y en texto simple para una búsqueda rápida. El sistema de preparación de documentos garantiza que el formato de texto simple sea muy utilizable.
Exim se ha implementado en entornos con mucho tráfico, donde a menudo se gestionan miles de correos electrónicos por hora de manera eficiente. Exim está diseñado para entregar correos electrónicos de manera inmediata, sin colas. Sin embargo, su rendimiento de procesamiento de colas es comparativamente deficiente cuando las colas son grandes (lo que sucede raramente en sitios típicos con poco tráfico, pero puede suceder con regularidad en sitios con mucho tráfico).
A diferencia de qmail , Postfix y ZMailer , Exim no tiene un gestor de colas central (es decir, un equivalente de qmail-send , qmgr o scheduler ). Por lo tanto, no hay un equilibrio de carga centralizado del procesamiento de colas (lo que lleva a que se gasten cantidades desproporcionadas de tiempo en procesar las mismas entradas de cola repetidamente). La concurrencia de transporte remoto en todo el sistema es ilimitada de forma predeterminada (lo que lleva a un " problema de manada atronadora " cuando se envían varios mensajes dirigidos a un solo dominio a la vez), pero puede estar limitada por la configuración. En las propias palabras de Philip Hazel: [14]
En 1997, Hazel reemplazó la biblioteca de expresiones regulares POSIX de Exim escrita por Henry Spencer con una nueva biblioteca que él desarrolló llamada PCRE ( Perl Compatible Regular Expressions). Las expresiones regulares de Perl son mucho más poderosas que POSIX y otras expresiones regulares comunes, y PCRE se ha vuelto popular en aplicaciones distintas a Exim. En 2021 (después del lanzamiento de la versión 4.95), Exim realizó la transición a PCRE2.
Históricamente, Exim utilizaba un peculiar sistema de numeración de versiones en el que el primer dígito decimal se actualizaba únicamente cuando la documentación principal estaba completamente actualizada; hasta ese momento, los cambios se acumulaban en el archivo NewStuff. Por este motivo, un cambio de versión 0.01 puede significar cambios importantes, no necesariamente completamente documentados. [15] En 2005, los cambios en la numeración de versiones de Exim estaban sobre la mesa de discusión. [16]
En tiempos más recientes, el sistema de preparación de documentos para Exim ha sido revisado y es mucho más probable que los cambios se apliquen inmediatamente a la Especificación Exim. La versión 4.70 siguió naturalmente a la 4.69 y las versiones 4.6x tenían documentación actualizada.
Philip Hazel se jubiló de la Universidad de Cambridge en 2007 y el mantenimiento de Exim pasó a manos de un equipo de mantenedores. Exim continúa recibiendo un mantenimiento activo, con lanzamientos frecuentes.