Вопрос или проблема
У меня установлен OpenDKIM на CentOS. Я использую postfix в качестве MTA и dovecot для IMAP/POP3.
Теперь проблема в том, что я пытаюсь настроить DKIM для моего домена. Письма отправляются с поддомена mail.example.com. Проблема в том, что письма не подписываются, и в /var/log/maillog
нет совпадений в таблице подписей для [email protected]. Может ли кто-нибудь помочь мне решить эту проблему?
Это содержание файла KeyTable
default._domainkey.mail.example.com mail.example.com:default:/etc/opendkim/keys/mail.example.com/default.private
Это содержание файла signingtable
*@mail.example.com default._domainkey.mail.example.com
Это содержание файла TrustedHosts
127.0.0.1
example.com
mail.example.com
Спасибо всем, кто пытался помочь.. Проблема была в ошибке с refile в opendkim, когда в файле Signingtable присутствует символ CR.. Поэтому я сохранил файл в формате без DOS, чтобы удалить символ CR, и это сработало идеально…
Настройка доверенных хостов – это IP-адреса или сети. Насколько я знаю, указание имен хостов не поможет. Вы указываете IP-адреса любых хостов, которые будут отправлять электронную почту на ваш сервер, и вы хотите, чтобы она подписывалась, а записи в таблице ключей/подписей определяют, требуется ли это для домена отправителя.
Формат вашей таблицы подписей выглядит правильным, и формат вашей таблицы ключей также правильный. Я подозреваю, что, как только вы исправите список доверенных хостов, это решит вашу проблему.
Добавлено 27 января:
Как вы указываете таблицу подписей в вашем opendkim.conf, определяет, как файл обрабатывается. Поскольку вы используете “*@example.com” в вашей таблице подписей, вам нужно сказать opendkim, что он должен ожидать и обрабатывать символы подстановки. Сделать это в opendkim можно, добавив “refile:” к конфигурационному директиву. Без этой части “refile:” он ожидает точное совпадение с адресом электронной почты. Убедитесь, что это выглядит так:
SigningTable refile:/etc/opendkim/signing_table
Добавлено 31 января:
Также убедитесь, что ваш режим установлен на “sv” (для подписи и проверки), а не только “v” (только проверка, по умолчанию).
Мы можем использовать dos2unix (используйте: apt-get install dos2unix, если не установлен) в качестве фильтра для удаления CR и других специальных символов:
dos2unix < /etc/opendkim/signing_table
У меня была такая же ошибка на Debian 11.2, и у меня отсутствовал refile: в записи файла ключа подписи в файле /etc/opendkim.conf. Это правильная запись, которая исправила проблему.
SigningTable refile:/etc/mail/dkim.signingtable
Иногда папка opendkim не копируется правильно. Например, в моем случае это работает нормально с доменами mail.abusiness.cloud
и abusiness.cloud
, но не работает с mail.abusiness.net
и abusiness.net
. Я не уверен, почему это происходит.
Вот мое решение/обходной путь:
#!/bin/bash
domain="abusiness.net"
domain_mail="mail.abusiness.net"
mailserver_name="mailserver-test"
docker run -d --name ${mailserver_name} \
--hostname $domain_mail \
--domainname $domain \
--network $network_name \
--network $network_name_ip6 \
--restart=unless-stopped \
--log-opt max-size=250m \
--log-opt max-file=2 \
-v ${mailserver_name}_data:/var/mail \
-v /etc/letsencrypt:/etc/letsencrypt:ro \
-v /root/docker-mailserver-data/$domain_mail:/tmp/docker-mailserver \
-e ENABLE_SPAMASSASSIN=1 \
-e SPAMASSASSIN_SPAM_TO_INBOX=1 \
-e MOVE_SPAM_TO_JUNK=0 \
-e SPAM_SUBJECT="***Spam*** " \
-e SA_KILL=10.0 \
-e ENABLE_RSPAMD=0 \
-e ENABLE_CLAMAV=1 \
-e ENABLE_FAIL2BAN=1 \
-e SSL_TYPE=manual \
-e ENABLE_TLS=1 \
-e SSL_CERT_PATH=/etc/letsencrypt/live/$domain_mail/fullchain.pem \
-e SSL_KEY_PATH=/etc/letsencrypt/live/$domain_mail/privkey.pem \
-p 25:25 \
-p 143:143 \
-p 465:465 \
-p 587:587 \
-p 993:993 \
mailserver/docker-mailserver:latest
# Добавьте учетные записи с помощью команды: setup email add в .sh файле
docker cp /tmp/accounts-${mailserver_name}.sh ${mailserver_name}:/tmp/accounts.sh
docker exec -i ${mailserver_name} bash /tmp/accounts.sh
# Настройка DKIM
docker exec -i ${mailserver_name} setup config dkim
# Скопируйте директорию opendkim из /tmp в /etc, потому что иногда это не делается автоматически!
# Файл mail.private служит индикатором того, что это не сработало.
echo "Проверьте, скопирована ли папка /tmp/docker-mailserver/opendkim..."
if [ ! -f /etc/opendkim/keys/$domain/mail.private ]; then
docker exec -i ${mailserver_name} cp -ar --preserve=all /tmp/docker-mailserver/opendkim /etc
# Права должны быть установлены на opendkim
docker exec -i ${mailserver_name} chown -R opendkim:opendkim /etc/opendkim
echo "Настройка Docker не скопировала папку /etc/opendkim. Мы исправили это для вас!"
else
echo "Хорошие новости: файлы из папки opendkim уже существуют в /etc/opendkim"
fi
Ответ или решение
Когда вы сталкиваетесь с проблемой отсутствия совпадений в таблице подписей в OpenDKIM, важно учитывать ряд критических аспектов настройки. Эта ситуация может быть вызвана различными ошибками в конфигурации, и я предоставлю вам пошаговое руководство по их решению.
1. Проверка конфигурации OpenDKIM
1.1. Файлы конфигурации
Убедитесь, что ваши файлы конфигурации корректны. Ваша таблица ключей (KeyTable) и таблица подписей (SigningTable) имеют следующий вид:
KeyTable:
default._domainkey.mail.example.com mail.example.com:default:/etc/opendkim/keys/mail.example.com/default.private
SigningTable:
*@mail.example.com default._domainkey.mail.example.com
Убедитесь, что указанные пути к файлам существуют и имеют правильные разрешения. Файл default.private
должен быть доступен и иметь соответствующие права.
1.2. Доверенные хосты
Файл TrustedHosts также должен содержать подходящие записи. Обратите внимание, что в данном файле должна быть указана IP-адресация ваших серверов отправителей, а не их доменные имена. Пример:
127.0.0.1
192.168.1.10 # IP вашего почтового сервера
2. Настройка OpenDKIM.conf
Проверьте, чтобы конфигурационный файл /etc/opendkim.conf
содержал верные директивы. Важно добавить префикс refile: к настройке SigningTable, так как вы используете подстановочный символ "*".
SigningTable refile:/etc/opendkim/signing_table
KeyTable refile:/etc/opendkim/key_table
TrustedHosts /etc/opendkim/trusted_hosts
Также убедитесь, что Mode
установлен в значение sv (для подписи и проверки), а не просто v (только проверка).
3. Кодировки и форматирование файлов
При редактировании файла signing_table могут возникнуть проблемы, если в нем есть символы, специфичные для DOS (например, символы возврата каретки, CR). Это может вызвать ошибки при работе OpenDKIM. Используйте утилиту dos2unix
для конвертации файлов в формат Unix:
dos2unix /etc/opendkim/signing_table
4. Логи и диагностика
Регулярно проверяйте логи отправки почты, находятся ли там упоминания OpenDKIM. Это поможет вам понять, что происходит в процессе. Логи хранятся, как правило, в файле /var/log/maillog
.
5. Решение проблем с контейнерами
Если вы используете Docker, возможно, некоторые файлы не были корректно скопированы в контейнер. Убедитесь, что все необходимые файлы OpenDKIM присутствуют в нужных директориях и имеют верные права. Если необходимо, вручную скопируйте их, как указано в вашем скрипте.
6. Заключение и готовые решения
Если после проверки всех вышеуказанных пунктов проблема остается нерешенной, стоит также рассмотреть другие аспекты настройки вашего почтового сервера, связанные с DNS (например, наличие правильных записей DKIM в DNS-записях вашего домена).
Следуя данному руководству, вы значительно увеличите свои шансы на успешную настройку DKIM для вашего домена и сможете отправлять подписанные письма.