Итак, фон на этом сервере: Я установил postfix / dovecot / spamassassin / opendkim на сервере Ubuntu 14.04, работающем на AWS. После того, как я немного выдернул волосы, все заработало. Почему, о почему, я просто не оставил эту чертову штуку в покое - ну, мы никогда не узнаем на это ответа. Я обновил его до Ubuntu 16.04, и после обновления все заработало! На всякий случай я сделал резервную копию, но для того, чтобы все заработало, требовалось всего одно изменение в одном файле конфигурации.
А потом, по какой-то необъяснимой причине, мой IP-адрес изменился (он должен быть статическим, у меня один и тот же IP-адрес уже более полутора лет).
Теперь, когда я пытаюсь отправить электронное письмо от Thunderbird, я получаю это в /var/log/mail.log:
Sep 4 14:03:19 ip-x-x-59-35 postfix/master[2746]: reload -- version 3.1.0, configuration /etc/postfix
Sep 4 14:03:30 ip-x-x-59-35 postfix/smtpd[2933]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled
Sep 4 14:03:30 ip-x-x-59-35 postfix/smtpd[2933]: connect from unknown[x.x.x.61]
Sep 4 14:03:30 ip-x-x-59-35 postfix/smtpd[2933]: warning: connect to Milter service unix:/opendkim/opendkim.sock: Connection refused
Sep 4 14:03:30 ip-x-x-59-35 postfix/smtpd[2933]: Anonymous TLS connection established from unknown[x.x.x.61]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Sep 4 14:03:30 ip-x-x-59-35 postfix/smtpd[2933]: NOQUEUE: reject: RCPT from unknown[x.x.x.61]: 550 5.7.25 Client host rejected: cannot find your hostname, [x.x.x.61]; from=<blanked> to=<blanked> proto=ESMTP helo=<[192.168.0.10]>
Sep 4 14:03:32 ip-x-x-59-35 postfix/smtpd[2933]: disconnect from unknown[x.x.x.61] ehlo=2 starttls=1 auth=1 mail=1 rcpt=0/1 quit=1 commands=6/7
Единственное место, где мой IP находится даже в файле конфигурации, было в /etc/postfix/main.cf, поэтому я зашел туда и обновил его (до x.x.x.0 / 24, как и раньше). Перезапустил postfix, но все еще не работает. Я также очень смущен тем, почему opendkim отказывается от соединения через сокет ...
Если кто-нибудь может дать некоторое представление, это было бы очень признательно. При необходимости я могу предоставить дополнительную информацию. Я изначально следил это руководство из четырех частей по настройке почтового сервера. Мои файлы конфигурации почти идентичны файлам из части 2 руководства.
EDIT: я начал просматривать журналы за последнюю неделю (до того, как эта проблема началась). Сокет opendkim уже некоторое время отказывает в подключении, но почтовый сервер все еще работал, пока это происходило. Я заметил существенную разницу в журналах, когда мой ноутбук подключается к серверу для отправки почты. Вот как это выглядело до смены IP:
Aug 29 17:03:43 ip-35 postfix/smtpd[22986]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled
Aug 29 17:03:43 ip-35 postfix/smtpd[22986]: connect from CPE00fc8d374753-CM00fc8d374750.cpe.net.cable.rogers.com[old.ip.138.5]
Aug 29 17:03:43 ip-35 postfix/smtpd[22986]: warning: connect to Milter service unix:/opendkim/opendkim.sock: Connection refused
Aug 29 17:03:43 ip-35 postfix/smtpd[22986]: Anonymous TLS connection established from **cpe00fc8d374753-cm00fc8d374750.cpe.net.cable.rogers.com**[old.ip.138.5]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Aug 29 17:03:43 ip-35 postfix/smtpd[22986]: 8931F80078: client=CPE00fc8d374753-CM00fc8d374750.cpe.net.cable.rogers.com[old.ip.138.5], sasl_method=PLAIN, sasl_username=username@website.com
Обратите внимание, как перед IP-адресом стоит имя хоста? Сейчас это отсутствует, и ошибка, которую он отправляет в Thunderbird, заключается в том, что он не может найти мое имя хоста. Я считаю, что при настройке сервера это был один из вариантов безопасности, который я включил. Я действительно не понимаю, как это исправить, не ставя под угрозу безопасность почтового сервера.
Кроме того, очень странная вещь opendkim. OpenDkim был единственной вещью, которую мне пришлось изменить после перехода на 16.04 - из-за перехода на systemctl (systemd) он создал новый файл для службы opendkim. По какой-то причине opendkim искал свой файл конфигурации в другом месте, поэтому я просто добавил аргумент к этому файлу .service, чтобы указать его на файл конфигурации /etc/opendkim.conf ... и он работал нормально. Я специально проверил, что он запускается и работает нормально. Так что я действительно ломаю голову.
Проблема действительно заключалась в том, что мой интернет-провайдер по какой-то странной причине не отправляет имя хоста вместе с моим IP-адресом на мой почтовый сервер, когда я отправляю электронное письмо. Итак, из-за smtpd_sender_restrictions и smtpd_recipient_restictions в /etc/postfix/main.cf он отказывался от неизвестных имен хостов.
Выглядело это так:
smtpd_recipient_restrictions = reject_unknown_client_hostname, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_invalid_hostname, reject_non_fqdn_sender
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch
Вы заметите, что приходит разрешение_mynetworks после reject_unknown_client_hostname. Чтобы исправить это, мне просто нужно было переместить allow_mynetworks в начало списка, а также добавить его в список sender_restrictions. В переменной mynetworks я указываю свой конкретный IP-адрес, а не заканчиваю его на .0, чтобы другие не могли отправлять (хотя им все равно понадобится мой пароль). Я не уверен, имеет ли этот переезд какие-либо серьезные проблемы с безопасностью, и если кто-нибудь сможет найти лучший способ решить эту проблему, я был бы очень признателен!
Фишка opendkim пока не работает, но это отдельная проблема.