Я использую OpenDKIM для подписи почты на моем сервере Postfix. Он работает по назначению при отправке с SMTPS из исходного домена (скажем, example.com
). Однако почта, отправляемая от клиентов SMTP в локальной сети, не подписывается. Указанные клиенты не принадлежат к одному домену происхождения (например, client1.lan
), но переведены с smtp_generic_maps
к тому же происхождению (в частности client1@example.com
). В идеале я хочу подписать это исходящее письмо.
В /etc/postfix/main.cf у меня есть:
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/var/run/opendkim/opendkim.sock
В /etc/opendkim.conf у меня есть:
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
В / etc / opendkim / TrustedHosts у меня есть:
::1
127.0.0.1
localhost
ip6-localhost
ip6-loopback
mail
10.0.0.0/24
*.lan
В Postfix убедитесь, что /etc/postfix/main.conf
содержит:
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} {auth_type}
Это гарантирует, что почта, приходящая от аутентифицированных пользователей, будет подписана OpenDKIM. Согласно документации:
Сообщение будет проверено, если оно не соответствует критериям подписи, а именно: (1) домен на адресе От: (если присутствует) должен быть указан с помощью переключателя командной строки -d или параметра файла конфигурации домена и (2 ) (a) клиент, подключающийся к MTA, должен пройти аутентификацию, или (b) клиент, подключающийся к MTA, должен быть указан в файле, на который ссылается параметр файла конфигурации InternalHosts (или быть в списке по умолчанию для этой опции), или (c) клиент должен быть подключен к порту демона с именем настройкой файла конфигурации MTA, или (d) MTA должен установить один или несколько макросов, соответствующих критериям, установленным настройкой файла конфигурации MacroList.
Для (a) выше проверяется, установлен ли макрос MTA "{auth_type}" и содержит ли оно какое-либо непустое значение. Это означает, что MTA должен передать значение этого макроса фильтру до или во время фазы конца заголовка (EOH), чтобы его значение было проверено.
Была та же проблема: почта, отправляемая с удаленного хоста, не подписывалась.
Решение было простым: просто добавить IP удаленного отправителя в / etc / opendkim / TrustedHosts
Если они должны быть ретранслированы и подписаны в другие домены (на основе From:
header), то вам нужно будет сопоставить эти другие домены с SigningTable
конфигурации в opendkim, вы даже можете назначить разные клавиши и селекторы, сопоставив их в KeyTable
- оба указывают на разные файлы сопоставления.
У меня была аналогичная проблема, но я мог отладить ее, просмотрев заголовки писем - там вы найдете точное имя хоста и IP-адрес, которые использует ретранслируемый сервер, например:
Received: from client1.lan (client1.localdomain [10.0.0.2]) by example.com
(Postfix) with ESMTPS id 71B8D10C1A68 for <client1@example.com>;
Sun, 12 Feb 2017 13:19:33 +0000 (UTC)
Затем вы можете проверить, использует ли ретранслируемый сервер внутреннюю сеть, какое имя хоста он использует и в какой домен он намеревается отправлять электронную почту.