postfix: milter-reject: END-OF-MESSAGE от …: 4.7.1 Сервис недоступен (opendkim)

Вопрос или проблема

Я настроил OpenDkim для работы с postfix и получаю следующую ошибку, когда пытаюсь отправить почту:

postfix/cleanup[11542]: 40F271A291A: milter-reject: END-OF-MESSAGE from ***[***]: 4.7.1 Service unavailable - try again later; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.1.10]>

Я настроил opendkim для использования unix-сокета, и он работает:

[chazy@mail ~]$ sudo netstat -nalp | grep dkim
unix  2      [ ACC ]     STREAM     LISTENING     144135   11267/opendkim       /run/opendkim/opendkim.sock
unix  3      [ ]         STREAM     CONNECTED     147626   11267/opendkim       /run/opendkim/opendkim.sock
unix  2      [ ]         DGRAM                    144137   11267/opendkim

Opendkim запускается от имени своего пользователя, как предложено в Arch wiki (а также другие рекомендации по безопасности). Папки также принадлежат opendkim:mail.

Я использую один и тот же селектор и ключ для подписи для всех доменов, является ли это проблемой?

Конфигурация postfix выглядит следующим образом:

# DKIM
milter_default_action = accept
smtpd_milters = unix:/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/run/opendkim/opendkim.sock

На данный момент не установлены никакие антиспам-сервисы, просто базовая конфигурация postfix/dovecot/opendkim для тестирования сервера.

Конфигурация opendkim:

# /etc/opendkim/opendkim.conf

BaseDirectory           /var/lib/opendkim
Canonicalization        relaxed/simple
Domain                  domain1.com domain2.com
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyFile                 /etc/opendkim/201704.private
KeyTable                refile:/etc/opendkim/KeyTable
Selector                201704
SigningTable            refile:/etc/opendkim/SigningTable
Socket                  local:/run/opendkim/opendkim.sock
Syslog                  Yes
TemporaryDirectory      /run/opendkim
UMask                   002
UserID                  opendkim:mail

Конфигурация TrustedHosts:

# /etc/opendkim/TrustedHosts

# Список доверенных хостов
127.0.0.1
::1
x.x.x.x # IP сервера
mail.maindomain.com

# Домены
maindomain.com
domain2.com

Проблема в моем случае заключалась в том, что файл ключа подписи был владельцем root, поэтому выполнив:

sudo chown opendkim:mail /etc/opendkim/selector.private

Проблема была решена.

Если это не ваша проблема, не забудьте взглянуть на журнал как для postfix, так и для opendkim (я забыл проверить opendkim, и там была ошибка):

journalctl --follow --unit postfix.service --unit opendkim.service

Проблема:

Есть еще одна вещь, которая вызывает эту ошибку, которую я только что обнаружил с большой болью:

BaseDirectory          /run/opendkim

Вы могли подумать, что указываете opendkim, где находится PID…

Решение:

#BaseDirectory          /run/opendkim

Вот что настройки действительно делают и почему служба была представлена как “milter-reject: END-OF-MESSAGE from …: 4.7.1 Service unavailable

BaseDirectory (строка)

Если установлено, указывает фильтру перейти в указанную директорию, используя chdir(2), прежде чем делать что-либо еще. Это означает, что все файлы, указанные в другом месте файла конфигурации, могут быть указаны относительно этой директории. Это также полезно для обеспечения того, чтобы любые дампы аварийных сбоев сохранялись в определенном месте.

Ссылка: http://www.opendkim.org/opendkim.conf.5.html

Как только я закомментировал это, всё заработало.

Это было значение по умолчанию, которое я использовал, и я видел другие конфигурации, использующие это значение, поэтому изначально не придавал этому внимания и сосредоточился на решениях, связанных с неверными разрешениями.

Убедитесь, что у вас есть правильное значение для этой настройки, иначе вы потратите часы, гоняясь за своим хвостом. Логирование, мягко говоря, не помогает.

Попробуйте и посмотрите, работает ли удаление “*@” из файла, который вы используете как таблицу подписей. Это было то, что вызывало это у меня, даже при наличии

SigningTable      refile:<directory to signing table file>

в моем opendkim.conf.

В моем случае исходящее сообщение просто было слишком большим.

После исправления проблемы я получил:

Sep 24 20:05:20 va1my postfix/smtp[23682]: C553B48F30: to=<XXX>, relay=XXXXX:25, delay=2979299, delays=2979298/0.01/0.13/0.72, dsn=5.2.3, status=bounced (host XXXXXX said: 552-5.2.3 Your message exceeded message size limits. Please visit 552-5.2.3  XXXX  to view our size 552 5.2.3 guidelines.  (in reply to end of DATA command))

Чтобы исправить это, я добавил в /etc/opendkim.conf:

MaximumHeaders 0

и перезапустил opendkim service opendkim restart (или systemctl restart opendkim).

Установка предела в 256k не помогла, потому что заголовок был больше, поэтому я установил 0, что отключило предел. Я мог снова закомментировать строку, так как коренная причина устранена.

