У меня Postfix работает на машине Debian 9, и я установил opendkim (оба из репозиториев Debian). Сокет / соединение milter - это inet: localhost: 8892, и межсетевой экран iptables разрешает это соединение ( telnet localhost 8892
завершается успешно).
Однако я получаю подписанные сообщения только в том случае, если отправляю электронное письмо от консоль (с mail -s "testing DKIM" my-address @ not-the-same-domain
), но не в том случае, если я отправляю его из Thunderbird. Обратите внимание, что в Thunderbird я использую ssh-туннелирование, чтобы почтовый сервер видел, что соединение исходит от localhost. (то есть на моем рабочем столе я запускаю ssh -Llocalhost: 2525: my-server: 25 tunnel @ my-server
, и я говорю Thunderbird, что исходящий почтовый сервер - localhost, порт 2525.
] Это пример подписи, которую я получаю при отправке с консоли:
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=[omitted -- but it shows the correct domain];
s=mail; t=1557228588;
bh=slJTHzrIw+6TkIIPpFmGER34xtLwMLZ2md99gvHoFTE=;
h=To:Subject:Date:From:From;
b=jtOM5OOM83l [ ··· several lines of "gibberish" ··· ] 4qdpSt4l86DEA==
Есть идеи относительно того, что могло вызвать эту проблему?
[[EDIT]] Проблема становится все более загадочной. При просмотре журналов я заметил предупреждение внешний хост XXXX.my-service-provider.com
попытался отправить как my-domain.com
Я настроил / etc / hosts
, / etc / hostname
... Наконец я понял, что мне нужно настроить обратный поиск DNS, и я сделал это. Теперь команда hostname
отвечает полным доменным именем (правильный домен, для которого я настраиваю DKIM).
Теперь в / var / log / syslog
, когда я отправляю электронной почты, я получаю сообщение внешний хост * правильное-полное доменное имя * попытался отправить как * правильное-полное доменное имя *
. И переданное сообщение не содержит подписи DKIM.
Если я использую telnet localhost 25
, приветствую SMTP-сервер с помощью helo the-right-FQDN
, сообщение будет DKIM- подписано; журналы показывают, что за передачу отвечало соединение с localhost (127.0.0.1)
.
Есть идеи?
[[КОНЕЦ РЕДАКТИРОВАНИЯ]]
Оказывается, проблема была вызвана отсутствием параметра InternalHosts. Для текущей версии opendkim в Debian 9 (2.11) я решил это следующим образом:
Отредактировал файл /etc/opendkim.conf
и добавил следующую строку:
InternalHosts file:/etc/opendkim-trustedhosts.conf
Затем файл /etc/opendkim-trustedhosts.conf
содержит:
127.0.0.1
x.x.x.x (the actual public IP of the server)
И вуаля --- перезапустите, и проблема устранилась!
Некоторые различия, которые я заметил относительно другая информация, которую я нашел там --- из того, что я мог видеть, в CentOS (не уверен, более старые версии или все еще такие), конфигурация по умолчанию: есть каталог etc / opendkim
, а внутри в этом каталоге есть, среди прочего, файл TrustedHosts.conf
; в файле /etc/opendkim.conf
уже есть директива InternalHosts
, указывающая на файл TrustedHosts. В Debian 9 его нужно создавать вручную.
Аналогичная проблема и контекст: использование openDKIM с Postfix в качестве MTA, который затем является ретранслятором только для аутентифицированных почтовых пользовательских агентов (MUA), более поздний подсчет, в частности, клиентов MS-Outlook, настроенных с подключениями SMTP + POP или SMTP + IMAP к Postfix MTA через TLS / SSL + SASL (аутентификация с логином и паролем) через порт 587 в моем случае.
Когда используется локальная консоль mailx или sendmail, интеграция openDKIM контролируется с помощью параметра non_smtpd_milters в postfix / main.cf , тогда как smtpd_milters для управления случаем входящих сообщений электронной почты SMTPD от аутентифицированных MUA. Итак, сначала вам может потребоваться проверить, что оба параметра выровнены, например например,
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
Затем, когда действительная подпись DKIM создается для локальных сообщений электронной почты (через mailx или sendmail), но не для сообщений электронной почты от аутентифицированных MUA, это, скорее всего, проблема с определением того, кто является сообщением. отправителя и, таким образом, предотвращает сканирование openDKIM в домен «От:», для которого настроена подпись. Скорее всего, вы нашли следы вроде:
opendkim[9530]: E3B6A13CBED: can't determine message sender;
, что в моем случае было связано с вмешательством в параметр header_checks в Postfix. Ищите его в main.cf или master.cf (который может переопределять параметры в main.cf), например.
-o header_checks=regexp:/etc/postfix/submission_header_cleanup
и убедитесь, что связанные правила очистки заголовка НЕ содержат регулярное выражение типа:
/^Received:/ IGNORE
, которое вы должны затем закомментировать или удалить.
Наконец, убедитесь, что postfix / main.cf скажет Postfix передать достаточно данных в opendkim через протокол milter с опцией вида:
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_type} {auth_authen}