Почта

/
/
Проверка писем без SPF в Exim на AlmaLinux

Проверка писем без SPF в Exim на AlmaLinux

Иногда необходима строгая фильтрация входящих писем на сервере и усилить эту фильтрацию можно с помощью проверки наличия SPF-записи на домене отправителя.

Проверку SPF-записей можно настроить на почтовом сервере Exim в AlmaLinux: в этой ОС почтовый сервер собран с поддержкой проверки входящих писем на наличие SPF-записей.

Проверить, имеет ли Exim на вашем сервере соответствующий модуль, можно следующей командой:

exim -bV | grep -i spf

В выводе должны быть перечислены установленные модули, в том числе и SPF:

Support for: Content_Scanning Exim_filter Sieve_filter crypteq Expand_dlfunc iconv() IPv6 PAM Perl OpenSSL TLS_resume DANE DKIM DMARC DNSSEC ESMTP_Limits ESMTP_Wellknown Event OCSP PIPECONNECT PRDR PROXY Queue_Ramp SOCKS SPF SRS TCP_Fast_Open
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch ldap ldapdn ldapm nis nis0 passwd spf sqlite

Для подключения проверки, необходимо в конфигурационном файле /etc/exim/exim.conf сразу после строки require verify = sender добавить следующие строки:

        # --- SPF check (RFC 7208) ---
        warn    condition       = ${if and{{eq{$authenticated_id}{}}{!eq{$sender_host_address}{}}}{yes}{no}}
                spf             = pass:fail:softfail:neutral:none:err_perm:err_temp
                add_header      = :at_start:Received-SPF: $spf_header_comment
                logwrite        = SPF result=$spf_result for $sender_address from $sender_host_address
    
        deny    condition       = ${if and{{eq{$authenticated_id}{}}{!eq{$sender_host_address}{}}}{yes}{no}}
                spf             = fail
                message         = SPF check failed: $sender_address is not permitted to send mail via $sender_host_address. See http://www.openspf.org/Why?id=$sender_address&ip=$sender_host_address&receiver=$primary_hostname
                log_message     = SPF fail for $sender_address from $sender_host_address    

После сохранения изменений, проверьте синтаксис конфигурации и перезапустите службу:

exim -C /etc/exim/exim.conf -bV
systemctl restart exim

Теперь в заголовках входящих писем будет присутствовать заголовок Received-SPF. Если у домена отправителя есть SPF-запись, в заголовке будет указано о соответствии имени домена и IP-адреса, например:

Received-SPF: ml.domain.tld: domain of yandex.ru designates 178.154.239.150 as permitted sender

Если же SPF отсутствует, в значении будет указано none, например:

Received-SPF: none (ml.domain.tld: no SPF record for domain.tld) client-ip=1.2.3.4;

Однако, письмо будет принято в обоих случаях, поскольку ранее были добавлены следующие правила:

  • В блоке warn правило spf имеет none в списке значений, значит блок сработает и заголовок будет добавлен.
  • В блоке deny для правила spf указано только значениеfail, значит блок не сработает и письмо пройдёт дальше по ACL.

Это соответствует рекомендации RFC 7208: отсутствие SPF записи (или же none) - это нейтральная ситуация и она не должна трактоваться как признак спама, потому что многие легитимные домены не публикуют SPF.

Письма, у которых присутствует значение none, можно обрабатывать сортировщиками писем. Например, с помощью сортировщика в ispmanager 6.