Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||
www.lissyara.su
—> документация
—> EXIM
|
|
Если необходимо, вы можете использовать IP адрес умного хоста, вместо имени. Если вы используете exim лишь для передачи сообщений на умный хост, а не для получения входящих сообщений, вы должны принять меры для синхронизации подачи, путём установки опции
“mua_wrapper
” (смотрите главу 48).
47.2 Использование exim для обработки списков рассылки
Exim может быть использован для запуска простого списка рассылки, но для больших и/или сложных требований, рекомендуется использование дополнительного ПО для управления списками рассылки, типа Majordomo или Mailman.
“
Роутер redirect
” может быть использован для обработки списков рассылки, где каждый список поддерживается в отдельном файле, который, поэтому, может управляться независмыми манагерами. Опция
“domains
”, роутера, может использоваться для запуска этих списков в отдельных доменах, от нормальной почты. Например:
|
Этот роутер пропущен для доменов, иных нежели
“lists.example
”. Для адресов в этих доменах, он ищет файл, совпадающий с локальной частью. Если файла нет, роутер не выполняется, но, поскольку установлена
“no_more
”, последующие роутеры не проверяются, и вся доставка заканчивается неудачей.
“
Опции forbid_pipe
” и
“forbid_file
” предотвращают раскрытие локальной части в доставку в трубу или файл, которая, обычно, неуместна в списках рассылки.
“
Опция errors_to
” задаёт, что любые ошибки доставки, вызыванные адресами взятыми из списка рассылки, должны быть отосланы на заданный адрес, а не оригинальному отправителю сообщения. Однако, до этого действия, exim проверяет ошибочный адрес, и игнорирует, если его проверка неудачна.
“
Например, используя конфигурацию выше, почта посланная на dicts@lists.example
” - передаётся на адреса содержащиеся в
“/usr/lists/dicts
”, с направлением сообщений о ошибках на
“dicts-request@lists.example
”, при условии, что этот адрес может быть проверен. Также возможно, что тут мог бы быть файл с именем
“/usr/lists/dicts-request
”, содержащий адрес(а) манагер(a|ов) данного специфического списка, но иным подходом, типа установки более раннего роутера (возможно, использующего опции
“local_part_prefix
” или
“local_part_suffix
”) для обработки адресов в форме
“owner-xxx
” или
“xxx-request
”.
47.3 Синтаксические ошибки в списках рассылки
Если вхождение в данных перенаправления содержит синтаксическую ошибку, exim, обычно, задерживает доставку оригинального адреса. Это означает, что ошибка синтаксиса, в списке рассылки, задержит все доставки на этот список. Это может быть неподходящим, когда список обслуживается автоматически, из данных предоставленных пользователями, и адреса не проверены строго.
“
Если установлена опция skip_syntax_errors
”, роутер
“redirect
” просто пропускает вхождения, которые неможет распарсить, отмечая инцидент в логах. Если, дополнительно,
“syntax_errors_to
” установлена в адрес который можно проверить, сообщение посылается на него при каждом пропуске битого адреса. Обычно,
“syntax_errors_to
” устнавливается в тот же адрес, что и
“errors_to
”.
47.4 Повторное раскрытие списков рассылки
Exim запоминает каждый индивидуальный адрес, на который было доставлено сообщение, для избежания дублирования, но, обычно, он сохраняет лишь оригинальный адрес получателя, сообщения. Если все доставки на список рассылки не могут быть завершены в первую попытку, список рассылки раскрывается повторно, когда происходит следующая попытка доставки. Это означает, что изменения списка примаются во внимание при каждой попытке доставки, таким образом, адреса, которые были добавлены к списку с того времени как пришло сообщение, также получат копию сообщения, несмотря на то, что оно предшествовало их подписке.
“
Если такое поведение - нежелательно, в роутере redirect
” может быть установлена опция
“one_time
”. Если это сделано, любые сгенерированные роутером адреса, которые не удалось доставить при первой попытке, добавляются к сообщению как
“верхний уровень
” (
“top level
”) адресов, и, сгенеривший их родительский адрес, помечается как
“доставленный
” (
“delivered
”). Таким образом, раскрытие списков рассылки не происходит заново, в последующие попытки доставки. Неудобство этого, в том, что если любой неудачный адрес - некоректен, его исправление в файле не имеет эффекта для предыдущих сообщений.
“
Оригинальный адрес высшего уровня запоминается с каждым сгенерированным адресом, и выводится в логах. Однако, любые промежуточные родительские адреса - не записываются. Это делает различие для логов лишь если установлен селектор all_parents
”, но, так или иначе, для списков рассылки обычен лишь один уровень раскрытия.
47.5 Закрытые списки рассылки
Примеры, пока, предполагали открытые списки рассылки, в которые любой может послать почту. Также возможно настроить закрытые списки, где почта принимается лишь от специфических отправителей. Это производится путём использования общей опции
“senders
”, для ограничения роутера обрабатывающего список.
Следующий пример использует один и тот же файл как список получателей, и как список разрешённых отправителей. Он требует трёх роутеров:
|
Все три роутера имеют одну и ту же установку
“domains
”, таким образом, для любых других доменов, они пропущены. Первый роутер запускается лишь если локальная часть завершается на
“-request
”. Он обрабатывает сообщения к манагер(у|ам) списка, путём открытого списка рассылки.
“
Второй роутер запускается лишь если удовлетворено предварительное условие senders
”. Он проверяет существование списка соответствующего локальной части, и, затем, с помошью линейного поиска проверяет, что отправитель находится в списке. До попытки поиска по файлу, необходимо проверить его существование, поскольку иначе exim подумает, что произошла конфигурационная ошибка. Если файл не существует, раскрытие
“senders
” приводит к
“*
”, что соответствует всем отправителям. Это означает, что роутер работает, но, поскольку нет списка, от него отказываются, и
“no_more
” гарантирует, что дальнейшие роутеры не запускаются. Адрес неудачен с ошибкой
“unrouteable address
”.
Третий роутер запускатся лишь если второй роутер пропущен, что происходит когда список рассылки существует, но отправитель не в нём. Этот роутер принудительно создаёт неудачу адреса, давая подходящее сообщение о ошибке.
47.6 Переменные пути возврата конверта (VERP)
Variable Envelope Return Paths – смотрите http://cr.yp.to/proto/verp.txt - являются способом помочь администраторам списков рассылок обнаружить, какой адрес подписки является причиной специфической неудачи доставки. Идея - в кодировании оригинального получателя адреса в исходящем адресе отправителя конверта, таким образом, если сообщение форвардится путём другого хоста, и, впоследствии, создаётся рикошет, оригинальный получатель может быть извлечён из адреса получателя рикошета.
“
Адрес отправителя конверта может быть модифицирован exim`ом используя два различных средства: опцию errors_to
” в роутере (как показано в предыдущих примерах списков рассылки), или транспортную опцию
“return_path
”. Второй из них эффективен лишь если сообщение успешно доставлено не иной хост; она не используется, для ошибок детектируемых на локальном хосте (смотрите описание
“return_path
”в части 24). Вот - пример использования
“return_path
” для осуществления VERP в транспорте
“smtp
”:
|
Он имеет эффект перезаписи обратного пути (отправителя конверта) в исходящих SMTP сообщениях, если локальная часть оригинального получателя завершается на
“-request
”, и домен -
“your.dom.example
”. Перезапись вставляет локальную часть и домен получателя в путь возврата. Предположим, например, что сообщение, чей путь возврата установлен в
“somelist-request@your.dom.example
” - посылается на
“subscriber@other.dom.example
”. В транспорте, путь возврата переписывается как:
|
Чтобы это работало, вы должны сказать exim'y посылать несколько копий сообщений имеющих более одного получателя, чтобы каждая копия имела лишь одного получателя. Это достигается путём установки
“max_rcpt
” в 1. Без этого, одна копия сообщения может быть послана нескольким различным получателям в одном домене, когда
“$local_part
” недоступна в транспорте, поскольку она не уникальна.
“
Если ваш хост не только производит доставки списков рассылки, вы, вероятно, должны использовать отдельный транспорт для доставок VERP, чтобы не использовать дополнительные ресурсы для создания копий, по одной на получателя.. Это легко может быть сделано путём раскрытия опции transport
” в роутере:
|
Если вы хотите изменить путь возврата используя
“errors_to
” в роутере, вместо использования
“return_path
” в транспорте, вам необходимо установить
“errors_to
” во всех роутерах которые обрабатывают адреса списков рассылок. Это будет гарантировать, что все ошибки доставки, включая детектируемые на локальном хосте, посылаются на адреса VERP.
“
На хосте, который не делает локальных доставок, и не имет ручного роутинга, в изменении нуждается лишь роутер dnslookup
”. Для доставко SMTP не нужен специальный транспорт. Каждый получатель списка рассылки имеет свой собственный путь возврата, и, таким образом, exim должен передать их транспорту по одному. Вот - пример роутера
“dnslookup
”, который осуществляет VERP:
|
До того, как вы начнёте рассылать сообщения с VERP путём возврата, вы, также, должны сконфигурировать exim на приём рикошетов, которые возвращаются с таким путём. Обычно, это производится путём установки опции
“local_part_suffix
” для роутера, и использования этого для роутинга сообщения туда, где вы его хотели бы обработать.
Накладные расходы, при использовании VERP, очень сильно зависят от размера сообщения, числа получателей адресов, которые резольвятся на один и тот же удалённый хост, и скорости соединения, через которое посылается сообщение. Если много адресов резольвятся на один и тот же хост, и соединение медленное, посылка отдельной копии сообщения для каждого адреса может быть существенно дольше, чем посылка одной копии сообщения с многими получателями (что не может быть использоваться с VERP).
47.7 Виртуальные домены
Фраза
“virtual domain
”, к сожалению, используется для двух различных смыслов:
Домен, для которого нет реальных почтовых ящиков; все действительные локальные части - альясы для лругих почтовых адресов. Общие примеры - организационные домены верхнего урвоня, и
“тщеславные
” (
“vanity
”) домены.
Один из множества незавсимых доменов, которые обрабатываются одним и тем же хостом, с почтовыми ящиками на этом хосте, но, где владельцы почтовых ящиков не обязательно обладают аккаунтом логина на этом хосте.
Первое использование, вероятно, наиболее часто, и действительно, кажется более
“виртуальным
” чем второе. Этот вид доменов может быть обработан exim`ом прямым роутером альясов. Один подход состоит в создании отдельного файла альясов для каждого виртуального домена. Exim может проверять существование файла альясов, для определения - существует ли домен. Тут полезен тип поиска
“dsearch
”, приводя к роутеру такой формы:
|
Опция
“domains
” определяет, что роутер будет пропущен, если нет файла в директории
“/etc/mail/virtual
”, чьё имя такое же, как и обрабатываемый домен КОгда роутер работает, он ищет локальную часть в файле, для нахождения нового адреса (или списка адресов). Установка
“no_more
” обеспечивает, что если поиск неудачен (приводит к
“data
”, являющейся пустой строкой), exim оставляет адрес, не пробуя последующие роутеры.
“
Этот роутер может обрабатывать все вирутальные домены, поскольку имена файлов альясов следуют за фиксированым шаблоном. Разрешения могут быть разданы так, чтобы соответствующие люди могли редактировать различные файлы альясов. Успешная операция альясинга приводит к новому адресу получателя конверта, который, затем, роутится с начала.
Другой вид виртуальных
” доменов, также может быть обработан прямым методом.Один подход состоит в создании файла для каждого домена, содержащего список действительных локальных частей, и используется в роутере типа такого:
|
Адрес принимается если есть файл для домена, и локальная часть может быть найдена в файле. Опция
“domains
” используется для проверки на существование файла, поскольку
“domains
” проверяется до опции
“local_parts
” (смотрите секцию 3.12). Вы не можете использовать
“require_files
”, поскольку эта опция проверяется после
“local_parts
”. Транспорт - таков:
|
Он использует директорию почтовых ящиков для каждого домена. Установка
“user
” - требуется, для задания какой uid будет использоваться для записи в почтовые ящики.
Конфигурация показанная здесь - лишь один пример, как вы можете поддерживать это требование. Есть много других путей, которыми может быть настроен этот вид конфигурации, например, путём использования ВД вместо раздельных файлов, для хранения всей информации о доменах.
47.8 Многочисленные пользовательские почтовые ящики
Большие пользователи почты часто хотят работать с многими почтовыми ящиками, в которых входящая почта сортируется автоматически. Популярный способ обработать это - разрешить пользователям использовать несколько адресов отправителя, таким образом, ответы могут быть легко идентифицированы. Для этой цели, пользователям разрешают добавлять преффиксы или суффиксы к их локальным частям. Для этой цели могут быть использованы средства групповых символов общих опций роутера -
“local_part_prefix
” и
“local_part_suffix
”. Например, рассмотрите такой роутер:
|
Он запускает пользовательский файл
“.forward
” для всех локальных частей формы
“username-*
”. В пределах файла фильтра, пользователь может различать различные случаи путём проверки переменной
“$local_part_suffix
”. Например:
|
Если файл фильтра не существует, или не имеет дело с такими адресами, они передаются следующим маршрутизаторам, и, предполагая, что далее не используется опция
“local_part_suffix
”, они, по видимому, будут неудачны. Таким образом, пользователь может контролировать, какие суффиксы являются действительными.
“
Альтернативно, суффикс может использоваться для вызова другого файла .forward
” - который является способом воплощения подобного средства в другом MTA:
|
Если нет никакого суффикса, используется
“.forward
”; если суффикс -
“-special
”, например, используется
“.forward-special
”. Ешё раз, если соответствующий файл не существует, или не имеет дела с адресом, он передаётся последующим роутерам, которые, если требуется, ищут неполный файл
“.forward
” для использования как дефолтового.
47.9 Упрощённая обработка отпуска (vacation)
Традиционный способ запуска программы
“vacation
” для пользователей - установить команду трубы в файле
“.forward
” (для деталей синтаксиса, смотрите раздел 26.6). Это распространённая ошибка у неопытных пользователей. Есть две особенности exim`a, которые могут быть использованы для упрощения этого процесса для пользователей:
Преффикс локальной части, типа
“vacation-
”, может быть задан для в роутере, который используется для непосредственной доставки сообщений к программе
“vacation
”, или, альтернативно, может использоваться транспорт exim`a
“autoreply
”. Тогда, содержимое пользовательского файла
“vacation
”, намного более простое. Например:
|
Общая опция роутеров,
“require_files
”, может использоваться для вызова доставки отпуска (:) - прим. lissyara), путём проверки существования определённого файла в домашнем каталоге пользователя. Также должна использоваться общая опция
“unseen
”, для гарантии, что произойдёт оригинальная доставка. В этом случае, все использующие это пользователи, должны создать файл, называемый, скажем
“.vacation
”, содержащий сообщение о отпуске.
Другое преимущество обоих этих методов состоит в том, что они оба работают даже когда пользователям запрещено использование произвольных труб.
47.10 Отбор копий сообщений
Некоторые инсталляции требуют, чтобы была сделана полная архивная копия всех сообщений. Одна копия каждого сообщения может быть легко взята путём соответствующей команды в системном фильтре, который мог бы, например, использовать для каждого дня разные файлы.
Также, есть теневой транспортный механизм, который может использоваться для отбора копий сообщения, которые успешно доставлены локальными транспортами, одна копия на доставку. Это может использоваться, кроме прочего, для осуществления автоматического уведомления о доставке, сайтам (серверам - прим. lissyara) которые наставивают на таких вещах.
47.11 Периодически подключенные хосты
Для хостов, стало весьма обычным (опскольку дешевле), подключаться к интернету периодически, а не всё время быть подключенными. Обычная настройка для таких хостов - что поста для них накапливается на системе постоянно соединенённой с интернетом.
Exim был разработан для использованя на постоянно подключенных хостах, и, таким образом, не особенно подходит для использования на периодически подключаемых хостах. Однако, есть особенности, которые могут использоваться.
47.12 Exim на вышестоящих серверных хостах
Exim принимает меры, чтобы входящая почта для периодически подключаемых хостов оставалася в очереди exim`a, пока клиент не подключится. Однако, этот подход не очень хорошо масштабируется. Два различных вида ожидания сообщения смешиваются в одной очереди - те, которые нельзя доставить из-за каких-то вреемнных проблем, и тех, которые ждут соединения их хоста предназначения. Это делает тяжёлым управление очередью, так же как и растрату ресурсов, поскольку каждый обработчик очереди сканирует всю очередь.
“
Лучший подход состоит в отделении тех сообщений, которые ждут временно подключаемых хостов. Это может быть сделано путём доставки этих сообщений в локальные файлы пакетного SMTP, mailstore
”, или иной формат сохраняющий конверт, из которого они передаются путём иного программного обеспечения к их месту назначения. Это облегчает сборку всей почты для одного хоста в одной директории, и применения правил локального таймаута на основании сообщений, если требуется.
Для очень небольшого масштаба, можно сделать чтобы exim оставлял почту в очереди. Если вы это делаете, вы должны сконфигурировать exim с длинным периодом повтора для временно подключенных хостов. Например:
|
Этим останавливается множество неудачных попыток доставки, но exim запоминает какие сообщения находились в очереди для этого хоста. Как только непостоянный хост появляется в сети, принудительная доставка одного сообщения (или используя опции
“-M
” или
“-R
”, или путём использования команды ETRN SMTP (смотрите раздел 45.8)) вызывает доставку всех находящихся в очереди сообщений, часто - по одному соединению. Когда хост остаётся на связи, любые новые сообщения доставляются немедленно.
“
Если подключающиеся хосты не имеют фиксированного IP-адреса, т.е. хост появляется каждый раз с различным IP-адресом, механизмы повтора на хосте-владельце (почты - прим. lissyara) запутываются, поскольку IP-адрес, обычно, используется как часть ключевой строки для информации повторов. Этого можно избежать, путём сброса retry_include_ip_address
” в
“smtp
” транспорте. Так как это неудобно для хостов постоянно связанных с интернет, для периодически связанных хостов лучше организовать отдельный транспорт.
47.13 Exim на периодически подключаемом клиентском хосте
Значение
“smtp_accept_queue_per_connection
”, вероятно, должно быть увеличено, или даже установленов ноль (т.е. отключено) на периодически подключаемых хостах, для того, чтобы все входящие сообщения немедленно отсылались по одному соединению.
“
Почта ожидающая отсылки с периодически подключаемого хоста, вероятно, не будет роутится, поскольку без соединения с DNS, поиски невозможны. Это означает, что нормальная обработка очереди завершаетс за время соединения, каждое сообщение, вероятно, будет отправлено в отдельной SMTP-сессии. Этого можно избежать, путём запуска обработки очереди с опциями командной строки, начинающимися с -qq
” вместо
“-q
”. В этом случае, очередь сканируется дважды. В первый проход, завершается роутинг, но доставки не происходит. Во второй проход - нормальная обработка очереди; так как все сообщения предварительно были сроучены, то предназначенные для одного и того же хоста, вероятно, будут отосланы в одном SMTP соединении.
=============
translated by lissyara
verifying by Gerk
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK