
Я настроил почтовый сервер с Postfix, Roundcube и Dovecot. Все работает хорошо - почти.
В моей стране есть популярный бесплатный почтовый сервис под названием inbox.lv. И у них установлено правило против спама, что когда новый сервер пытается отправить им письма, они сначала добавляют его в серый список на 10 минут и требуют, чтобы сервер повторно отправил письмо. Достаточно справедливо.
Однако при использовании Postfix для отправки исходящих писем (из Roundcube или Thunderbird) он не ставит сообщение в очередь. Вместо этого он немедленно возвращается с ошибкой. Также есть запись в журнале (новые строки/пробелы добавлены мной для удобства чтения; IP и адреса электронной почты отредактированы для конфиденциальности):
May 31 23:17:18 21 postfix/smtpd[24814]: NOQUEUE: reject: RCPT from unknown[MY.IP.ADDRESS.HERE]:
450 4.1.1 <[email protected]>: Recipient address rejected: unverified address:
host mx1.inbox.lv[194.152.32.74] said: 450 4.7.1 <unknown[SERVER.IP.ADDRESS.HERE]>:
Client host rejected: greylisted, please retry in 597 seconds (in reply to RCPT TO command);
from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.1.216]>
Все настройки очереди оставлены по умолчанию. Версия Postfix — 2.10.1.
Почему это происходит и как заставить Postfix ставить сообщения в очередь и повторять попытку через 10 минут?
Добавлен:Конфигурация Postfix (анонимная):
[root@myserver etc]# postconf mail_version
mail_version = 2.10.1
[root@myserver etc]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 100000000
milter_default_action = accept
mydestination = localhost
mydomain = mydomain.lv
myhostname = mydomain.lv
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = $smtpd_milters
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_milters = inet:127.0.0.1:8891
smtpd_recipient_restrictions = reject_unverified_recipient
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mydomain.lv/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mydomain.lv/privkey.pem
smtpd_tls_security_level = may
unknown_local_recipient_reject_code = 550
virtual_mailbox_domains = d1.lv d2.lv d3.lv d4.lv
virtual_mailbox_limit = 0
virtual_transport = lmtp:unix:/var/run/dovecot/lmtp
[root@myserver etc]# postconf -M
smtp inet n - n - - smtpd
submission inet n - n - - smtpd
smtps inet n - n - - smtpd
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
[root@myserver etc]#
решение1
Вы настроили Postfix для подключения к удаленным пунктам назначения, чтобы запросить у них информацию о получателях — как обязательное условиедовы принимаете все, что угодно, в свою местную очередь.
smtpd_recipient_restrictions =
reject_unverified_recipient
На почтовом сервере общего назначения это недопустимо ни для чего.нодомены, находящиеся под вашим контролем или с операторами которых у вас есть соглашение.
Запрос удаленных серверов о наличии определенных пользователей без доставки писем заставит довольно много серверов отказаться от взаимодействия с вами. Не зная, что вы отправите, они не смогут легко определить, являетесь ли вы спамером, пытающимся отмыть список своих следующих жертв, или тем, кто собирается доставить почту.
Самое простое изменение для устранения этой проблемы и решения вашей первоначальной проблемы:
smtpd_recipient_restrictions =
permit_sasl_authenticated
,
reject_unauth_destination
, reject_unverified_recipient
Поскольку ограничения обрабатываются в указанном порядке, это исключает ваших аутентифицированных пользователей и не связанные с ними запросы на ретрансляцию (отклоняемые в любом случае). Таким образом, вы по-прежнему можете применять меры reject_unverified_recipient
для входящих сообщений (где dovecot, предположительно, подтвердит адреса без задержки). Но без надоедливых удаленных серверов о получателях, для которых в данный момент у вас еще нет почты. Однако вам придется сделать что-то более сложное, если вы хотите, чтобы эта функция также была включена для ваших пользователей, пишущих сообщения друг другу. Файл ADDRESS_VERIFICATION_README в вашей документации postfix... хотя и старый, но все равно должен дать вам общий обзор.
Я обычно рекомендую использовать master.cf (который поставляется с подходящими шаблонами, по крайней мере в последнее время) для настройки частично разделенных экземпляров smtpd, один на порту 25 для общего использования в Интернете, один на порту 465 для обязательно аутентифицированных пользовательских представлений. Таким образом, вы можете разумно поддерживаемым образом применять различные правила для каждой службы, еще больше упрощая задачу обработки ретрансляционного трафика, отличного от входящего трафика.