RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
YandexMoney: 
41001198119846 
E-gold:
5128052

Перевод выполнен Алексеем Паутовым в рамках некоммерческого проекта RussianLDP (http://www.rldp.ru/). Именно на этом сайте и надлежит искать новые версии, если таковые будут.

15. Общие опции для роутеров

Эта глава описывает общие опции, применяемые ко всем роутерам. Те, которые являются предварительными условиями, помечены символом "‡", в поле "использование".

Для общего описания, как работает маршрутизатор, смотрите разделы 3.10 и 3.12. Последний определяет порядок в котором проверяются предварительные условия. Порядок раскрытия опций, которые предоставляют данные для транспортов, таков: errors_to, headers_add, headers_remove и transport.
Имя Использование Тип Значение по умолчанию
address_data routersstring† не задана

Строка раскрывается лишь до запуска роутера, то есть после успешного прохождения всех тестов предварительных условий. Если раскрытие принудительно неудачно, роутер отклоняется, значение address_data остаётся неизменённым, и опция more контролирует, что происходит дальше. Другие ошибки раскрытия вызывают задержку доставки адреса. Когда раскрытие успешно, значение сохраняется вместе с адресом и может быть доступно использованием переменной $address_data в текушем роутере, последующих маршрутизаторах и возможном окончательном транспорте.

Предупреждение: если текущий или последующий роутер redirect, выполняющий файл фильтра пользователя, содержимое $address_data доступно в фильтре. Обычно это не проблема, поскольку эти данные не конфиденциальны или принадлежат текущему пользователю, но если Вы помещаете конфиденциальные данные в $address_data, Вы должны помнить об этом пункте.

Даже если маршрутизатор отклоняется или принимается, значение $address_data остаётся с адресом, хотя оно может быть изменено путём установки иной $address_data в последующем маршрутизаторе. Если роутер генерирует дочерние адреса, значение $address_data размножается на них. Также это применяется к специальному виду "детей", которые генерируются роутерами с опцией unseen.

Идея address_data в том, что Вы можете использовать её для поиска большого количества данных за раз и позднее выбирать части данных. Для примера, Вы можете использовать один поиск в LDAP для возврата строки формы:
uid=1234 gid=5678 mailbox=/mail/xyz forward=/home/xyz/.forward

В транспорте Вы могли бы выбрать почтовый ящик установкой типа:
file = ${extract{mailbox}{$address_data}}

Это делает конфигурационный файл менее грязным, а также уменьшает число поисков (хотя exim кэширует поиски). Средство address_data также полезно как средство передачи информации от одного роутера к другому и от роутера к транспорту. Когда address_data установлена роутером при проверке адреса получателя из ACL, она остаётся доступной для использования в остальной части утверждения ACL. После проверки отправителя значение передаётся в $sender_address_data.
Имя Использование Тип Значение по умолчанию
address_test routers‡boolean истина

Если эта опция установлена в ложь, маршрутизатор пропускается, когда роутинг тестируется при помощи опции командной строки -bt. Это может быть удобным, когда первый роутер посылает сообщения на внешний сканер, поскольку он сохраняет необходимость установки индикатора already scanned при тестировании реальной маршрутизации адреса.
Имя Использование Тип Значение по умолчанию
cannot_route_message routersstring† не задана

Эта опция определяет текстовое сообщение используемое, когда адрес не может быть маршрутизирован, поскольку exim исчерпал все маршруты. Сообщение по умолчанию: "Unrouteable address". Эта опция полезна лишь в роутерах, где опция more установлена в ложь, или последнем роутере конфигурации, поскольку используемое значение берётся из последнего просматриваемого роутера. Она включает роутеры, которые были пропущены, поскольку не соответствовали их предварительные условия, также как и отклоняемые маршрутизаторы. Например, используя конфигурацию по умолчанию, Вы могли бы поместить:
cannot_route_message = Remote domain not found in DNS
в первом роутере, являющемся роутером dnslookup, с опцией more установленной в ложь, и
cannot_route_message = Unknown local user
в последнем роутере, где проверяются локальные пользователи. Если раскрытие строки этой опции неудачно, используется сообщение по умолчанию. Если ошибка раскрытия не была неудачной принудительно, сообщение об ошибке пишется в протоколы главный и паники, в дополнение к обычному сообщению об ошибке маршрутизации.
Имя Использование Тип Значение по умолчанию
caseful_local_part routersboolean ложь

По умолчанию роутеры обрабатывают локальную часть адреса в регистронезависимой манере, хотя фактический регистр сохраняется для передачи с сообщением. Если Вы хотите, чтобы регистр букв был важен в роутере, Вы должны установить эту опцию в истину. Для индивидуальных опций роутера, которые содержат адреса или списки локальных частей (например, local_parts), сравнение с учётом регистра может быть включено путём "+caseful", как элемента списка. Смотрите раздел 10.19 для изучения дополнительных деталей.

Значение переменной $local_part принудительно приводится к нижнему регистру, когда роутер запущен без установленной опции caseful_local_part. Когда роутер назначает адрес на транспортировку, когда транспорт выполняется, значение $local_part такое же. Точно так же, когда роутер генерирует дочерний адрес путём алиасинга или форвардинга, значения $original_local_part и $parent_local_part те, которые использовались роутером редиректа.

Эти опции применяются к обработке адресов роутером. Когда адрес получателя обрабатывается в ACL, есть отдельный модификатор control, который может использоваться для задания регистрозависимой обработки в пределах ACL (смотрите раздел 39.38 ).
Имя Использование Тип Значение по умолчанию
check_local_user routers‡boolean ложь

Когда эта опция истинна, exim проверяет, что локальная часть адреса получателя (с удалёнными префиксами, если они есть) представляет собой имя учётной записи в локальной системе. Проверка производится путём вызова функции getpwnam() вместо попытки напрямую прочитать /etc/passwd. Это означает, что другие методы проверки данных пароля (типа NIS) также поддерживаются. Если локальная часть задает локального пользователя, переменная $home устанавливается из данных пароля и может быть проверена в других предварительных условиях, оцениваемых после этого (порядок оценки даётся в разделе 3.12). Однако, значение $home может быть перезадано router_home_directory. Если локальная часть не локальный пользователь, роутер пропускается.

Если Вы хотите проверить, что локальная часть является именем пользователя или совпадает с чем-то ещё, Вы не можете объединять check_local_user с установкой local_parts, поскольку это определяет логическое "и" этих условий. Однако, Вы можете использовать поиск passwd в установке local_parts для достижения этого. Например:
local_parts = passwd;$local_part : lsearch;/etc/other/users

Отметьте, однако, что побочные эффекты check_local_user (типа установки домашнего каталога) не происходят, когда поиск passwd используется в local_parts (или любых других) предварительных условиях.
Имя Использование Тип Значение по умолчанию
condition routers‡string† не задана

Эта опция определяет главный тест предварительного условия, который должен быть успешным для вызова роутера. Опция condition задает последнее предварительное условие для оценки (смотрите раздел 3.12). Строка раскрывается, и если результат принудительно неудачен, пустая строка или одна из строк "0", "no", "false" (проверяется без учёта регистра), роутер пропускается, и адрес предлагается следующему.

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

Опция condition предоставляет средство применения персональных условий для запуска роутеров. Отметьте, что в случае простого раскрытия, значение по умолчанию раскрытия именно то, что требуется, например:
condition = ${if >{$message_age}{600}}

Из-за поведения раскрытия строки по умолчанию это эквивалентно:
condition = ${if >{$message_age}{600}{true}{}}

Если раскрытие неудачно (кроме принудительной неудачи), доставка отсрочена. Некоторые другие опции предварительных условий и общие специальные случаи, которые могли быть фактически определены, используя condition.
Имя Использование Тип Значение по умолчанию
debug_print routersstring† не задана

Если эта опция установлена, и отладка включена (смотрите опцию командной строки -d), строка раскрывается и включается в отладочный вывод. Если раскрытие строки неудачно, сообщение о ошибке записывается в отладочный вывод, и exim продолжает обработку. Эта опция предоставлена для помощи в проверке значения переменных и т.п. при отладке конфигурации роутера. Например, если кажется, что опция condition не работает, debug_print может использоваться для вывода ссылающихся на неё переменных. Вывод происходит после проверки domains, local_parts и check_local_user, но до проверки любых других предварительных условий. Новая строка добавляется к тексту, если она не оканчивается этим символом.
Имя Использование Тип Значение по умолчанию
disable_logging routersboolean ложь

Если эта опция установлена в истину, ничего не протоколируется для любых ошибок маршрутизации или доставок, вызванных этим маршрутизатором. Вы не должны устанавливать эту опцию, если не понимаете, что делаете. Также смотрите общую опцию транспортов с тем же именем.
Имя Использование Тип Значение по умолчанию
domains routers‡ domain list†не задана

Если эта опция установлена, роутер пропускается, когда текущий домен не совпадает со списком. Если совпадение произошло путём поиска по файлу, данные, возвращённые поиском для домена, помещаются в $domain_data для использования в раскрытиях строки частных опций драйвера. Смотрите раздел 3.12 для получения списка, в каком порядке оцениваются предварительные условия.
Имя Использование Тип Значение по умолчанию
driver routersstring не задана

Эта опция всегда должна быть установлена. Она определяет, какой из доступных маршрутизаторов должен использоваться.
Имя Использование Тип Значение по умолчанию
errors_to routersstring† не задана

Если роутер успешно обрабатывает адрес, он может назначить адрес на транспорт для доставки или сгенерировать дочерний адрес. В обоих случаях, если происходят проблемы доставки в более поздних процессах обработки, результирующее сообщение рикошета посылается по адресу, являющемуся результатом раскрытия этой строки, при условии успешной проверки адреса. Опция errors_to раскрывается до headers_add, headers_remove и transport. Установка errors_to, связанная с адресом, может быть перезадана при последующем прохождении через другие маршрутизаторы, обладающие своими настройками errors_to, или если сообщение доставляется транспортом с установкой return_path.

Если errors_to не задана, раскрытие принудительно неудачно или ошибка при проверке результата раскрытия, используется адрес для ошибок, связанный с входящим адресом. На верхнем уровне это отправитель конверта. Непринудительная ошибка раскрытия вызывает задержку доставки. Если адрес, для которого установлена errors_to, завершается передачей через SMTP, отправитель конверта для этой доставки значение errors_to, таким образом, любые рикошеты, сгенерированные другими MTA на маршруте доставки, шлются туда же. Вы можете установить errors_to в пустую строку любой из этих установок:
errors_to =
errors_to = ""

Элемент раскрытия, приводящий к пустой строке, имеет тот же эффект. Если Вы так делаете, локально обнаруженная ошибка доставки для адресов, обработанных этим роутером, не даёт начала рикошету: от ошибки отказываются. Если адрес доставляется на удалённый хост, путь возврата устанавливается в "<>", если это не отменяется опцией return_path в транспорте.

Если по каким-то причинам Вы хотите отказаться от локальных ошибок, но использовать непустую команду MAIL для удалённой доставки, можете сохранить оригинальный обратный путь в $address_data роутера и восстановить его в транспорте установкой return_path.

Самое общее использование errors_to: прямой список рассылки рикошетов к менеджерам списка, как описано в разделе 46.1, или для осуществления VERP (Variable Envelope Return Paths, смотрите раздел 46.6).
Имя Использование Тип Значение по умолчанию
expn routers‡boolean истина

Если эта опция выключена, роутер пропускается когда тестируется адрес как результат обработки команды SMTP EXPN. Вы могли бы, например, захотеть включить её на роутере для пользовательских файлов .forward, когда оставляете их для файлов системных псевдонимов. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия.

Использование команды SMTP EXPN контролируется путём ACL (смотрите раздел 39). Когда exim запускается командой EXPN, это подобно проверке адреса с -bt. Сравните с VRFY, дубликат которой -bv.
Имя Использование Тип Значение по умолчанию
fail_verify routersboolean ложь

Установка этой опции создаёт эффект установки обоих опций fail_verify_sender и fail_verify_recipient в то же значение.
Имя Использование Тип Значение по умолчанию
fail_verify_recipient routersboolean ложь

Если эта опция установлена в истину, и адрес принимается этим роутером, когда проверяется получатель, проверка будет неудачна.
Имя Использование Тип Значение по умолчанию
fail_verify_sender routersstring list не задана

Если эта опция установлена в истину, и адрес принимается этим роутером, когда проверяется отправитель, проверка будет неудачна.
Имя Использование Тип Значение по умолчанию
fallback_hosts routersstring list не задана

Раскрытие строки не применяется к этой опции. Аргумент должен быть списком имён хостов или IP-адресов, разделённых двоеточиями. Разделитель списка может быть изменён (смотрите раздел 6.19), порт может быть задан с каждым именем или адресом. Фактически, формат каждого элемента, точно такой же, как в списке хостов роутера manualroute (смотрите раздел 20.5).

Если роутер стоит в очереди на адрес для удалённого транспорта, этот список хостов ассоциирован с адресом и используется вместо запасного списка хостов транспорта. Если hosts_randomize установлена в транспорте, порядок списка случаен для каждого использования. Смотрите опцию fallback_hosts транспорта snmp для дальнейших деталей.
Имя Использование Тип Значение по умолчанию
group routersstring† смотрите ниже

Когда роутер стоит в очереди на адрес для транспорта, а транспорт не определяет группу, используется группа, заданная тут, когда работает процесс доставки. Группа может быть задана в цифровой форме или по имени. Если раскрытие неудачно, ошибка протоколируется, а доставка задерживается. По умолчанию она не задана, если не установлена check_local_user, когда значение по умолчанию берётся из информации о пароле. Также смотрите initgroups, user и обсуждение в главе 23.
Имя Использование Тип Значение по умолчанию
headers_add routersstring† не задана

Эта опция задаёт строку текста, который раскрывается во время маршрутизации, и ассоциирован с любым адресом, который принят роутером. Однако, эта опция не имеет никакого эффекта, когда адрес лишь проверяется. Способ, которым используется текст для добавления строк заголовков в транспорте, описан в разделе 43.17 . Фактически новые строки заголовков не добавлены, пока сообщение в процессе транспортировки. Это означает, что ссылки на строки заголовков в раскрытиях строк в конфигурации транспорта продолжают видеть оригинальные заголовки и не видят добавленные.

Опция headers_add раскрывается после errors_to, но до headers_remove и transport. Если раскрытая строка пуста, или если раскрытие принудительно неудачно, опция не имеет эффекта. Другие ошибки раскрытия обрабатываются как ошибки конфигурации.

Предупреждение 1: опция headers_add не может использоваться для роутера redirect, в котором установлена опция one_time.

Предупреждение 2: если в роутере установлена опция unseen, все дополнения заголовков удаляются при передаче следующему роутеру.
Имя Использование Тип Значение по умолчанию
headers_remove routersstring† не задана

Эта опция задаёт строку текста, который раскрывается во время маршрутизации, и ассоционирован с любым адресом, который принят роутером. Однако, эта опция не имеет никакого эффекта, когда адрес лишь проверяется. Способ, которым используется текст для удаления строк заголовков в транспорте, описан в разделе 43.17. Фактически строки заголовков не удалены, пока сообщение в процессе транспортировки. Это означает, что ссылки на строки заголовков в раскрытиях строк в конфигурации транспорта продолжают видеть оригинальные заголовки (то есть, видят удалённые).

Опция headers_remove раскрывается после errors_to и headers_add, но до transport. Если раскрытие принудительно неудачно, опция не имеет эффекта. Другие ошибки раскрытия обрабатываются как ошибки конфигурации.

Предупреждение 1: опция headers_remove не может использоваться для роутера redirect, в котором установлена опция "one_time.

Предупреждение 2: если в роутере установлена опция unseen, все запросы на удаление заголовков удаляются при передаче следующему роутеру.
Имя Использование Тип Значение по умолчанию
ignore_target_hosts routershost list† не задана

Хотя эта опция задает список хостов, обычно она содержит IP-адреса, а не имена. Если любой хост, который ищется роутером, имеет IP-адрес, совпадающий с элементом этого списка, exim ведёт себя так, будто этот IP-адрес не существует. Эта опция позволяет Вам справляться с мошенническими DNS-записями, типа:
remote.domain.example.A 127.0.0.1
устанавливая такую настройку:
ignore_target_hosts = 127.0.0.1
на релевантном роутере. Если все хосты, найденные роутером dnslookup забракованы таким образом, роутер отклоняется. В обычной конфигурации попытка отправки почты на такой домен обычно вызывает ошибку unrouteable domain, а попытка проверить адрес в домене будет неудачной. Точно так же, если в роутере ipliteral установлена опция ignore_target_hosts, роутер отклоняется, если представлен один из перечисленных адресов.

Вы можете использовать эту опцию для отключения использования IPv4 или IPv6 для доставки почты путём первого или второго параметра настройки, сответственно:
ignore_target_hosts = 0.0.0.0/0
ignore_target_hosts = <; 0::0/0

Шаблон в первой строке совпадает со всеми адресами IPv4, тогда как шаблон во второй строке совпадает со всеми адресами IPv6. Эта опция также может быть полезна для игнорирования локальных связей и локальных сайтов адресов IPv6. Поскольку, как и все списки хостов, значение ignore_target_hosts раскрывается до использования в качестве списка, можно сделать его зависимым от маршрутизируемого домена. В процессе раскрытия $host_address устанавливается в проверяемый IP-адрес.
Имя Использование Тип Значение по умолчанию
initgroups routersboolean ложь

Если роутер стоит в очереди на адрес для транспорта, эта опция истинна и uid, предоставленный роутером не перезадан транспортом, при работе транспорта вызывается функция initgroups() для гарантии, что установлены любые дополнительные группы, ассоциированные с uid. Также смотрите обсуждение group и user в главе 23.
Имя Использование Тип Значение по умолчанию
local_part_prefix routers‡string list не задана

Если эта опция установлена, роутер пропускается, если локальная часть не начинается с одной из заданных строк, или если local_part_prefix_optional истинна. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия.

Список сканируется слева направо и используется первый совпавший префикс. Доступна ограниченная форма подстановочных знаков: если префикс начинается со звёздочки, он совпадает с самой длинной последовательностью символов в начале локальной части. Поэтому звёздочка всегда должна сопровождаться каким-то символом, который не встречается в нормальных локальных частях. Подстановочные символы могут использоваться для установки многопользовательских почтовых ящиков, как описано в разделе 46.8.

В процессе тестирования опции local_parts, и когда роутер запущен, префикс удаляется из локальной части, и он доступен в переменной раскрытия $local_part_prefix. Когда сообщение доставляется, если роутер принимает адрес, это остаётся истинным в процессе последующей доставки транспортом. В частности, локальная часть, передаваемая командой RCPT для доставок LMTP, SMTP и BSMTP, по умолчанию удаляет префикс. Это поведение может быть перезадано путём установки rcpt_include_affixes в истину в соответствующем транспорте.

Когда адрес проверяется, local_part_prefix затрагивает лишь поведение роутера. Если используется обратный вызов, это означает, что полный адрес, включая префикс, будет использоваться в обратном вызове.

Префиксы обычно используются для обработки локальных частей вида owner-something. Другое частое использование: поддержка локальных частей формы real-username для обхода пользовательского файла .forward. Это полезно, когда тяжело сказать пользователю, что его форвардинг сделан ошибочно. Проблема решается путём помещения подобного роутера до роутера, обрабатывающего файлы .forward:
real_localuser:
driver = accept
local_part_prefix = real-
check_local_user
transport = local_delivery

Если local_part_prefix и local_part_suffix установлены для роутера, оба условия должны быть не дополнительными. Нужно быть осторожным, если подстановочный знак используется в префиксе и суффиксе в одном роутере. Должны использоваться различные символы как разделители, для избежания двусмысленности.
Имя Использование Тип Значение по умолчанию
local_part_prefix_optional routersboolean ложь

Смотрите выше опцию local_part_prefix.
Имя Использование Тип Значение по умолчанию
local_part_suffix routers‡string list не задана

Эта опция работает точно так же, как и local_part_prefix за исключением того, что локальная часть должна заканчиваться (а не начинаться) данной строкой, опция local_part_suffix_optional определяет, какой суффикс обязателен, а подстановочный символ "*", если присутствует, должен быть последним символом суффикса. Это опциональное средство обычно используется для обработки локальных частей формы something-request и многопользовательских почтовых ящиков вида username-foo.
Имя Использование Тип Значение по умолчанию
local_part_suffix_optional routersboolean ложь

Смотрите выше опцию local_part_suffix.
Имя Использование Тип Значение по умолчанию
local_parts routers‡ local part list† не задана

Роутер запускается лишь, если локальная часть адреса совпадает с этим списком. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия, и раздел 10.20 для обсуждения списков локальных частей. Поскольку строка раскрывается, можно сделать её зависимой от домена, например:
local_parts = dbm;/usr/local/specials/$domain

Если поиском достигнуто соответствие, данные, возвращённые поиском для локальных частей, помещаются в переменную $local_part_data для использования в раскрытии частных опций роутера. Вы могли бы использовать эту опцию, например, если у Вас много локальных вирутальных доменов и Вы хотите слать всю почту постмастера в одно место, без необходимости установки псевдонима в каждом виртуальном домене:
postmaster:
driver = redirect
local_parts = postmaster
data = postmaster@real.domain.example

Имя Использование Тип Значение по умолчанию
log_as_local routersboolean смотрите ниже

Exim имеет два стиля протоколирования для доставки с целью более явно отделить локальные доставки от удалённых. В локальном стиле адрес получателя задаётся так же, как и локальная часть, без имени домена. Использование этого стиля контролируется этой опцией. По умолчанию она истинна для роутера accept и ложна для всех остальных. Эта опция применяется, лишь когда роутер назначает адрес транспорту. Она не оказывает эффекта на роутеры, переадресовывающие письма.
Имя Использование Тип Значение по умолчанию
more routersboolean† истина

Результат раскрытия строки для этой опции должен быть допустимым булевым значением, то есть, одной из строк "yes", "no", "true" или "false". Любой другой результат вызывает ошибку, и доставка задерживается. Если раскрытие принудительно неудачное, используется значение по умолчанию опции (истина). Другие ошибки вызывают задержку доставки.

Если эта опция установлена в ложь, и роутер отказывается обрабатывать адрес, дальнейшие маршрутизаторы не проверяются, маршрутизация неудачна, сообщение рикошетит. Однако, если роутер явно передаёт адрес следующему роутеру путём установки:
self = pass
или иначе, установка more игнорируется. Кроме того, установка more не затрагивает поведение, если одна из предварительных проверок неудачна. В этом случае адрес всегда передаётся следующему роутеру.

Отметьте, что address_data не является предварительным условием. Если это раскрытие принудительно неудачно, роутер отклоняется, и значение more контролирует, что происходит дальше.
Имя Использование Тип Значение по умолчанию
pass_on_timeout routersstring не задана

Если у роутера таймаут в процессе поиска хоста, обычно это вызывает задержку адреса. Если установлена pass_on_timeout, адрес передаётся следующему роутеру, отменяя more. Это может быть полезным для систем, которые периодически связаны с интернетом, или тем, которые хотят передавать умному хосту любые сообщения, которые не могут быть немедленно доставлены.

Тут могут быть другие случайные временные ошибки, которые могут произойти при поиске в DNS. Они обрабатываются таким же образом, как таймауты, и эта опция применяется ко всем ним.
Имя Использование Тип Значение по умолчанию
pass_router routersstring не задана

Когда роутер возвращает pass, адрес обычно передаётся следующему роутеру в последовательности. Это может быть изменено путём установки pass_router в имя другого роутера. Однако (в отличие от redirect_router), названный роутер должен быть ниже текущего маршрутизатора для избежания циклов. Отметьте, что эта опция применяется лишь к специальному случаю pass. Она не применяется, когда роутер возвращает decline.
Имя Использование Тип Значение по умолчанию
redirect_router routersstring не задана

Иногда администратор знает, что бессмысленно заново подвергать переработке адреса в том же самом роутере, которые были сгенерированы из файлов алиасинга или форвардинга. Например, если файл псевдонимов переводит реальные имена в идентификаторы логинов, нет смысла искать по файлу псевдонимов второй раз, особенно если это большой файл.

Опция redirect_router может быть установлена в имя любого роутера. Это заставляет маршрутизацию любого сгенерированного адреса начаться с именованного роутера вместо первого роутера. Эта опция не имеет эффекта, если роутер, в котором она установлена, не генерирует новые адреса.
Имя Использование Тип Значение по умолчанию
require_files routers‡string list† не задана

Эта опция предоставляет главный механизм для утверждения работы роутера на существовании или отсутствии определённых каталогов или файлов. До запуска роутера, как одна из предварительных проверок, exim обрабатывает этот способ через список require_files, отдельно раскрывая каждый его элемент.

Поскольку список разбивается до раскрытия, любые двоеточия в элементах раскрытия должны быть удвоены, или должно использоваться средство иного разделителя списка. Если какое-то раскрытие принудительно неудачно, этот элемент игнорируется. Другие ошибки раскрытия вызывают задержку роутинга адреса.

Если какая-либо раскрытая строка пуста, она игнорируется. Иначе, кроме как описано ниже, каждая строка должна быть полным путём к файлу с опционально предшествующим символом !. Пути передаются на тестирование функции stat() для проверки существования файлов или каталогов. Роутер пропускается, если какой-либо путь, которому не предшествует !, не существует, или существует любой путь с предшествующим !.

Если stat() не может определить, существует файл или нет, доставка сообщения задерживается. Это может произойти, если недоступны смонтированные по NFS файловые системы.

Эта опция проверяется после опций domains, local_parts и senders, таким образом, Вы не можете её использовать для проверки существования файла, в котором ищется домен, локальная часть адреса или отправитель. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия. Однако, поскольку все эти опции раскрыты, Вы можете использовать условие раскрытия exists для создания таких проверок. Опция require_files предназначена для проверки файлов, которые маршрутизатор может быть будет использовать внутри себя, или которые необходимы транспорту (например, .procmailrc).

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

Если элемент в списке require_files не содержит символов прямого слэша, он берётся как пользователь (и опциональная группа, отделённая двоеточием) для проверки последующих файлов в списке. Если группа не задана, но пользователь задан символически, используется gid, ассоциированный с uid. Например:
require_files = mail:/some/file
require_files = $local_part:$home/.procmailrc

Если имя пользователя или группы в require_files не существует, условие require_files не успешно. Exim выполняет проверку путём сканирования компонентов пути файла и проверяя доступ для данных gid и uid. Это проверка на x для каталогов и r для финального файла. Отметьте, это означает, что при поддержке файловых ACL они игнорируются.

Предупреждение 1: когда роутер начинает работу по проверке адресов для входящего SMTP-сообщения, exim не работает от root, а под своим собственным uid. Это может затронуть результат проверки require_files. В частности, stat() может привести к ошибке EACCES (Permission denied). Это означает, что пользователю exim не разрешено читать один из каталогов в пути файла.

Предупреждение 2: даже когда exim выполняется от root при доставке сообщения, stat() может привести к EACCES для файлов в NFS-каталоге, смонтированном без доступа root. В этом случае, если запрошена проверка на доступ специфического пользователя, exim создаёт субпроцесс, который работает от пользователя, и снова пробует проверить в этом процессе.

Действие по умолчанию для обработки EACCES полагает, что это вызвано конфигурационной ошибкой, и роутинг задерживается, поскольку существование или отсутствие файла не может быть определено. Однако, в некоторых обстоятельствах может быть желательным обработать это условие, как будто файл не существовал. Например:
require_files = +/some/file

Если роутер не основная часть проверки (например, он обрабатывает пользовательские файлы .forward), иное решение: установить опцию verify в ложь, чтобы роутер был пропущен при проверке.
Имя Использование Тип Значение по умолчанию
retry_use_local_part routersboolean смотрите ниже

Когда с доставкой присходит временная ошибка маршрутизации, в базе хинтов exim создаётся запись о повторе. Для адресов, маршрутизация которых зависит лишь от домена, ключ для записи повтора не должен содержать локальную часть, но для других адресов, обе, доменная и локальная, части должны быть включены. Обычно удалённая маршрутизация первого вида, а локальная последнего.

Эта опция контролирует, используется ли локальная часть для формирования подсказок (хинтов) для адресов, которые подверглись временным ошибкам, будучи обработанными этим роутером. Значение по умолчанию: истина для любого роутера, который имеет установленную check_local_user, и ложь в противном случае. Отметьте, что эта опция не применяется к ключам подсказок для транспортных задержек: они все контролируются одноимённой общей транспортной опцией.

Установка опции retry_use_local_part применяется лишь к роутеру, в котором она фигурирует. Если роутер генерирует дочерний адрес, они обрабатываются независимо: эта установка не применяется к ним.
Имя Использование Тип Значение по умолчанию
router_home_directory routersstring† не задана

Эта опция устанавливает домашний каталог для использования при работе роутера. Сравните с transport_home_directory, которая устанавливает домашний каталог для более поздней транспортировки. В частности, если используется роутер redirect, эта опция устанавливает значение $home, когда работает фильтр. Значение раскрывается, принудительная ошибка раскрытия вызывает игнорирование опции, а другие ошибки вызывают задержку роутинга.

Раскрытие router_home_directory происходит сразу после проверки check_local_user (если сконфигурировано) до любых будущих раскрытий. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия. Когда роутер работает, router_home_directory перезадаёт значение $home, пришедшее из check_local_user.

Когда роутер принимает адрес и назначает его локальному транспорту (включая случаи, когда роутер redirect генерирует канал, файл или доставку автоответа), установка домашнего каталога для транспорта берётся из первого установленного значения:

  • Опции home_directory в транспорте.
  • Опции transport_home_directory в роутере.
  • Данных пароля, если опция check_local_user установлена в роутере.
  • Опции router_home_directory в роутере.

Другими словами, router_home_directory перезадаёт данные пароля для роутера, но не для транспорта.
Имя Использование Тип Значение по умолчанию
self routersstring freeze (замораживание)

Эта опция применяется к тем роутерам, которые используют адрес получателя для нахождения списка удалённых хостов. В настоящее время это роутеры dnslookup, ipliteral и manualroute. Определённые конфигурации маршрутизатора queryprogram тоже могут задавать список удалённых хостов. Обычно такие маршрутизаторы сконфигурированы для посылки сообщения к удалённому хосту через snmp-транспорт. Опция self задаёт, что происходит, когда первый хост в списке оказывается локальным хостом. Способ проверки локального хоста exim описан в разделе 13.8.

Обычно эта ситуация указывает на ошибку конфигурации в exim (например, роутер должен быть сконфигурирован не обрабатывать этот домен) или ошибку в DNS (например, MX не должен указывать на этот хост). По этой причине действие по умолчанию: запротоколировать инцидент, задержать адрес и заморозить сообщение. Следующие альтернативы предоставляются для использования в специальных случаях:

  • defer: Сообщение пробуется ещё раз доставить, позднее, но оно не заморожено.
  • reroute: domain: Домен изменяется на заданный домен, а адрес передаётся назад для обработки роутерами. Перезапись заголовков не производится. По существу это поведение является переназначением.
  • reroute: rewrite: domain: Домен изменяется на заданный домен, а адрес возвращется назад для повторной обработки роутером. Любые заголовки, которые содержат оригинальный домен, перезаписываются.
  • pass: Роутер передаёт адрес следующему роутеру или роутеру, названному в опции pass_router, если она установлена. Это перезадаёт no_more. В течение последующего роутинга и доставки, переменная $self_hostname содержит имя локального хоста, с которым столкнулся роутер. Это может использоваться для различения случаев для хостов с несколькими именами. Комбинация
    self = pass
    no_more
    
    гарантирует, что передаются лишь те адреса, которые предназначались локальному хосту. Без no_more адреса, отклонённые по иным причинам, также будут передаваться следующему роутеру.
  • fail: Доставка неудачна и генерируется отчёт об ошибке.
  • send: Аномалия игнорируется, а адрес ставится в очередь для транспорта. Эта установка должна использоваться с критическим предостережением. Для транспорта smtp это имеет смысл лишь в случаях, когда программа, слушающая SMTP-порт, не эта версия exim. Таким образом, это должен быть какой-то иной MTA или exim с иным конфигурационным файлом, который обрабатывает домен иным способом.
Имя Использование Тип Значение по умолчанию
senders routers‡ address list† не задана

Если эта опция установлена, роутер пропускается, если адрес отправителя сообщения не совпадает с чем-то в списке. Смотрите раздел 3.12 для получения порядка в котором оцениваются предварительные условия.

Существуют проблемы относительно проверки, когда работа роутеров зависит от отправителя. Когда exim проверяет адрес в установке errors_to, он устанавливает отправителя в нулевую (null) строку. Когда для проверки конфигурационного файла используется опция -bt, также необходимо использовать опцию -f для установки соответствующего отправителя. Для входящей почты отправитель не установлен, когда проверяется отправитель, но он доступен, когда проверяется любой получатель. Если включена команда SMTP VRFY, она должна использоваться после MAIL, если имеет значение адрес отправителя.
Имя Использование Тип Значение по умолчанию
translate_ip_address routersstring† не задана

Существует несколько редких сетевых ситуаций (например, пакетная радиосвязь), когда полезна возможность транслировать IP-адрес, сгенерированный нормальными механизмами, в другие IP-адреса, выполняя свого рода ручную маршрутизацию. Это должно быть сделано, лишь если нормальная IP-маршрутизация TCP/IP-стека неадекватна или не работает. Поскольку это чрезвычайно необычное требование, код для поддержки этой опции не включается в двоичный файл exim, если в Local/Makefile не установлена опция SUPPORT_TRANSLATE_IP_ADDRESS=yes.

Строка translate_ip_address раскрывается для каждого IP-адреса, сгенерированного роутером, с установкой сгенерированного IP-адреса в $host_address. Если раскрытие принудительно неудачно, никаких действий не предпринимается. Для любых других ошибок раскрытия доставка сообщения задерживается. Если результат раскрытия IP-адрес, он заменяет оригинальный адрес, иначе предполагается, что результат является именем хоста, и он ищется, используя gethostbyname() (или getipnodebyname(), когда она доступна) для создания одного и более замещающих IP-адресов. Например, для отмены всех адресов в некоторых сетях к роутеру может быть добавлено такое:
translate_ip_address = \
   ${lookup{${mask:$host_address/26}}lsearch{/some/file}\
     {$value}fail}}

