Diferencia entre revisiones de «Exim4»
m (→Exim4) |
|||
Línea 1: | Línea 1: | ||
== Exim4 == |
== Exim4 == |
||
=== Conceptos === |
|||
⚫ | |||
⚫ | |||
Los mensajes de ''rebote'' son, estrictamente hablando, ''notificaciones de estado de despacho'' (DSN, Delivery Status Notifications), creadas cuando una entrega falla. |
Los mensajes de ''rebote'' son, estrictamente hablando, ''notificaciones de estado de despacho'' (DSN, Delivery Status Notifications), creadas cuando una entrega falla. |
||
En ''Exim'' estos mensajes normalmente se envían de vuelta al emisor. |
En ''Exim'' estos mensajes normalmente se envían de vuelta al emisor. |
||
==== Retry ==== |
|||
El comportamiento predeterminado de ''Exim'' es intentar entregar los mensajes inmediatamente a su recepción, a menos que se le indique otra cosa. |
El comportamiento predeterminado de ''Exim'' es intentar entregar los mensajes inmediatamente a su recepción, a menos que se le indique otra cosa. |
||
Línea 15: | Línea 17: | ||
''Exim'' dispone de un juego de reglas que controlan la frecuencia de reintentos de envío, aunque no son simples de calcular, puesto que dependen a su vez de la frecuencia de proceso de las colas de mensajes. La opción predeterminada consiste en una única regla en el archivo <code>/etc/exim4/conf.d/retry/30_exim4-config</code>. |
''Exim'' dispone de un juego de reglas que controlan la frecuencia de reintentos de envío, aunque no son simples de calcular, puesto que dependen a su vez de la frecuencia de proceso de las colas de mensajes. La opción predeterminada consiste en una única regla en el archivo <code>/etc/exim4/conf.d/retry/30_exim4-config</code>. |
||
==== Frozen messages ==== |
|||
Un mensaje ''congelado'' es aquél que tiene una condición de error lo bastante seria como para justificar su permanencia en la cola de mensajes, sin más reintentos de despacho. |
Un mensaje ''congelado'' es aquél que tiene una condición de error lo bastante seria como para justificar su permanencia en la cola de mensajes, sin más reintentos de despacho. |
||
La ''descongelación'' de mensajes puede efectuarse manualmente o automáticamente tras un tiempo concreto en dicho estado. En el primer caso se emplean las opciones <code>-M</code> ó <code>-qff</code> con el programa <code>exim</code> y en el segundo está controlado por la opción <code>auto_thaw</code> de la configuración. Tras la descongelación del mensaje se intenta un nuevo despacho y, si se producen condiciones similares, el mensaje puede volver a la categoría inicial. |
La ''descongelación'' de mensajes puede efectuarse manualmente o automáticamente tras un tiempo concreto en dicho estado. En el primer caso se emplean las opciones <code>-M</code> ó <code>-qff</code> con el programa <code>exim</code> y en el segundo está controlado por la opción <code>auto_thaw</code> de la configuración. Tras la descongelación del mensaje se intenta un nuevo despacho y, si se producen condiciones similares, el mensaje puede volver a la categoría inicial. |
||
==== Queues ==== |
|||
Una cola de mensajes ó cola a secas es una colección de mensajes de correo bajo el control de ''Exim''. Para el programa dicha ''cola'' es más bien un fondo común, un depósito, sin orden ni preferencia ni separación por dominios ú otros factores. |
Una cola de mensajes ó cola a secas es una colección de mensajes de correo bajo el control de ''Exim''. Para el programa dicha ''cola'' es más bien un fondo común, un depósito, sin orden ni preferencia ni separación por dominios ú otros factores. |
||
Cada elemento en la cola representa un mensaje de correo con uno ó varios destinatarios, y que permanecen guardados allí hasta que un proceso especial los extrae de ella para despacharlos a su destino. Y esto, siempre que dicha entrega no se haya podido realizar tras la recepción por las causas arriba comentadas. |
Cada elemento en la cola representa un mensaje de correo con uno ó varios destinatarios, y que permanecen guardados allí hasta que un proceso especial los extrae de ella para despacharlos a su destino. Y esto, siempre que dicha entrega no se haya podido realizar tras la recepción por las causas arriba comentadas. |
||
=== Despacho de mensajes === |
|||
El proceso de despacho de mensajes que lleva a cabo ''Exim'' consiste en encontrar información acerca de los destinatarios de un mensaje y en cómo llevarlos hasta allí. |
El proceso de despacho de mensajes que lleva a cabo ''Exim'' consiste en encontrar información acerca de los destinatarios de un mensaje y en cómo llevarlos hasta allí. |
||
Línea 38: | Línea 43: | ||
El procedimiento habitual consiste en determinar primero cuales son las direcciones finales destinatarias del mensaje, invocando a todos los enrutadores necesarios, para después llamar a los transportes que entregan los archivos de forma local ó remota; en este último caso es posible que necesite emplear algún tipo de autentificación. |
El procedimiento habitual consiste en determinar primero cuales son las direcciones finales destinatarias del mensaje, invocando a todos los enrutadores necesarios, para después llamar a los transportes que entregan los archivos de forma local ó remota; en este último caso es posible que necesite emplear algún tipo de autentificación. |
||
==== Routers ==== |
|||
Un enrutador se emplea para decidir ''qué hacer'' con un mensaje una vez que es aceptado previamente por el mecanismo de control de acceso (''Access control list''). Es decir, mediante los enrutadores se determinan las direcciones destinatarias de los mensajes. |
Un enrutador se emplea para decidir ''qué hacer'' con un mensaje una vez que es aceptado previamente por el mecanismo de control de acceso (''Access control list''). Es decir, mediante los enrutadores se determinan las direcciones destinatarias de los mensajes. |
||
Línea 45: | Línea 51: | ||
Aquí hay ejemplo de enrutador para buscar alias locales en un directorio LDAP. |
Aquí hay ejemplo de enrutador para buscar alias locales en un directorio LDAP. |
||
==== Transports ==== |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
Existe una utilidad llamada exiqgrep que sirve para realizar búsquedas en los mensajes encolados y no despachados aún. Es un programa Perl escrito por ''Matt Hubbard'' y que llama a <code>exim -bpu</code> para obtener un flujo de datos sobre los que buscar. |
Existe una utilidad llamada exiqgrep que sirve para realizar búsquedas en los mensajes encolados y no despachados aún. Es un programa Perl escrito por ''Matt Hubbard'' y que llama a <code>exim -bpu</code> para obtener un flujo de datos sobre los que buscar. |
||
{| class="wikitable" |
{| class="wikitable" |
||
Línea 78: | Línea 84: | ||
|} |
|} |
||
=== Manipulando la cola de mensajes === |
|||
{| class="wikitable" |
{| class="wikitable" |
||
|+ |
|+ |
||
Línea 97: | Línea 104: | ||
|} |
|} |
||
=== Depurando la configuración de exim4 === |
|||
Para ver qué hace exim nada mejor que usar el parámetro de depuración <code>-d</code> con las opciones que necesitemos. Si queremos incluirlas todas usaremos <code>-d+all</code> y si necesitamos restringir algunas prefijamos su nombre con un signo menos (como en <code>-d+all-acl</code>). |
Para ver qué hace exim nada mejor que usar el parámetro de depuración <code>-d</code> con las opciones que necesitemos. Si queremos incluirlas todas usaremos <code>-d+all</code> y si necesitamos restringir algunas prefijamos su nombre con un signo menos (como en <code>-d+all-acl</code>). |
||
Revisión del 14:07 21 dic 2023
Exim4
Conceptos
Bounce messages
Los mensajes de rebote son, estrictamente hablando, notificaciones de estado de despacho (DSN, Delivery Status Notifications), creadas cuando una entrega falla.
En Exim estos mensajes normalmente se envían de vuelta al emisor.
Retry
El comportamiento predeterminado de Exim es intentar entregar los mensajes inmediatamente a su recepción, a menos que se le indique otra cosa.
Aunque esto funciona bien en condiciones normales, existen ocasiones en las que los servidores remotos fallan debido a condiciones de carga extrema ó a operaciones de mantenimiento, y los mensajes tienen que ser almacenados durante un tiempo hasta que se produzca un reintento (retry) de despacho.
Exim dispone de un juego de reglas que controlan la frecuencia de reintentos de envío, aunque no son simples de calcular, puesto que dependen a su vez de la frecuencia de proceso de las colas de mensajes. La opción predeterminada consiste en una única regla en el archivo /etc/exim4/conf.d/retry/30_exim4-config
.
Frozen messages
Un mensaje congelado es aquél que tiene una condición de error lo bastante seria como para justificar su permanencia en la cola de mensajes, sin más reintentos de despacho.
La descongelación de mensajes puede efectuarse manualmente o automáticamente tras un tiempo concreto en dicho estado. En el primer caso se emplean las opciones -M
ó -qff
con el programa exim
y en el segundo está controlado por la opción auto_thaw
de la configuración. Tras la descongelación del mensaje se intenta un nuevo despacho y, si se producen condiciones similares, el mensaje puede volver a la categoría inicial.
Queues
Una cola de mensajes ó cola a secas es una colección de mensajes de correo bajo el control de Exim. Para el programa dicha cola es más bien un fondo común, un depósito, sin orden ni preferencia ni separación por dominios ú otros factores.
Cada elemento en la cola representa un mensaje de correo con uno ó varios destinatarios, y que permanecen guardados allí hasta que un proceso especial los extrae de ella para despacharlos a su destino. Y esto, siempre que dicha entrega no se haya podido realizar tras la recepción por las causas arriba comentadas.
Despacho de mensajes
El proceso de despacho de mensajes que lleva a cabo Exim consiste en encontrar información acerca de los destinatarios de un mensaje y en cómo llevarlos hasta allí.
Para todo ello en el programa existen unos bloques de código -separada e independientemente configurables- llamados controladores (drivers en el argot del autor) en el sentido génerico del término. Pueden hacer cosas tan dispares como resolver direcciones IP, conectar vía SMTP con otras máquinas o almacenar mensajes en buzones locales.
Existe tres tipos de controladores:
- enrutadores (routers): encargados de procesar direcciones de correo.
- transportes (transports): encargados de despachar mensajes, ya sea copiándolos en otros archivos, en tuberías o hacia conexiones SMTP.
- autentificadores (smtp authenticators): encargados de las transacciones seguras (identificación, cifrado, ...) dentro del protocolo SMTP.
El procedimiento habitual consiste en determinar primero cuales son las direcciones finales destinatarias del mensaje, invocando a todos los enrutadores necesarios, para después llamar a los transportes que entregan los archivos de forma local ó remota; en este último caso es posible que necesite emplear algún tipo de autentificación.
Routers
Un enrutador se emplea para decidir qué hacer con un mensaje una vez que es aceptado previamente por el mecanismo de control de acceso (Access control list). Es decir, mediante los enrutadores se determinan las direcciones destinatarias de los mensajes.
Cada enrutador se prueba por orden de aparición en la configuración hasta que el mensaje es aceptado en uno de ellos (lo que significa que también puede rechazarlo y no efectuar más comprobaciones).
Aquí hay ejemplo de enrutador para buscar alias locales en un directorio LDAP.
Transports
Los transportes se emplean para llevar a cabo el despacho actual de mensajes una vez que han sido aceptados y procesados por los enrutadores.
Recetario
Buscando entre los mensajes encolados
Existe una utilidad llamada exiqgrep que sirve para realizar búsquedas en los mensajes encolados y no despachados aún. Es un programa Perl escrito por Matt Hubbard y que llama a exim -bpu
para obtener un flujo de datos sobre los que buscar.
Parámetro | Efecto |
---|---|
-f <regex>
|
Aplicar la expresión regular al emisor del mensaje. |
-r <regex>
|
Aplicar la expresión regular al destinatario del mensaje. |
-z
|
Limitar la búsqueda a mensajes congelados. |
-x
|
Limitar la búsqueda a mensajes descongelados. |
-i
|
Mostrar sólo el identificador del mensaje resultante de la búsqueda. Útil para realizar operaciones con los mensajes. |
-c
|
Mostrar sólo un total de mensajes coincidentes. |
Manipulando la cola de mensajes
Acción a realizar | Llamada y parámetros |
---|---|
Procesar la cola de mensajes | exim -q -v |
Procesar la cola de mensajes sólo para destinos locales | exim -ql -v |
Despachar un mensaje (sea cual sea su condición) | exim -M <message-id> [...] |
Eliminar un mensaje | exim -Mrm <message-id> [...] |
Depurando la configuración de exim4
Para ver qué hace exim nada mejor que usar el parámetro de depuración -d
con las opciones que necesitemos. Si queremos incluirlas todas usaremos -d+all
y si necesitamos restringir algunas prefijamos su nombre con un signo menos (como en -d+all-acl
).
Esta es la tabla de opciones (no he traducido las que no he estudiado con más detenimiento):
Categoría | Descripción |
---|---|
acl | Interpretación del control de acceso |
auth | Identificación |
deliver | Lógica general de despacho de correo |
dns | Búsquedas DNS lookups (ver también la categoría resolver
|
dnsbl | Listas negras por DNS (también conocidas como RBL) |
exec | Parámetros para llamadas a execv() |
expand | Expansión de textos y cadenas |
filter | Manejo de filtros |
hints_lookup | hints data lookups |
host_lookup | Todos los tipos de manejos entre nombres y direcciones IP |
ident | ident lookup |
interface | lists of local interfaces |
lists | Búsquedas de cosas en listas |
load | system load checks |
local_scan | can be used by local_scan() |
lookup | Código de búsquedas en general incluyendo todas las búsquedas |
memory | Gestión de memoria |
pid | Añadir el ID del proceso (PID) a todas las líneas de depuración |
process_info | setting info for the process log |
queue_run | Proceso de colas |
receive | Lógica general en la recepción de mensajes |
resolver | Activar la depuración del buscador DNS |
retry | Gestión de reintentos |
rewrite | Reescritura de direcciones |
route | Enrutado de direcciones |
timestamp | Añadir una marca de tiempo a todas las líneas de depuración |
tls | Lógica TLS |
transport | Transportes de correo |
uid | Cambios de UID/GID y búsquedas de los mismos |
verify | Lógica de verificación de direcciones |
all | Prácticamente todas las opciones incluyendo el parámetro -v
|
Las excepciones son las siguientes:
+all
: Se excluye la categoríamemory
puesto que es la opción preferida para enviar informes a los desarrolladores y la información es excesiva para su gusto (y el de cualquiera).+resolver
: sólo se incluye información del buscador DNS cuando se ha compilado exim con la opciónDEBUG
.- La opción predeterminada para depurar, el parámetro
-d
pelado, excluye las siguientes categorías: expand, filter, interface, load, memory, pid, resolver y timestamp.