I настроил OpenDkim для работы с postfix, и при попытке отправить почту я получаю следующую ошибку:
postfix/cleanup[11542]: 40F271A291A: milter-reject: END-OF-MESSAGE from ***[***]: 4.7.1 Service unavailable - try again later; from=<me@example.com> to=<me2@hotmail.es> 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 (а также другими рекомендациями по безопасности). Папки также принадлежат opendkim: mail.
Я использую один и тот же селектор и ключ подписи для всех доменов, это проблема?
Конфигурация постфикса выглядит следующим образом:
# 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
# Trusted Hosts List
127.0.0.1
::1
x.x.x.x # Server IP
mail.maindomain.com
# Domains
maindomain.com
domain2.com
В моем случае проблема заключалась в том, что у файла ключа подписи был root-владелец, поэтому я сделал следующее:
sudo chown opendkim:mail /etc/opendkim/selector.private
Исправил проблему.
Если это не ваша проблема, не забудьте взглянуть на журнал, для обоих! postfix и opendkim (я забыл найти opendkim, и это была ошибка):
journalctl --follow --unit postfix.service --unit opendkim.service
Попробуйте удалить "* @" из файла, который вы используете в качестве таблицы подписи. Это то, что было причиной этого для меня, хотя в моем opendkim.conf было
SigningTable refile:<directory to signing table file>
.
В моем случае исходящее сообщение было просто слишком большим.
После исправления проблемы я получил:
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
и перезапустил opendkimservice opendkim restart
(илиsystemctl restart opendkim
).
Установка ограничения в 256 КБ не помогло, потому что заголовок был больше, поэтому я установил 0, что отключает ограничение. Я мог бы снова прокомментировать строку, так как основная причина исчезла.
Заголовки, вероятно, были слишком большими из-за того, что вывод журнала был передан в sendmail без добавления заголовка.
Я добился этого вот так и не понял, что эта почта застряла.:
grep FILTER FILE | sendmail user@example.com
Чтобы правильно написать скрипт с помощью «sendmail», я сделал следующее::
#!/bin/bash
# TMP_FILE and SUBJECT are set somewhere in the script.
# Prepend the $SUBJECT to the script output sent by mail.
( echo "Subject: $SUBJECT" \
&& cat $TMP_FILE \
) | \
/usr/sbin/sendmail $1