Файл содержал бы такие строки:
10.2.3.128/26
some.host 10.8.4.34/26
10.44.8.15

Вы не должны использовать это средство, если не понимаете, что оно делает.
Имя Использование Тип Значение по умолчанию
transport routersstring† не задана

Эта опция определяет транспорт, который будет использован, когда роутер принимает адрес, и устанавливает его для доставки. Транспорт никогда не бывает нужен, если роутер используется лишь для проверки. Значение опции раскрывается во время маршрутизации после раскрытия errors_to, headers_add и headers_remove, а результат должен быть именем одного из сконфигурированных транспортов. Если это не так, доставка задерживается.

Опция transport не используется роутером redirect, но он имеет некоторые частные опции, которые устанавливают транспорты для канала (pipe) и доставки в файл (смотрите раздел 22).
Имя Использование Тип Значение по умолчанию
transport_current_directory routersstring† не задана

Эта опция ассоциирует текущий каталог с любым адресом, который обрабатывается локальным транспортом. Это может происходить потому, что транспорт явно сконфигурирован для роутера, или потому что генерируется доставка в канал или файл. В течение процесса доставки (то есть, в транспортное время), строка этой опции раскрывается и устанавливает текущий каталог, исключая перезадание установкой транспорта. Если раскрытие неудачно по любой причине, включая принудительную неудачу, ошибка протоколируется, а доставка задерживается. Смотрите раздел 23 для получения деталей об окружении локальной доставки.
Имя Использование Тип Значение по умолчанию
transport_home_directory routersstring† смотрите ниже

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

