Я пытаюсь настроить подписку электронной почты DKIM для SMTP-сервера postfix.
Этот сервер будет использоваться различными службами в локальной сети.
Я создал пару ключей DKIM, добавил ее в свой домен и смог успешно отправлять электронные письма с самого сервера, как показано здесь:
me@server:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.lan ESMTP Postfix (Ubuntu)
HELO example.com
250 server.lan
MAIL FROM: service@example.com
250 2.1.0 Ok
RCPT TO: me@example.com
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
To:me@example.com
Subject:Testing from server
hello
.
250 2.0.0 Ok: queued as AAD604EA1CC2
Это сообщение получено с правильной подписью DKIM.
Но если я сделаю то же самое (только с telnet server.lan 25
) на другом компьютере в локальной сети, подпись DKIM не включена, и получатель не знает, кто отправил электронное письмо.
Я обнаружил, что эта запись в /var/log/mail.log
имеет к нему отношение:
Jul 30 04:28:16 server opendkim[25664]: AAD604EA1CC2: can't determine message sender; accepting
Итак, я понял, что postfix не устанавливает FROM
обращайтесь правильно. Так почему он этого не делает и как я могу это исправить?
Заранее спасибо...
Весь журнал транзакции с рабочей станции выглядит так:
Jul 30 15:56:29 server postfix/smtpd[6795]: warning: database /etc/aliases.db is older than source file /etc/aliases
Jul 30 15:56:29 server postfix/smtpd[6795]: connect from workstation.lan[192.168.1.63]
Jul 30 15:57:24 server postfix/smtpd[6795]: 2C35E4EA1DD1: client=workstation.lan[192.168.1.63]
Jul 30 15:58:18 server postfix/cleanup[6799]: 2C35E4EA1DD1: message-id=<>
Jul 30 15:58:18 server opendkim[25664]: 2C35E4EA1DD1: can't determine message sender; accepting
Jul 30 15:58:18 server postfix/qmgr[25810]: 2C35E4EA1DD1: from=<service@example.com>, size=272, nrcpt=1 (queue active)
Jul 30 15:58:19 server postfix/smtp[6802]: 2C35E4EA1DD1: to=<me@example.com>, relay=ASPMX.L.GOOGLE.COM[173.194.70.26]:25, delay=67, delays=66/0.02/0.26/1.1, dsn=2.0.0, status=sent (250 2.0.0 OK 1343656739 a59si1127667wel.70)
Jul 30 15:58:19 server postfix/qmgr[25810]: 2C35E4EA1DD1: removed
MTA никогда не отвечает за установку заголовков сообщений; это проблема с вашим почтовым клиентом или MUA.
При этом, если postfix обнаруживает сообщение без заголовков ЛЮБОЙ From :, он добавляет адрес отправителя MAIL FROM как заголовок From:; это очень хорошо задокументировано.
Я просто столкнулся с этой проблемой и решил ее. Ключевым моментом здесь является строка из почтового журнала: «не могу определить отправителя сообщения; принимаю». Проблема в том, что входящее письмо имеет неправильный формат и в нем отсутствуют некоторые требуемые RFC заголовки, которые необходимы opendkim для работы с DKIM.
По умолчанию opendkim настроен на пропуск этих сообщений, так как он не может ничего сделать с доступной информацией и не может ни подтвердить, ни опровергнуть, что сообщение проходит DKIM, и проявляет осторожность, решая не отбрасывать сообщения, если явно не настроен на.
Это срабатывает, когда вы отправляете почту с помощью telnet, потому что вы не напечатали все требуемые RFC заголовки, которые ожидал opendkim. Если вы добавили их (в частности, opendkim, похоже, проверяет только заголовки From и Date и, похоже, не заботится о том, что на самом деле содержит заголовок Date)
Если вы не против отбрасывать всю почту, которая нарушает RFC и у вас отсутствуют заголовки From или Date, вы можете зайти в свой opendkim.conf и либо изменить, либо добавить строку «RequiredHeaders yes». Это, вероятно, довольно безопасно, поскольку даже большая часть спама справляется со всем этим правильно, но при отбрасывании почты всегда есть риск того, что часть законной почты также может быть потеряна.
У вас есть и smtpd_milters, и non_smtpd_milters, установленные в вашем main.cf?
Я попробовал dkim milter с указанием на него только smtpd_milters, и это не сработало, хотя я подключался к smtpd через telnet, но когда я добавил конфигурацию для non_smtpd_milters, он начал работать. Там что-то очень странное, но это заставило его уйти.