Sendmail: почта для локальных и нелокальных адресов

Sendmail: почта для локальных и нелокальных адресов

Мне нужно настроить конфигурацию почтового сервера для тестовой среды, которая будет принимать всю почту (т. е. для всех пользователей и всех доменов, даже нелокальных) и помещать ее в один локальный почтовый ящик для приема почты.

У меня SLES 11 с Sendmail (8.14), где я попытался изменить /etc/mail/virtusertable так, чтобы он выглядел так:

@ catchall

или как

@* catchall

но безрезультатно - адреса назначения почты (например,"[email protected]") не переписываются ввсеобъемлющий@, поэтому доставка будет произведена на соответствующий MX:

# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 [email protected]
canonify           input: santa @ northpole . org
Canonify2          input: santa < @ northpole . org >
Canonify2        returns: santa < @ northpole . org . >
canonify         returns: santa < @ northpole . org . >
parse              input: santa < @ northpole . org . >
Parse0             input: santa < @ northpole . org . >
Parse0           returns: santa < @ northpole . org . >
ParseLocal         input: santa < @ northpole . org . >
ParseLocal       returns: santa < @ northpole . org . >
Parse1             input: santa < @ northpole . org . >
MailerToTriple     input: < > santa < @ northpole . org . >
MailerToTriple   returns: santa < @ northpole . org . >
Parse1           returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
parse            returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >

Похоже, что подстановочные знаки не поддерживаются в части исходного домена таблицы поиска.

Как это реализовать с помощью Sendmail?

Редактировать:СогласноКомментарии АнджеяЯ попробовал запись в mailertable

. local:catch-all-outgoing

а также

.. local:catch-all-outgoing

и получили идентичный вывод sendmail -bvв обоих случаях:

# sendmail -d60.5 -bv [email protected]
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(host, example.net, %0=example.net) => example.net. (0)
[email protected]... deliverable: mailer esmtp, host example.net., user [email protected]

(да, root, так как sendmail, похоже, не может работать без прав root)

Редактировать:Оказалось, что функция mailertable не была включена в файле макроса, поэтому sendmail.cf не содержал соответствующих правил перезаписи для ее работы.

решение1

С чем вы здесь сталкиваетесь: /etc/mail/virtusertableЯ полагаю, что это касается только входящей электронной почты, а не исходящей.

Вы можете использовать маршрут по умолчанию в mailertable или SMART_HOST для доставки всех нелокальных сообщений на один локальный почтовый ящик/псевдоним.

mailertable entry:
. local:catch-all-outgoing

aliases:
catch-all-outgoing: some-local-account

Любая запись LHS, которая не начинается с точки, соответствует указанному полному имени хоста. Записи LHS, начинающиеся с точки, соответствуют всему, что заканчивается этим доменным именем (включая начальную точку) — то есть их можно рассматривать как имеющие начальный шаблон регулярного выражения ".+" для непустой последовательности символов.

RHS всегда должна быть парой "mailer:host". Почтовая программа — это имя конфигурации почтовой программы (то есть строка M в файле sendmail.cf). "host" будет именем хоста, переданным этой почтовой программе.

(ссылка:sendmail readme, раздел «ИСПОЛЬЗОВАНИЕ ПОЧТОВЫХ ТАБЛИЦ»)

Итак, что-то вроде:

. local:catch-all-outgoing(только одна точка согласноКомментарий Аджея) в /etc/mail/mailertable должен заставить любой domain.tld перенаправляться на локальную конфигурацию почтовой программы, определенную в sendmail.cf. С псевдонимом, перехватывающим имя хоста catch-all-outgoingи делающим его локальным адресом электронной почты.

Для работы mailertable его необходимо включить в конфигурации. Добавление

FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl

в файл макроса m4, генерирующий вашу конфигурацию, должен позаботиться об этом.

Также из файлов справки сайта sendmail:

ТАБЛИЦА ПОЧТОВЫХ ОТПРАВОК:

Включить «таблицу почтовой программы», которую можно использовать для переопределения маршрутизации для определенных доменов.(которые не входят в класс {w}, т.е. локальные имена хостов). Аргумент FEATURE может быть ключевым определением. Если ничего не указано, используется следующее определение:

хэш /etc/mail/mailertable

Ключами в этой базе данных являются полные доменные имена или частичные домены, которым предшествует точка, например, «vangogh.CS.Berkeley.EDU» или «.CS.Berkeley.EDU».Как частный случай последнего, «.» соответствует любому домену, не охваченному другими ключами.Значения должны иметь вид: mailer:domain

где "mailer" — это имя внутреннего почтового клиента, а "domain" — куда отправить сообщение. Эти карты не отражаются в заголовке сообщения.В качестве особого случая формы: local:user будут пересылаться указанному пользователю с использованием локальной почтовой программы,

решение2

Sendmail: почта для локальных и нелокальных адресов

Вы можете определить SMART_HOSTдля нелокальных доменов и MAIl_HUBдля локальных доменов электронной почты.

sendmail.mc:

define(`SMART_HOST',`local:some_existing_user')dnl
define(`MAIL_HUB',`local:some_existing_user')dnl
dnl optional part to list local users/mailboxes excluded from the redirect
dnl in /etc/mail/direct-users file (one user per line)
LOCAL_CONFIG
FL/etc/mail/direct-users
divert(0)

ПС

Используйте echo '$=w' | sendmail -btдля получения списка локальных доменов электронной почты. Sendmail по умолчанию заполняет его автоматически.

mailertable может использоваться для исключения некоторых внешних доменов из перенаправления

example.net %0

Связанный контент