Пометка на полях, истинная причина

Заголовки, вероятно, были слишком большими из-за того, что я отправил вывод лога в sendmail без добавления заголовка.

Я добился этого следующим образом и не осознал, что эта почта застряла:

grep FILTER FILE | sendmail [email protected]

Чтобы правильно написать сценарий с использованием “sendmail”, я сделал что-то подобное:

#!/bin/bash
# TMP_FILE и SUBJECT устанавливаются где-то в скрипте.

# Предварительно добавьте $SUBJECT в вывод скрипта, отправленный по почте.

  ( echo "Subject: $SUBJECT" \
    && cat $TMP_FILE \
  ) | \
  /usr/sbin/sendmail $1

Может быть несколько причин, вызывающих такого рода ошибку, у меня была установлена настройка MustBeSigned на yes, что иногда мешало мне получать некоторые легитимные электронные письма, которые имели неправильно настроенный DKIM, поэтому эти письма отклонялись.

Попробуйте установить MustBeSigned на No

Ответ или решение

Ошибка "postfix: milter-reject: END-OF-MESSAGE from …: 4.7.1 Service unavailable (opendkim)" может быть вызвана рядом факторов при интеграции OpenDKIM с Postfix. Этот код ошибки обычно указывает на то, что Milter (Mail Filter) не смог обработать сообщение во время фазы "END-OF-MESSAGE". Основная проблема заключается в настройке и корректной работе компонентов OpenDKIM и Postfix. Рассмотрим подробнее возможные причины и их решения.

Теория

OpenDKIM — это программное обеспечение, которое обеспечивает добавление цифровых подписей к исходящим электронным письмам. Это помогает получателям электронной почты убедиться в подлинности отправителя и гарантирует, что сообщение не было модифицировано в процессе доставки. Postfix использует OpenDKIM через механизм фильтров (мильтеров) для осуществления этой функции.

Использование OpenDKIM в связке с Postfix требует корректных настроек конфигурации обеих служб. Ошибка "4.7.1 Service unavailable" указывает на неподходящие или отсутствующие параметры в настройках, что приводит к недоступности услуги, ответственной за подпись выходящих сообщений.

Примеры

  1. Настройки прав доступа и владельцев файлов.

    Если файл ключа OpenDKIM (/etc/opendkim/selector.private) принадлежит пользователю root, это может вызвать ошибки доступа, так как OpenDKIM будет запускаться под другим пользователем (например, opendkim:mail). Возможное решение — сменить владельца файла на opendkim:mail, что обеспечит необходимые разрешения на чтение:

    sudo chown opendkim:mail /etc/opendkim/selector.private
  2. Неправильные настройки BaseDirectory в opendkim.conf.

    Директива BaseDirectory указывает OpenDKIM, какую директорию использовать в качестве рабочей. Если она указана неверно или не подходит для вашего окружения, это может вызвать проблемы с доступом к ресурсам, необходимым для работы приложения. Отключение (закомментирование) этой строки в конфигурации OpenDKIM может решить проблему:

    # BaseDirectory /run/opendkim
  3. Неправильная конфигурация SigningTable.

    Если ошибка заключается в неверной конфигурации таблицы подписей (SigningTable), например, из-за указания *@ в файле, который используется как таблица подписей, это может привести к отказу в обслуживании. Убедитесь, что конфигурация SigningTable корректно соответствует вашему Domקשенинанному .conf.)

Применение

Для устранения данной ошибки рекомендуется выполнять следующие шаги:

  1. Проверка журнала ошибок: Используйте journalctl для отслеживания ошибок в работе Postfix и OpenDKIM:

    journalctl --follow --unit postfix.service --unit opendkim.service
  2. Проверка конфигурационных файлов:

    • Откройте и проверьте /etc/opendkim.conf, убедитесь в правильности всех указанных путей и конфигурационных директив.
    • Убедитесь, что файлы KeyTable и SigningTable, упомянутые в конфигурации, корректны и доступны для OpenDKIM.
  3. Разрешения на файлы и директории: Проверьте все ключевые файлы и каталоги на предмет правильных прав доступа, чтобы пользователь opendkim имел к ним доступ.

  4. Разрешение проблем с размером заголовков: В случае ошибки, связанной с размером сообщения, установите лимит заголовков или удалите ограничение в конфигурации OpenDKIM:

    MaximumHeaders 0
  5. Перезапуск служб: После внесения изменений в конфигурацию, перезапустите Postfix и OpenDKIM, чтобы они применили новые настройки:

    systemctl restart postfix
    systemctl restart opendkim

Заключение

Правильная интеграция OpenDKIM и Postfix потребует тщательного подхода к настройке файлов конфигурации и управления доступом. Следуя данным рекомендациям и применяя их на практике с учетом ваших специфических условий, вы сможете устранить ошибку "4.7.1 Service unavailable" и обеспечить надежную работу механизмов цифровой подписи вашей электронной почты.

Оцените материал
Добавить комментарий

Капча загружается...