Я играю с Exim и создал почтовый сервер, который может принимать и отправлять электронные письма. Теперь я хочу включить проверку SPF для каждого входящего письма, чтобы Получен SPF
К этим письмам добавляется заголовок. Но я не могу понять, как это сделать.
Док говорит, Поддержка проверки SPF встроена в Exim, если SUPPORT_SPF=yes установлен в Local/Makefile. В поддержке используется библиотека libspf2 https://www.libspf2.org/.
Но я полагаю, что эту опцию можно установить только в yes, если он/она собирает Exim из исходников. Я установил его прямо из пакета ubuntu (думаю, тогда автоматически устанавливается libspf2) и не знаю, где находится Локальный/Makefile
является. Я почти уверен, что это можно сделать довольно легко, но я понятия не имею об этом прямо сейчас.
Я также проверил каталог конфигурации Exim и нашел следующий соответствующий фрагмент кода в 30_exim4-config_check_rcpt
файл.
Здесь ясно сказано, что Exim проверит запись SPF отправителя после команды RCPT, если проверка SPF включена и spf-инструменты-perl
установлено. я установил spf-инструменты-perl
и до сих пор не видел Получен SPF
заголовок. Итак, напрашивается два вопроса.
- Как включить проверку SPF, чтобы разрешить выполнение этого кода?
- Почему spf-tools-perl, поскольку документ ясно говорит, что Exim использует libspf. Зачем тогда две библиотеки?
# Используйте spfquery для выполнения пары проверок SPF.
#
# Это довольно затратно с точки зрения DNS-запросов (~6 запросов на почту). Не делайте
# включить, если это проблема. Также обратите внимание, что если вы включите это, вы должны
# установите "spf-tools-perl", который предоставляет команду spfquery.
# Отсутствие spf-tools-perl вызовет «Непредвиденную ошибку в
Предупреждение # Проверка SPF.
.ifdef CHECK_RCPT_SPF
Отрицать
message = [SPF] $sender_host_address не разрешено отправлять почту с \
${if def:sender_address_domain {$sender_address_domain}{$sender_helo_name}}.
log_message = проверка SPF не удалась.
!acl = acl_local_deny_exceptions
условие = ${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}}}}\
{нет}{${if eq {$runrc}{1}{да}{нет}}}}
откладывать
message = Временная ошибка DNS при проверке записи SPF. Попробуйте позже.
!acl = acl_local_deny_exceptions
условие = ${if eq {$runrc}{5}{да}{нет}}
предупреждать
условие = ${if <={$runrc}{6}{да}{нет}}
add_header = Received-SPF: ${if eq {$runrc}{0}{pass}\
{${if eq {$runrc}{2}{softfail}\
{${if eq {$runrc}{3}{нейтральный}\
{${if eq {$runrc}{4}{постоянная ошибка}\
{${if eq {$runrc}{6}{none}{error}}}}}}}}}\
} клиент-ip=$sender_host_address; \
${if def:sender_address_domain \
{конверт-от=${sender_address}; {}}\
helo=$sender_helo_name
предупреждать
log_message = Непредвиденная ошибка при проверке SPF.
условие = ${if >{$runrc}{6}{да}{нет}}
.endif```