Exim: не принимать почту без DKIM подписи
Если сервер обслуживает персональный домен, то вполне допустимо применение фашисткой политики «принимать только подписанные письма». По RFC, если отправляющий домен не подписывает письма, то их надо пропускать. Но бывают случаи, когда нужно их «рубить» на корню.
Простое написание в acl_smtp_dkim:
acl_check_dkim: deny message = DKIM verification failed dkim_status = none:invalid:fail accept
не приведёт к нужному результату, т.к. этот ACL вызывается единожды для каждой синтаксически корректной подписи во входящем сообщении. На практике это означает, что если в сообщении нет DKIM подписи, то ACL вызываться не будет.
Обойти это можно используя переменную в ACL списках. В acl_smtp_rcpt устанавливаем переменную acl_c_spamscore в 0, в acl_smtp_dkim устанавливаем её в 10, если сообщение прошло проверку DKIM подписи, в acl_smtp_data проверяем значение переменной. Если она меньше 5 — письма отвергаем, в противном случае — принимаем.
acl_smtp_rcpt = acl_check_rcpt acl_smtp_dkim = acl_check_dkim acl_smtp_data = acl_check_data acl_check_dkim: accept hosts = +relay_from_hosts accept authenticated = * # Message with sign, good signature accept dkim_status = pass set acl_c_spamscore = 10 add_header = :at_start:Authentication-Results: dkim=$dkim_verify_status accept acl_check_rcpt: #Добавляем в этот ACL warn set acl_c_spamscore = 0 #warn set acl_c_local_address = $local_part@$domain acl_check_data: accept authenticated = * deny message = "DKIM verification failed" #condition = ${if eq{$acl_c_local_address}{mymail@mydomain.com}{yes}{no}} condition = ${if <{$acl_c_spamscore}{5}{yes}{no}} accept
Если требуется, чтобы такая политика срабатывала только на конкретный ящик, уберите комментарий «#» в секции acl_check_rcpt в строке
#warn set acl_c_local_address = $local_part@$domain
и в acl_check_data:
#condition = ${if eq{$acl_c_local_address}{mymail@mydomain.com}{yes}{no}}
где mymail@mydomain.com — ваш почтовый ящик.
В log-файле exim-reject.log будет появляться соответствующая запись, плюс заголовки отвергнутых писем.