
Мне нужно настроить конфигурацию почтового сервера для тестовой среды, которая будет принимать всю почту (т. е. для всех пользователей и всех доменов, даже нелокальных) и помещать ее в один локальный почтовый ящик для приема почты.
У меня 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