Exim: Как отключить DKIM для пересылаемой почты?

У меня настроен DKIM в Exim для исходящей почты согласно документации. Exim подписывает всю исходящую почту. Но некоторые из этих исходящих сообщений пересылаются, благодаря .forward файл. Это проблема для меня, потому что некоторые из этих пересылок являются спамом (моя конфигурация exim не выполняет никакой проверки), и я не хочу брать на себя ответственность за них. Но я не могу понять, как настроить exim, чтобы не подписывать эти сообщения.

Моя конфигурация в основном по умолчанию Debian Squeeze, с несколькими DKIM_* набор макросов Я могу опубликовать более подробную информацию, но я думаю, что любой пример условного подписания DKIM исправит меня.

3 ответа

Немного некропоста, но я просто использую строку:

dkim_private_key = ${if or {{!def:sender_host_address}{def:authenticated_id}}{DKIM_PRIVATE_KEY}{}}

(где DKIM_PRIVATE_KEY - макрос, указывающий путь к моему секретному ключу dkim).

Затем, если это сообщение "локального происхождения" (поэтому $ sender_host_address не определен) или электронное письмо приходит от аутентифицированного пользователя, будет установлен dkim_private_key, и сообщение будет подписано.

Иначе (что должно означать, что мы пересылаем сообщение, предполагая, что мы не ретранслятор), dkim_private_key будет пустой строкой, которая (из спецификации) означает, что сообщение не будет подписано.

У меня похожая настройка (хотя я проверяю перенаправленную электронную почту на наличие спама / вирусов, что я настоятельно рекомендую сделать тоже). У меня есть маршрутизатор, который обнаруживает переадресованную электронную почту, и маршрутизатор, который определяет SMTP-аутентификацию, и маршрутизатор, который обнаруживает, когда он приходит из системы веб-почты. В вашем случае вы можете использовать наличие файла ~/.forward, чтобы помочь принять решение о том, что он является пересылкой, а не локальной доставкой. Каждый маршрутизатор устанавливает определенный транспорт, который разработан для каждого случая. Транспорты - это то, где подписание либо сделано, либо не сделано. Как вы можете видеть из моей конфигурации транспорта ниже, я DKIM подписываю webmail и smtp auth, но не пересылку:

remote_smtp_authenticated:
  debug_print = "Transport: remote_smtp_authenticated for $local_part@$domain"
  driver = smtp
  max_rcpt = 10
  hosts_max_try = 2
.include_if_exists /etc/exim/dkim_transports.conf

remote_smtp_webmail:
  debug_print = "Transport: remote_smtp_webmail for $local_part@$domain"
  driver = smtp
  max_rcpt = 10
  hosts_max_try = 2
.include_if_exists /etc/exim/dkim_transports.conf

remote_smtp_forwarder:
  debug_print = "Transport: remote_smtp_forwarder for $local_part@$domain"
  driver = smtp
  max_rcpt = 10
  hosts_max_try = 2

Dkim_transports.conf просто устанавливает все настройки dkim_*, используя серию макросов, специально разработанных для моего сайта:

CentOS58[root@ivwm51 exim]# more dkim_transports.conf
.ifdef DKIM_SIGNING
  dkim_domain = DKIM_DOMAIN
  dkim_selector = DKIM_SELECTOR
  dkim_private_key = DKIM_PRIVATE_KEY
.endif

Вы можете смоделировать свой аналогично.

Я просто проверяю authenticated_sender переменная при настройке dkim_domain,

dkim_domain = ${if def:authenticated_sender {DKIM_DOMAIN}}

Это включает как SMTP-аутентифицированных клиентов, так и локальных пользователей.

Вы можете поместить это условие в любой из обязательных параметров DKIM, включая dkim_domain, dkim_selector или же dkim_private_key,

Вы также можете создать более сложную настройку, в которой селектор будет отличаться в зависимости от того, была ли почта сгенерирована локально, из аутентифицированного клиента или перенаправлена. Таким образом, вы можете иметь различную репутацию для трех видов происхождения почты.

Например, чтобы использовать отдельный ключ для аутентифицированных / локальных и перенаправленных сообщений:

dkim_selector = ${if def:authenticated_sender {authenticated}{forwarded}}
Другие вопросы по тегам