Если транспорт не определяет домашний каталог, и transport_home_directory не установлена для роутера, то домашний каталог для транспорта берётся из данных пароля, если для роутера установлена опция check_local_user. Иначе она берётся из router_home_directory, если она установлена. Если нет, домашний каталог для транспорта не устанавливается. Смотрите раздел 23 для получения деталей об окружении локальной доставки.
Имя Использование Тип Значение по умолчанию
unseen routersboolean† ложь

Результат раскрытия строки для этой опции должен быть допустимым булевым значением, то есть одной из строк "yes", "no", "true" или "false". Любой другой результат вызывает ошибку, а доставка задерживается. Если раскрытие принудительно неудачно, используется значение по умолчанию этой опции (ложь). Другие ошибки вызывают задержку доставки.

Когда эта опция установлена в истину, маршрутизация не прекращается, если роутер принимает адрес. Вместо этого копия входящего адреса передаётся следующему роутеру, перезадавая ложную установку опции more. Есть небольшая проблема в установке more в ложь, если unseen всегда истинно, но это может быть полезным в случаях, когда значение unseen содержит раскрываемый элемент (поэтому оно иногда истинно, а иногда ложно).

Опция unseen может использоваться для доставки копий сообщений на другой адрес, когда также необходимо выполнить и нормальную доставку. В действительности текущий адрес превращается в "родителя", имеющего двух детей: один из которых доставляется как задано в роутере, а другой, продолжающий дальнейшую маршрутизацию. Поэтому unseen не может быть объединён с опцией one_time в роутере redirect.

