Estoy jugando con Exim y creé un servidor de correo que puede aceptar y enviar correos electrónicos. Ahora, quiero habilitar la verificación de SPF para cada correo electrónico entrante para que Received SPF
se agregue un encabezado a estos correos electrónicos. Pero parece que no puedo encontrar una manera de hacer esto.
El doctor dice,SPF verification support is built into Exim if SUPPORT_SPF=yes is set in Local/Makefile. The support uses the libspf2 library https://www.libspf2.org/.
Pero supongo que uno sólo puede establecer esta opción en Sí si está compilando Exim desde la fuente. Lo instalé directamente desde el paquete ubuntu (me imagino que libspf2 se instala automáticamente en ese momento) y no sé dónde está la ubicación Local/Makefile
. Estoy bastante seguro de que esto se puede hacer con bastante facilidad, pero no tengo ni idea de ello en este momento.
También verifiqué el directorio de configuración de Exim y encontré el siguiente fragmento de código relevante en 30_exim4-config_check_rcpt
el archivo.
Esto dice claramente que Exim verificará el registro SPF del remitente después del comando RCPT si la verificación SPF está habilitada y spf-tools-perl
instalada. Lo instalé spf-tools-perl
y todavía no vi ningún Received SPF
encabezado. Entonces, esto plantea dos preguntas.
- ¿Cómo habilitar la verificación SPF para permitir la ejecución de este código?
- ¿Por qué spf-tools-perl como dice claramente el documento? Exim usa libspf. ¿Por qué entonces dos bibliotecas?
# Use spfquery to perform a pair of SPF checks.
#
# This is quite costly in terms of DNS lookups (~6 lookups per mail). Do not
# enable if that's an issue. Also note that if you enable this, you must
# install "spf-tools-perl" which provides the spfquery command.
# Missing spf-tools-perl will trigger the "Unexpected error in
# SPF check" warning.
.ifdef CHECK_RCPT_SPF
deny
message = [SPF] $sender_host_address is not allowed to send mail from \
${if def:sender_address_domain {$sender_address_domain}{$sender_helo_name}}.
log_message = SPF check failed.
!acl = acl_local_deny_exceptions
condition = ${run{/usr/bin/spfquery.mail-spf-perl --ip \
${quote:$sender_host_address} --identity \
${if def:sender_address_domain \
{--scope mfrom --identity ${quote:$sender_address}}\
{--scope helo --identity ${quote:$sender_helo_name}}}}\
{no}{${if eq {$runrc}{1}{yes}{no}}}}
defer
message = Temporary DNS error while checking SPF record. Try again later.
!acl = acl_local_deny_exceptions
condition = ${if eq {$runrc}{5}{yes}{no}}
warn
condition = ${if <={$runrc}{6}{yes}{no}}
add_header = Received-SPF: ${if eq {$runrc}{0}{pass}\
{${if eq {$runrc}{2}{softfail}\
{${if eq {$runrc}{3}{neutral}\
{${if eq {$runrc}{4}{permerror}\
{${if eq {$runrc}{6}{none}{error}}}}}}}}}\
} client-ip=$sender_host_address; \
${if def:sender_address_domain \
{envelope-from=${sender_address}; }{}}\
helo=$sender_helo_name
warn
log_message = Unexpected error in SPF check.
condition = ${if >{$runrc}{6}{yes}{no}}
.endif```