15. Общие опции для роутеров
Перевод выполнен Алексеем Паутовым в рамках некоммерческого проекта RussianLDP (http://www.rldp.ru/). Именно на этом сайте и надлежит искать новые версии, если таковые будут.
Эта глава описывает общие опции, применяемые ко всем роутерам. Те, которые являются предварительными условиями, помечены символом "‡", в поле "использование". Для общего описания, как работает маршрутизатор, смотрите разделы 3.10 и 3.12. Последний, определяет порядок в котормо проверяются предварительные условия. Порядок раскрытия опций, которые предоставляют данные для транспортов, таков: "errors_to", "headers_add", " headers_remove", "transport".
|
Строка раскрывается лишь до запуска роутера, то есть после успешного прохождения всех тестов предварительных условий. Если раскрытие принудительно неудачно, роутер отклоняется, значение 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.
|
Если эта опция установлена в ложь, маршрутизатор пропускается, когда роутинг тестируется при помощи опции командной строки -bt. Это может быть удобным, когда первый роутер посылает сообщения на внешний сканер, поскольку он сохраняет необходимость установки индикатора "already scanned" при тестировании реальной маршрутизации адреса.
|
Эта опция определяет текстовое сообщение используемое, когда адрес не может быть маршрутизирован, поскольку exim исчерпал все маршруты. Сообщение по умолчанию: "Unrouteable address". Эта опция полезна лишь в роутерах, где опция more установлена в ложь или последнем роутере конфигурации, поскольку используемое значение берётся из последнего просматриваемого роутера. Она включает роутеры, которые были пропущены, поскольку не соответствовали их предварительные условия, также как и отклоняемые маршрутизаторы. Например, используя конфигурацию по умолчанию, Вы могли бы поместить:
cannot_route_message = Remote domain not found in DNS |
cannot_route_message = Unknown local user |
|
По умолчанию роутеры обрабатывают локальную часть адреса в регистронезависимой манере, хотя фактический регистр сохраняется для передачи с сообщением. Если Вы хотите, чтобы регистр букв был важен в роутере, Вы должны установить эту опцию в истину. Для индивидуальных опций роутера, которые содержат адреса или списки локальных частей (например, local_parts), сравнение с учётом регистра может быть включено путём "+caseful", как элемента списка. Смотрите раздел 10.19 для получения дополнительных деталей.
Значение переменной $local_part принудительно приводится к нижнему регистру, когда роутер запущен без установленной опции caseful_local_part. Когда роутер назначает адрес на транспортировку, когда транспорт выполняется, значение $local_part такое же. Точно также, когда роутер генерирует дочерний адрес путём алиасинга или форвардинга, значения $original_local_part и $parent_local_part те, которые использовались роутером редиректа.
Эти опции применяются к обработке адресов роутером. Когда адрес получателя обрабтывается в ACL, есть отдельный модификатор control, который может использоваться для задания регистрозависимой обработки в пределах ACL (смотрите раздел 39.38).
|
Когда эта опция истинна, 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 задает последнее предварительное условие для оценки (смотрите раздел 3.12). Строка раскрывается, и если результат принудительно неудачен, пустая строка или одна из строк "0", "no", "false" (проверяется без учёта регистра), роутер пропускается, и адрес предлагается следующему.
Если результат представляет собой любое другое значение, роутер запускается (поскольку это последнее предварительное условие для оценки, все другие предварительные условия должны быть истинными).
Опция condition предоставляет средство применения персональных условий для запуска роутеров. Отметьте, что в случае простого раскрытия, значение по умолчанию раскрытия именно то, что требуется, например:
condition = ${if >{$message_age}{600}} |
Из-за поведения раскрытия строки по умолчанию это эквивалентно:
condition = ${if >{$message_age}{600}{true}{}} |
Если раскрытие неудачно (кроме принудительной неудачи), доставка отсрочена. Некоторые другие опции предварительных условий и общие специальные случаи, которые могли быть фактически определены, используя condition.
|
Если эта опция установлена, и отладка включена (смотрите опцию командной строки -d), строка раскрывается и включается в отладочный вывод. Если раскрытие строки неудачно, сообщение о ошибке записывается в отладочный вывод, и exim продолжает обработку. Эта опция предоставлена для помощи в проверке значения переменных и т. п. при отладке конфигурации роутера. Например, если кажется, что опция condition не работает, debug_print может использоваться для вывода ссылающихся на неё переменных. Вывод происходит после проверки domains, local_parts и check_local_user, но до проверки любых других предварительных условий. Новая строка добавляется к тексту, если она не оканчивается этим символом.
|
Если эта опция установлена в истину, ничего не протоколируется для любых ошибок роутинга или доставок, вызванных этим маршрутизатором. Вы не должны устанавливать эту опцию, если не понимаете, что делаете. Также смотрите общую опцию транспортов с тем же именем.
|
Если эта опция установлена, роутер пропускается, когда текущий домен не совпадает со списком. Если совпадение произошло путём поиска по файлу, данные, возвращённые поиском для домена, помещаются в $domain_data для использования в раскрытиях строки частных опций драйвера. Смотрите раздел 3.12 для списка, в каком порядке оцениваются предварительные условия.
|
Эта опция всегда должна быть установлена. Она определяет, какой из доступных маршрутизаторов должен использоваться.
|
Если роутер успешно обрабатывает адрес, он может назначить адрес на транспорт для доставки или сгенерировать дочерний адрес. В обоих случаях, если происходят проблемы доставки в более поздних процессах обработки, результирующее сообщение рикошета посылается по адресу, являющемуся результатом раскрытия этой строки, при условии успешной проверки адреса. Опция 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).
|
Если эта опция выключена, роутер пропускается когда тестируется адрес как результат обработки команды SMTP EXPN. Вы могли бы, например, захотеть включить её на роутере для пользовательских файлов .forward, когда оставляете их для файлов системных алиасов. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия.
Использование команды SMTP EXPN контролирутеся путём ACL (смотрите раздел 39). Когда exim запускается командой EXPN, это подобно проверке адреса с -bt. Сравните с VRFY, дубликат которой -bv.
|
Установка этой опции создаёт эффект установки обоих опций fail_verify_sender и fail_verify_recipient в то же значение.
|
Если эта опция установлена в истину, и адрес принимается этим роутером, когда проверяется получатель, проверка будет неудачна.
|
Если эта опция установлена в истину, и адрес принимается этим роутером, когда проверяется отправитель, проверка будет неудачна.
|
Раскрытие строки не применяется к этой опции. Аргумент должен быть списком имён хостов или IP-адресов, разделённых двоеточиями. Разделитель списка может быть изменён (смотрите раздел 6.19), и порт может быть задан с каждым именем или адресом. Фактически, формат каждого элемента, точно ткой же, как в списке хостов роутера manualroute (смотрите раздел 20.5).
Если роутер стоит в очереди на адрес для удалённого транспорта, этот список хостов ассоциирован с адресом и используется вместо запасного списка хостов транспорта. Если hosts_randomize установлена в транспорте, порядок списка случаен для каждого использования. Смотрите опцию fallback_hosts транспорта snmp для дальнейших деталей.
|
Когда роутер стоит в очереди на адрес для транспорта, и транспорт не определяет группу, используется группа, заданная тут, когда работает процесс доставки. Группа может быть задана в цифровой форме или по имени. Если раскрытие неудачно, ошибка протоколируется, а доставка задерживается. По умолчанию, она не задана, если не установлена check_local_user, когда значение по умолчанию берётся из информации о пароле. Также смотрите initgroups, user и обсуждение в главе 23.
|
Эта опция задаёт строку текста, который ракрывается во время роутинга, и ассоциирован с любым адресом, который принят роутером. Однако, эта опция не имеет никакого эффекта, когда адрес лишь проверяется. Способ, которым используется текст для добавления строк заголовков в транспорте, описан в разделе 43.17. Фактически, новые строки заголовков не добавлены, пока сообщение в процессе транспортировки. Это означает, что ссылки на строки заголовков в раскрытиях строк в конфигурации транспорта продолжают "видеть" оригинальные заголовки и не видят добавленные.
Опция headers_add раскрывается после errors_to, но до headers_remove и transport. Если раскрытая строка пуста, или если раскрытие принудительно неудачно, опция не имеет эффекта. Другие ошибки раскрытия обрабатываются как ошибки конфигурации.
Предупреждение 1: Опция headers_add не может использоваться для роутера redirect, в котором установлена опция one_time.
Предупреждение 2: Если в роутере установлена опция unseen, все дополнения заголовков удаляются при передаче следующему роутеру.
|
Эта опция задаёт строку текста, который раскрывается во время роутинга, и ассоциирован с любым адресом, который принят роутером. Однако, эта опция не имеет никакого эффекта, когда адрес лишь проверяется. Способ, которым используется текст для удаления строк заголовков в транспорте, описан в разделе 43.17. Фактически, строки заголовков не удалены, пока сообщение в процессе транспортировки. Это означает, что ссылки на строки заголовков в раскрытиях строк в конфигурации транспорта продолжают "видеть" оригинальные заголовки (то есть, видят удалённые).
Опция headers_remove раскрывается после errors_to и headers_add, но до transport. Если раскрытие принудительно неудачно, опция не имеет эффекта. Другие ошибки раскрытия обрабатываются как ошибки конфигурации.
Предупреждение 1: Опция headers_remove не может использоваться для роутера redirect, в котором установлена опция "one_time.
Предупреждение 2: Если в роутере установлена опция unseen, все запросы на удаление заголовков удаляются при передаче следующему роутеру.
|
Хотя эта опция задает список хостов, обычно она содержит IP-адреса, а не имена. Если любой хост, который ищется роутером, имеет IP-адрес, совпадающий с элементом этого списка, exim ведёт себя так, будто этот IP-адрес не существует. Эта опция позволяет Вам справляться с мошенническими DNS-записями, типа:
remote.domain.example.A127.0.0.1 |
ignore_target_hosts = 127.0.0.1 |
Вы можете использовать эту опцию для отключения использования 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-адрес.
|
Если роутер стоит в очереди на адрес для транспорта, эта опция истинна и uid, предоставленный роутером не перезадан транспортом, при работе транспорта вызывается функция initgroups() для гарантии, что установлены любые дополнительные группы, ассоциированные с uid. Также смотрите обсуждение group и user в главе 23.
|
Если эта опция установлена, роутер пропускается, если локальная часть не начинается с одной из заданных строк, или если 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.
|
Эта опция работает точно также как и local_part_prefix за исключением того, что локальная часть должна заканчиваться (а не начинаться) данной строкой, опция local_part_suffix_optional определяет, какой суффикс обязателен, и подстановочный символ "*", если присутствует, должен быть последним символом суффикса. Это опциональное средство обычно используется для обработки локальных частей формы something-request и многопользовательских почтовых ящиков вида username-foo.
|
Смотрите выше опцию local_part_suffix.
|
Роутер запускается лишь, если локальная часть адреса совпадает с этим списком. Смотрите раздел 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 |
|
Exim имеет два стиля протоколирования для доставки, с целью более явно отделить локальные доставки от удалённых. В "локальном" стиле, адрес получателя даётся так же, как и локальная часть, без имени домена. Использование этого стиля контролируется этой опцией. По умолчанию она истинна для роутера accept и ложна для всех остальных. Эта опция применяется, лишь когда роутер назначает адрес транспорту. Она не оказывает эффекта на роутеры, переадресовывающие адреса.
|
Результат раскрытия строки для этой опции должен быть допустимым булевым значением, то есть, одной из строк "yes", "no", "true" или "false". Любой другой результат вызывает ошибку, и доставка задерживается. Если ракрытие принудительно неудачное, используется значение по умолчанию опции (истина). Другие ошибки вызывают задержку доставки.
Если эта опция установлена в ложь, и роутер отказывается обрабатывать адрес, дальнейшие маршрутизаторы не проверяются, роутинг неудачен, и сообщение рикошетит. Однако, если роутер явно передаёт адрес следующему роутеру путём установки:
self = pass |
Отметьте, что address_data не является предварительным условием. Если это раскрытие принудительно неудачно, роутер отклоняется, и значение more контролирует, что происходит дальше.
|
Если у роутера таймаут в процессе поиска хоста, обычно это вызывает задержку адреса. Если установлена pass_on_timeout, адрес передаётся следующему роутеру, отменяя more. Это может быть полезным для систем, которые периодически связаны с интернетом, или тем, которые хотят передавать умному хосту любые сообщения, которые не могут быть немедленно доставлены.
Тут могут быть другие случайные временные ошибки, которые могут произойти при поиске в DNS. Они обрабатываются таким же образом как таймауты, и эта опция применяется ко всем ним.
|
Когда роутер возвращает "pass", адрес обычно передаётся следующему роутеру в последовательности. Это может быть изменено путём установки pass_router в имя другого роутера. Однако (в отличие от redirect_router), названный роутер должен быть ниже текущего маршрутизатора для избежания циклов. Отметьте, что эта опция применяется лишь к специальному случаю "pass". Она не применяется, когда роутер возвращает "decline".
|
Иногда администратор знает, что бессмысленно заново подвергать переработке адреса в том же самом роутере, которые были сгенерированы из файлов алиасинга или форвардинга. Например, если файл алиасов переводит реальные имена в идентификаторы логинов, нет смысла искать по файлу алиасов второй раз, особенно если это большой файл.
Опция redirect_router может быть установлена в имя любого роутера. Это заставляет маршрутизацию любого сгенерированного адреса начаться с именованного роутера вместо первого роутера. Эта опция не имеет эффекта, если роутер, в котором она установлена, не генерирует новые адреса.
|
Эта опция предоставляет главный механизм для утверждения работы роутера, на существовании или отсутствии определённых каталогов или файлов. До запуска роутера, как одна из предварительных проверок, 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 в ложь, чтобы роутер был пропущен при проверке.
|
Когда с доставкой присходит временная ошибка роутинга, в базе хинтов exim создаётся запись о повторе. Для адресов, маршрутизация которых зависит лишь от домена, ключ для записи повтора не должен содержать локальную часть, но для других адресов, обе, доменная и локальная, части должны быть включены. Обычно удалённый роутинг первого вида, а локальный последнего.
Эта опция контролирует, используется ли локальная часть для формирования подсказок (хинтов) для адресов, которые подверглись временным ошибкам, будучи обработанными этим роутером. Значение по умолчанию: истина для любого роутера, который имеет установленную check_local_user, и ложь в противном случае. Отметьте, что эта опция не применяется к ключам подсказок для транспортных задержек: они все контролируются одноимённой общей транспортной опцией.
Установка опции retry_use_local_part применяется лишь к роутеру, в котором она фигурирует. Если роутер генерирует дочерний адрес, они роутятся независимо: эта установка не прилагается к ним.
|
Эта опция устанавливает домашний каталог для использования при работе роутера. Сравните с 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 перезадаёт данные пароля для роутера, но не для транспорта.
|
Эта опция применяется к тем роутерам, которые используют адрес получателя для нахождения списка удалённых хостов. В настоящее время это роутеры 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
содержит имя локального хоста, с которым столкнулся роутер.
Это может использоваться для различения случаев
для хостов с несколькими именами. Комбинация
гарантирует, что передаются лишь те адреса, которые роутились к локальному хосту. Без no_more адреса, отклонённые по иным причинам, также будут передаваться следующему роутеру.self = pass no_more
- fail: Доставка неудачна и генерируется отчёт об ошибке.
- send: Аномалия игнорируется, а адрес ставится в очередь для транспорта. Эта установка должна использоваться с критическим предостережением. Для транспорта smtp это имеет смысл лишь в случаях, когда программа, слушающая SMTP-порт, не эта версия exim. Таким образом, это должен быть какой-то иной MTA или exim с иным конфигурационным файлом, который обрабатывает домен иным способом.
|
Если эта опция установлена, роутер пропускается, если адрес отправителя сообщения не совпадает с чем-то в списке. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия.
Существуют проблемы относительно проверки, когда работа роутеров зависит от отправителя. Когда exim проверяет адрес в установке errors_to, он устанавливает отправителя в нулевую (null) строку. Когда для проверки конфигурационного файла используется опция -bt, также необходимо использовать опцию -f для установки соответствующего отправителя. Для входящей почты отправитель не установлен, когда проверяется отправитель, но он доступен, когда проверяется любой получатель. Если включена команда SMTP VRFY, она должна использоваться после MAIL, если имеет значение адрес отправителя.
|
Существует несколько редких сетевых ситуаций (например, пакетная радиосвязь), когда полезна возможность транслировать 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.host10.8.4.34/26 10.44.8.15 |
Вы не должны использовать это средство, если Вы не понимаете, что оно делает.
|
Эта опция определяет транспорт, который будет использован, когда роутер принимает адрес, и устанавливает его для доставки. Транспорт никогда не бывает нужен, если роутер используется лишь для проверки. Значение опции раскрывается во время роутинга, после раскрытия errors_to, headers_add и headers_remove, а результат должен быть именем одного из сконфигурированных транспортов. Если это не так, доставка задерживается.
Опция transport не используется роутером redirect, но он имеет некоторые частные опции, которые устанавливают транспорты для канала (pipe) и доставки в файл (смотрите раздел 22).
|
Эта опция ассоциирует текущий каталог с любым адресом, который роутится локальным транспортом. Это может происходить потому, что транспорт явно сконфигурирован для роутера, или потому что генерируется доставка в канал или файл. В течение процесса доставки (то есть, в транспортное время), строка этой опции раскрывается и устанавливает текущий каталог, исключая перезадание установкой транспорта. Если раскрытие неудачно по любой причине, включая принудительную неудачу, ошибка протоколируется, а доставка задерживается. Смотрите раздел 23 для получения деталей об окружении локальной доставки.
|
Эта опция ассоциирует домашнюю директорию с любым адресом, который роутится локальным транспортом. Это может происходить потому, что транспорт явно сконфигурирован для роутера, или потому что генерится доставка в файл или трубу. В течение процесса доставки (то есть, в транспортное время), строка этой опции раскрывается и устанавливает домашнюю директорию, исключая перезадание установкой " home_directory" в транспорте. Если раскрытие неудачно по любой причине, включая принудительную неудачу, ошибка логгируется, и доставка задерживается.
Если транспорт не определяет домашний каталог, и transport_home_directory не установлена для роутера, домашний каталог для транспорта берётся из данных пароля, если для роутера установлена опция check_local_user. Иначе, она берётся из router_home_directory, если она установлена. Если нет, домашний каталог для транспорта не устанавливается. Смотрите раздел 23 для получения деталей об окружении локальной доставки.
|
Результат раскрытия строки для этой опции должен быть допустимым булевым значением, то есть одной из строк "yes", "no", "true" или "false". Любой другой результат вызывает ошибку, и доставка задерживается. Если раскрытие принудительно неудачно, используется значение по умолчанию этой опции (ложь). Другие ошибки вызывают задержку доставки.
Когда эта опция установлена в истину, маршрутизация не прекращается, если роутер принимает адрес. Вместо этого копия входящего адреса передаётся следующему роутеру, перезадавая ложную установку опции more. Есть небольшая точка в установке more в ложь, если unseen всегда истинно, но это может быть полезным в случаях, когда значение unseen содержит раскрываемый элемент (поэтому оно иногда истинно, а иногда ложно).
Опция unseen может использоваться для доставки копий сообщений на другой адрес, когда также необходимо выполнить и нормальную доставку. В действительности, текущий адрес превращается в "родителя", имеющего двух детей: один из которых доставляется как задано в роутере, и другой, продолжающий дальнейший роутинг. Поэтому unseen не может быть объединён с опцией one_time в роутере redirect.
Предупреждение: Добавленные к адресу строки заголовков (или определённые для удаления) этим или предыдущим роутерами затрагивают лишь "невидимую" копию сообщения. Клон, который продолжает обрабатываться будущими роутерами, не содержит добавленный или определённых на удаление заголовков. Однако, любые данные, которые были установлены путём опции address_data в текущем или предыдущих роутерах, передаются дальше. Установка опции unseen имеет эффект похожий на управляющюю команду unseen в файлах фильтров.
|
Когда роутер стоит в очереди на адрес для транспорта, и транспорт не определяет пользователя, заданный тут пользователь используется при работе процесса доставки. Пользователь может быть задан числом или по имени. Если раскрытие неудачно, ошибка записывается, и доставка задерживается. Также этот пользователь используется роутером redirect при работе файла фильтра. По умолчанию она не задана, кроме случаев когда установлена опция check_local_user. В этом случае умолчание берётся из информации пароля. Если пользователь задан по имени, и group не задана, группа ассоциируется с используемым пользователем. Смотрите обсуждение initgroups и initgroups в разделе 23.
|
Установка этой опции имеет эффект установки verify_sender и verify_recipient в то же значение.
|
Если эта опция установлена, роутер используется лишь для проверки адреса или тетстирования с опцией -bv, а не для фактической доставки, тестирования с опцией -bt или запуска команды SMTP EXPN. Далее она может быть ограничена только проверкой отправителя или получателя, путём verify_sender и verify_recipient.
Предупреждение: Когда роутер работает, проверяя адрес входящего SMTP-сообщения, exim не работает от root, а под своим собственным uid. Если роутер обращается к каким-то файлам, Вы должны удостовериться, что они доступны пользователю или группе exim.
|
Если эта опция ложна, роутер пропускается при проверке адреса получателя или тестировании проверки получателя с использованием опции -bv. Смотрите раздел 3.12 для получения порядка в котором оцениваются предварительные условия.
|
Если эта опция ложна, роутер пропускается при проверке адреса отправителя или тестировании проверки отправителя с использованием опции -bvs. Смотрите раздел 3.12 для получения порядка, в котором оцениваются предварительные условия.