Я уже говорил, что мы выполняем DKIM-подписание исходящей корреспонденции с помощью Postfix и Amavisd-New. Невзирая на то, что указанная инструкция была написана давным-давно, содержащиеся в ней рекомендации продолжают быть актуальными по сей день. При этом многократные обновления всего программного обеспечения, включая операционную систему, никогда не нарушили работоспособность DKIM-подписания. Первое исключение из этого «правила» возникло после установки Amavisd-New версии 2.11.0 из коллекции портов.
Проблема, которой посвящена эта коротенькая заметка, заключалась в том, что Amavisd-New, обновленный до версии 2.11.0, перестал добавлять DKIM-подписи в отправляемые сообщения, обрабатываемые правилами банка политики ORIGINATING
. При этом результаты выполнения команд amavisd showkeys
и amavisd testkeys
, а также содержимое /var/log/maillog
(даже в режиме максимальной детальности) говорили об отсутствии каких-либо ошибок, связанных с ключами DKIM или операциями DKIM-подписания. Благодаря тому, что в нашем домене используется практика (она же — политика) подписания всех исходящих сообщений (в соответствующей DNS-зоне присутствует TXT-запись _adsp._domainkey.company.com
со значением dkim=all
), мы быстро узнали о возникновении проблем с отправкой почты некоторым корреспондентам и получении от них сообщений об ошибке 550 5.7.0 Message rejected per DKIM policy.
Для подтверждения того, что источником неприятностей является обновленный Amavisd-New, пришлось откатить его до предыдущей версии командами:
svn up -r 415742 /usr/ports/security/amavisd-new portupgrade -f amavisd-new
После перезапуска Amavisd-New командами amavisd stop
и amavisd start
DKIM-подписание заработало, однако я решил поискать более «цивилизованное» решение проблемы, потому что считаю даунгрейд крайностью, приемлемой только при отсутствии альтернатив.
Изучение соответствующего раздела списка рассылки lists.amavis.org подтвердило, что ошибка DKIM-подписания в Amavisd-New 2.11.0 давно известна, и для ее устранения уже существует соответствующий патч, который должен быть наложен на проблемный скрипт /usr/local/sbin/amavisd
.
Если Вы выполнили описанный выше даунгрейд, перед применением указанного патча необходимо снова обновить Amavisd-New командами:
svn update /usr/ports/security/amavisd-new portupgrade amavisd-new
После этого следует перейти в папку /usr/local/sbin
, загрузить патч, например, с моего сайта, а затем применить его командами:
cd /usr/local/sbin fetch /wp-content/uploads/freebsd/amavisd-2.11.0-dkim-signing.patch patch < amavisd-2.11-dkim-signing.patch
После наложения патча нужно перезапустить Amavisd-New командами amavisd stop
и amavisd start
, а затем отправить пустое тестовое сообщение на адрес autorespond+dkim(at)dk(dot)elandsys(dot)com
, дождаться ответа, который придет в течение пары минут, и убедиться в том, что он содержит строки:
The results are as follows: DKIM Signature validation: pass DKIM Author Domain Signing Practices: dkim=all
Наличие представленных строк в полученном сообщении является признаком того, что Вы нигде не ошиблись, и DKIM-подписание исходящей корреспонденции в Amavisd-New, обновленном до версии 2.11.0, опять работает корректно. Теперь можно удалить «лишние» файлы из папки /usr/local/sbin
командами:
cd /usr/local/sbin rm amavisd.orig amavisd-2.11.0-dkim-signing.patch
и спокойно забыть о рассмотренной проблеме, по крайней мере, до следующего обновления Amavisd-New. Я уверен, что разработчик рано или поздно исправит описанную ошибку, а пока этого не произошло, Вы сможете восстановить работоспособность DKIM-подписания в Amavisd-New с помощью данной инструкции.
Описанная ошибка устранена в Amavisd-New версии 2.11.0_1,1 (r428490):