tgoop.com/srv_admin/4594
Last Update:
Почтовый сервер postfix позволяет очень гибко управлять транспортом почты во всех направлениях. Меня не раз спрашивали, можно ли сделать так, чтобы на какой-то домен почта не отправлялась, но при этом клиент во время отправки не получал никакой ошибки. То есть он как-будто всё отправил, но письмо реально не ушло.
Я так сходу не придумал как это сделать стандартными средствами postfix без костылей. У него есть настройка smtpd_recipient_restrictions, где можно управлять разрешениями для получателей. Там можно явно указать, что для конкретного домена отправка запрещена. Но клиент при попытке отправить туда письмо, получит обратное письмо с ошибкой на тему того, что это запрещено.
Это не всегда удобно. Можно подумать, что это нужно для того, чтобы ввести в заблуждение пользователя почты, чтобы он не знал, что письмо реально не доставлено. Но на самом деле нет. Это чаще всего нужно не для этого. Например, может быть софт, который делает какие-то отправки по определённому набору доменов. И отправлять ему можно только туда. Если в его список рассылки по какой-то причине попадут другие домены, а вы настроите smtpd_recipient_restrictions, то его завалит обратными письмами с ошибками.
В общем, ситуации бывают разные. Расскажу, как всё это можно настроить встроенными инструментами postfix. Он будет отправлять письма только разрешённым доменам или наоборот, запретит отправку на какие-то домены, но при этом отправляющий будет думать, что всё ОК, обратного письма с ошибкой он не получит. При этом в логе postfix будет явно видно, что письмо не было отправлено.
Настраиваем параметр transport_maps, добавляя в /etc/postfix/main.cf
:transport_maps = hash:/etc/postfix/transport_map
Создаём файл /etc/postfix/transport_map
следующего содержания:example.com discard: Not allowed destination
Создаём индексированный файл и перечитываем конфигурацию:# postmap /etc/postfix/transport_map
# postfix reload
Теперь при отправке письма на домен example.com клиент не получит никакой ошибки. Он будет считать, что письмо нормально отправлено. При этом в логе postfix это отразится вот так:2025-05-06T11:41:29.689884+03:00 mailsrv postfix/discard[3974535]: 887AA11B319: to=<[email protected]>, relay=none, delay=0.18, delays=0.17/0.01/0/0, dsn=2.0.0, status=sent (Not allowed destination)
Отправки реально не было, так как relay=none
. Можно сделать и обратную ситуацию. Отменить отправку на все домены, кроме example.com. Тогда файл transport_map
будет выглядеть так:example.com :
* discard: Not allowed destination
Для example.com обычная доставка, для всех остальных - discard. Поясню, как это работает. Данный параметр я знаю давно и активно использую. Пример файла transport_map
из моей практики:websrv.site.ru local
backupmail.ru relay:[backupmail.ru]:25
* relay:[smtp.yandex.ru]:465
Первый домен websrv.site.ru используется как локальный. Вся почта для этого домена отправляется только локально в рамках данного сервера. Второй домен backupmail.ru используется для бэкапа всей корреспонденции. Ящики из этого домена настроены как сборщики копий через bcc_maps всей входящей и исходящей почты. Третья строчка указывает отправлять всю остальную почту через smtp сервер Яндекса.
Подробно я эту тему рассматривал в отдельной статье:
⇨ Postfix - выбор сервера для отправки в зависимости от получателя
Там как раз рассматривается параметр transport_maps, но не в контексте задачи скрытого запрета отправки писем. Для запрета мы просто указали соответствующий транспорт - discard, вместо relay. И письма в итоге не отправляются.
Если у кого-то есть вопросы по настройке postfix, можете задавать в комментариях. Попробую подсказать. Я много всего обычного и не очень настраивал на postfix.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#postfix
BY ServerAdmin.ru

Share with your friend now:
tgoop.com/srv_admin/4594