Предупреждение: добавленные к адресу строки заголовков (или определённые для удаления) этим или предыдущим роутерами затрагивают лишь невидимую копию сообщения. Клон, который продолжает обрабатываться будущими роутерами, не содержит добавленных или определённых на удаление заголовков. Однако, любые данные, которые были установлены путём опции address_data в текущем или предыдущих роутерах, передаются дальше. Установка опции unseen имеет эффект похожий на управляющюю команду unseen в файлах фильтров.
Имя Использование Тип Значение по умолчанию
user routersstring† смотрите ниже

Когда роутер стоит в очереди на адрес для транспорта, и транспорт не определяет пользователя, заданный тут пользователь используется при работе процесса доставки. Пользователь может быть задан числом или по имени. Если раскрытие неудачно, ошибка записывается, и доставка задерживается. Также этот пользователь используется роутером redirect при работе файла фильтра. По умолчанию она не задана кроме случаев, когда установлена опция check_local_user. В этом случае умолчание берётся из информации пароля. Если пользователь задан по имени, и group не задана, группа ассоциируется с используемым пользователем. Смотрите обсуждение initgroups и initgroups в разделе 23.
Имя Использование Тип Значение по умолчанию
verify routers‡boolean истина

Установка этой опции имеет эффект установки verify_sender и verify_recipient в то же значение.
Имя Использование Тип Значение по умолчанию
verify_only routersrouters‡ ложь

Если эта опция установлена, роутер используется лишь для проверки адреса или тетстирования с опцией -bv, а не для фактической доставки, тестирования с опцией -bt или запуска команды SMTP EXPN. Далее она может быть ограничена только проверкой отправителя или получателя, путём verify_sender и verify_recipient.

Предупреждение: когда роутер работает, проверяя адрес входящего SMTP-сообщения, exim не работает от root, а под своим собственным uid. Если роутер обращается к каким-то файлам, Вы должны удостовериться, что они доступны пользователю или группе exim.
Имя Использование Тип Значение по умолчанию
verify_recipient routers‡boolean истина

Если эта опция ложна, роутер пропускается при проверке адреса получателя или тестировании проверки получателя с использованием опции -bv. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия.
Имя Использование Тип Значение по умолчанию
verify_sender routers‡boolean истина

Если эта опция ложна, роутер пропускается при проверке адреса отправителя или тестировании проверки отправителя с использованием опции -bvs. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия.

Поиск

 

Найди своих коллег!