Мы запускаем небольшой почтовый сервер postfix (и dovecot) для ряда размещенных доменов, используя виртуальные карты псевдонимов и настроенный spamassassin.
Недавно стало очевидно, что мы генерируем обратное рассеяние; электронные письма со спамом поступают на несуществующие адреса электронной почты и возвращаются поддельному отправителю. Это, очевидно, проблема с точки зрения репутации нашего почтового сервера, а также означает, что мы рассылаем спам от имени спамеров.
Что я хочу сделать, так это изменить поведение постфикса, чтобы вместо создания формы сообщения электронной почты о недоставке MAILER-DAEMON сообщение отклонялось во время транзакции SMTP.
Я пробовал добавить local_recipient_maps (http://www.postfix.org/LOCAL_RECIPIENT_README.html), но это не имело значения. Я думаю, это потому, что я использую virtual_alias_maps (и другие решения для виртуальных почтовых ящиков, похоже, здесь тоже не применимы).
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
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 0
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = verrotech.com
myhostname = mail.verrotech.com
newaliases_path = /usr/bin/newaliases.postfix
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_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/mail.domain.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.domain.com/privkey.pem
smtpd_tls_security_level = may
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
Спасибо.
После некоторого исследования ваш вопрос заставил меня понять, что у меня была такая же проблема на моем почтовом сервере, поэтому, прежде всего, спасибо.
Во-вторых, обратите внимание, что по умолчанию postfix блокирует такой трафик. В руководстве smtpd_reject_unlisted_recipient:
smtpd_reject_unlisted_recipient (по умолчанию: да)
Запросить, чтобы SMTP-сервер Postfix отклоняет почту для неизвестных адресов получателей, даже если не указано явное ограничение доступа reject_unlisted_recipient. Это предотвращает заполнение очереди Postfix недоставленными сообщениями MAILER-DAEMON.
Итак, почему вы получаете 250 OK
для писем неизвестного назначения? Из-за этих строк:
mydestination = $ myhostname, localhost. $ mydomain, localhost
virtual_alias_maps = хеш: / и т.д. / постфикс / виртуальный
В smtpd_reject_unlisted_recipient
проверяет почту назначения, но очень конкретно:
Адрес всегда считается "известным", если он соответствует виртуальному (5) псевдониму или каноническому (5) отображению.
The recipient domain matches $mydestination, $inet_interfaces or $proxy_interfaces, but the recipient is not listed in $local_recipient_maps, and $local_recipient_maps is not null. The recipient domain matches $virtual_alias_domains but the recipient is not listed in $virtual_alias_maps. The recipient domain matches $virtual_mailbox_domains but the recipient is not listed in $virtual_mailbox_maps, and $virtual_mailbox_maps is not null. The recipient domain matches $relay_domains but the recipient is not listed in $relay_recipient_maps, and $relay_recipient_maps is not null.
Как твой mydestination
не включает ваш $mydomain
(только имя сервера и локальный хост), а у вас нет *_domains
на месте нет никаких других проверок для "известных" мест назначения.
Вам нужно только добавить:
virtual_alias_domains = $ mydomain
постфикс перезагрузки. (Если я правильно понимаю вашу конфигурацию и вся ваша почта находится в форме "user@domain.com")
Если это не сработает, вы можете попробовать следующее:
smtpd_recipient_restrictions = allow_mynetworks, reject_unauth_destination, reject_unverified_recipient
ПРИМЕЧАНИЕ: он будет проверять через RCPT TO
команда, если место назначения действительно существует для обоих входящий и исходящий Сообщения. Используйте с осторожностью поскольку он устанавливает дополнительное соединение для каждого нового пункта назначения, и ему потребуется некоторое время, чтобы ответить на каждое сообщение, которое обрабатывает ваш сервер (проверка каждого пункта назначения может занять несколько секунд).
Это не совсем то, что вы просили, но именно так я решил эту проблему для своих собственных вариантов использования.
Отказ от отказов:
В /etc/postfix/main.cfg у меня есть:
2bounce_notice_recipient = devnull
bounce_notice_recipient = devnull
bounce_queue_lifetime = 0d
delay_warning_time = 0h
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
В / etc / postfix / aliases у меня есть:
devnull: /dev/null
Потом бегу:
postmap aliases
postfix reload
Конечным результатом является то, что отказы попадают в / dev / null. Он может не уловить их всех, поэтому YMMV. Пожалуйста, дайте мне знать, работает ли это для вас.