Назад | Перейти на главную страницу

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

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

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

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

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 auth, и маршрутизатор, который определяет, когда оно приходит из системы веб-почты. В вашем случае вы можете использовать наличие ~ / .forward файл, чтобы помочь принять решение о том, что это экспедитор, а не местная доставка. Каждый маршрутизатор устанавливает определенный транспорт, предназначенный для каждого случая. Транспорты - это то место, где подписание либо сделано, либо не сделано. Как вы можете видеть из моей транспортной конфигурации ниже, я DKIM подписываю веб-почту и 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}}