Мы — долго запрягаем, быстро ездим, и сильно тормозим.

RFC
Программирование
FreeBSD
man
EXIM
  4.62
  4.70
  часть 1
  часть 2
  часть 3
  часть 4
  часть 5
  часть 6
  часть 7
  часть 8
  часть 9
  часть 10
  часть 11
  часть 12
  часть 13
  часть 14
  часть 15
  часть 16
  часть 17
  часть 18
  часть 19
  часть 20
  часть 21
  часть 22
  часть 23
  часть 24
  часть 25
  часть 26
  часть 27
  часть 28
  часть 29
  часть 30
  часть 31
  часть 32
  часть 33
  часть 34
  часть 35
  часть 36
  часть 37
  часть 38
  часть 39
  часть 40
  часть 41
  часть 42
  часть 43
  часть 44
  часть 45
  часть 46
  часть 47
  часть 48
  часть 49
  часть 50
  часть 51
  часть 52
  часть 53
  часть 54
  часть 55
  filter facility


www.lissyara.su —> документация —> EXIM —> 4.70 —> часть 43

43. Системная фильтрация сообщений


    Предыдущие части (ACL и функция локального сканирования) описывают проверки, которые могут быть применены к сообщениям до того, как они принимаются хостом. Также есть механизм для проверки сообщений после их получения, но до доставки. Он называется - system filter.
   Системный фильтр работает подобно файлу пользовательского фильтра, но он запускается лишь один раз на сообщение (однако, у сообщения много получателей). Обычно, он не должен использоваться вместо роутинга, поскольку команда
deliver в системном роутере даёт новые адреса получателей конверта. Системный фильтр должен быть фильтром exim`a. Он не может быть фильром Sieve.
   Системный фильтр запускается в начале попытки доставки, до какой-либо маршрутизации. Если сообщение невозможно доставить при первой попытке, системный фильтр запускается снова в начале каждого повтора.Если вы хотите чтобы фильтр работал лишь при первой доставке, вы можете использовать в фильтре условие
first_delivery в команде if, для предотвращения обработки при повторах.
   Внимание: Поскольку системный фильтр запускается лишь один раз, переменные являющиеся специфическими для индивидуальных адресов получателей, типа
$local_part и $domain, не установлены, и условие personal - незначащее. Если вы хотите запускать заданный центрально фильтр независимо для каждого адреса получателя, вы можете это сделать путём установки подходящего роутера redirect, как описано ниже, в разделе 43.8.

43.1 Установка системного фильтра

   Имя файла, который содержит системный фильтр, должно быть задано путём установки system_filter. Если вы хотите запускать фильтр не под uid и gid root`a, вы, также, должны установить system_filter_user и system_filter_group, соответственно. Например:
system_filter = /etc/mail/exim.filter
system_filter_user = exim

   Если системный фильтр генерирует любую доставку в файлы или трубы (через команды save или pipe), транспорты для обработки этих доставок должны быть определены путём установки system_filter_file_transport и system_filter_pipe_transport, соответственно. Точно также, system_filter_reply_transport должна быть установлена для обработки любых сообщений генерируемых путём команды reply.

43.2 Тестирование системного фильтра

   Вы можете запускать простые тесты системного фильтра точно также, как для пользовательского фильтра, но вы холжны использовать -bF вместо -bf, так, чтобы были распознаны особенности, разрешённые лишь в системных фильтрах.
   Если вы хотите тестировать комбинированный эффект системного и пользовательского фильтров, вы можете использовать обе опции -
-bF и -bf, в одной комндной строке.

43.3 Содержимое системного фильтра

   Язык, используемый для определения системных фильтров - точно такой же как и для файлов пользовательских фильтров. Он описан в отдельном документе для пользователя - Exim’s interface to mail filtering. Однако, есть некоторые дополнительные особенности, которые доступны лишь в системных фильтрах; они описаны в последующих секциях. Если они встречаются в файлах пользовательских фильтров, или при тестировании с -bf, они вызывают ошибки.
   Есть два специальных условия, которые доступны в файлах фильтров пользователей, но проектировались для использования в системных фильтрах. Условие
first_delivery - истинно лишь для первой попытки доставки сообщения, и manually_thawed - истинно лишь если сообщение было заморожено, и в последствии было разморожено административным пользователем. Явная принудительная доставка считается ручным размораживанием, но разморозка в результате установки auto_thaw таковой не считается.
   Внимание: Если системный фильтр использует условие
first_delivery для создания unseen (невидимой) доставки, и эта доставка неуспешна, ещё одна попытка доставки не производится. Если вы хотите чтобы exim повторял невидимые доставки до их успеха, вы должны установить её при каждом запуске фильтра.
   Когда системный фильтр завершает работу, значения переемнных  
$n0 - $n9 копируются в $sn0 - $sn9, и, таким образом, становятся доступны в файлах пользовательских фильтров. Таким образом, системный фильтр может, например, устанавливать баллы для передачи пользовательским фильтрам.

43.4 Дополнительные переменные для системных фильтров

   Переменная раскрытия $recipients, содержащая список всех получателей сообщения (разделённых запятыми и пробелами), - доступна в системных фильтрах. Из соображений безопасности, она не доступна в пользовательских фильтрах.

43.5 Defer, freeze, и fail команды системного фильтра

   Существуют три дополнительные команды (defer, freeze и fail), которые всегда доступны в системных фильтрах, но, обычно, недопустимы в пользовательских фильтрах. (Смотрите опции allow_defer, allow_freeze и allow_fail роутера redirect.) Эти команды, опционально, могут сопровождаться словом text и строкой содержащей сообщение о ошибке, например:
fail text "this message looks like spam to me"

   Ключевое слово text - опционально, если следующий символ - двойная кавычка.
   Команда
defer задерживает доставку оригинальных получателей сообщения. Команда fail вызывает неудачу оригинальных получателей, и создание рикошета. Команда freeze останавливает все попытки доставки для оригинальных получателей. Во всех случаях, любые новые доставки определённые фильтром предпринимаются обычным образом после работы фильтра.
   Команда
freeze игнорируется, если сообщение было разморожено вручную, и с тех пор не было вручную заморожено.Это означает, что автоматическое замораживание путём системного фильтра может использоваться как способ проверки позозрительных сообщений.Если выясняется, что сообщение нормальное, ручная разморозка позволяет его доставку.
   Текст, данный с командой
fail, используется как часть сообщения рикошета, а также записывается в лог. Если сообщение очень длинное, они могут занимать много места в логах, если отказы происходят постоянно. Для уменьшения размера сообщений в логах, exim специальным образом интерпретирует текст, если он начинается с <<, и, позднее, содержит >>. Текст между этими двумя строками пишется в лог, и оставшаяся часть текста используется в сообщении рикошета. Например:
fail "<<filter test 1>>Your message is rejected \
     because it contains attachments that we are \
     not prepared to receive."

   Используйте команду fail с большой осторожностью, когда решение о неудаче основано на содержимом сообщения, поскольку сообщение рикошета будет включать содержимое оригинального сообщения, и может снова вызвать команду fail (вызывая зацикливание почты), если не были приняты специальные меры для предотвращения этого. Тестирование условия error_message - один из путёй это предотвратить. Например, вы можете использовать
if $message_body contains "this is spam" and not error_message
then fail text "spam is not wanted here" endif

хотя, разумеется, могут проходить нежелетельные рикошеты. Альтернатива - умная проверка тела и/или заголовков для детектирования рикошетов сгенерённых фильтром.
   Интерпретация системного фильтра прекращается немедленно после выполнения команды
defer, freeze или fail. Однако, любые доставки, установленные ранее в фильтре - соблюдаются, таким образом, вы можете использовать последовательность типа
mail ...
freeze

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

43.6 Добавление и удаление заголовков в системном фильтре

   Две команды фильтра, которые доступны лишь в системных фильтрах, таковы:
headers add <string>
headers remove <string>

   Аргумент для headers add - строка, которая раскрывается, и, затем, добавляется к концу заголовков сообщения. Ответственностью разработчика фильтра является проследить за соответствием синтаксису RFC 2822. Начальные пробелы игнорируются, и если строка пуста, или раскрытие принудительно неудачно, команда не имеет эффекта.
   Вы можете использовать
\n внутри строки, сопровождаемый пробелом, для задания продолженных строк заголовков. Более чем один заголовок может быть добавлен в одной команде, путём включения \n в строке без пробелов. Например:
headers add "X-header-1: ....\n  \
             continuation of X-header-1 ...\n\
             X-header-2: ...."

   Отметьте, что строки заголовков продолжающие пробелы после первого символа новой строки должны быть помещены до обратного слэша, который продолжает строку ввода, поскольку пробелы после появления продолжения игнорируются.
   Аргумент для
headers remove - список имён заголовков, разделённых двоеточиями. Эта команда применяется лишь к тем заголовкам, которые сохраняются с сообщением; те, что добавляются в процессе доставки (типа Envelope-To: и Return-Path:) не могут быть удалены этим средством. Если есть более одного заголовка с одинаковым именем, они все удаляются.
   Команда
headers в системном фильтре, делает немедленные изменения строк заголовков, полученных с сообщением (с возможными дополнениями от обработки ACL). Последующие команды системного фильтра оперируют модифицированным набором заголовков, который, также, является основой для последующей доставки. Кроме последующей модификации в процессе роутинга или транспортировки, этот набор заголовков используется для всех получателей сообщения.
   В процессе роутинга и транспортировки, переменные, которые ссылаются на содержимое строк заголовков, ссылаются лишь на те строки, которые находятся в этом наборе заголовоков. Таким образом, строки заголовков, добавленные системным фильтром, видны в файлах пользовательских фильтров, и во всех роутерах и транспортах. Это - противоположно манипуляциям заголовками в роутерах и транспортах, которые не немедленные, а вместо этого, сохраняются вплоть до фактической записи сообщения (смотрите раздел 44.17).
   Если сообщение не доставляется в первую попытку, строки заголовоков, добавленные системным фильтром, сохраняются с сообщением, и, таким образом, остаются представленными в следующую попытку доставки. Удаленные строки заголовков остаются присутствовать, но помечены
deleted, таким образом, они не транспортируются с соообщением Для этого случая, обычно, команду headers делают зависимой от команды first_delivery так, чтобы строки заголовков не модифицировались более одного раза.
   Поскольку подификация заголовков в системном фильтре происходит немедленно, вы должны использовать косвенный подход, если хотите изменить содержимое строки заголовка. Например:
headers add "Old-Subject: $h_subject:"
headers remove "Subject"
headers add "Subject: new subject (was: $h_old-subject:)"
headers remove "Old-Subject"

43.7 Установка адреса ошибок в системном фильтре

   В системном фильтре, команда deliver вида
errors_to <some address>

может использоваться для изменения адреса отправителя конверта (и, следовательно, сообщеня о ошибках) для этой доставки, может быть задан любой адрес. (В пользовательском фильтре, может быть установлен лишь текущий адрес пользователя.) Например, если какая-то почта проверяется, вы могли бы использовать
unseen deliver monitor@spying.example errors_to root@local.example

для получения копии, которая не была бы послана обратно на обычный адрес ошибки, если доставка неудачна.

43.8 Фильтрация по адресам

   В отличие от системного фильтра, который запускается лишь один раз на сообщение для каждой попытки доставки, также возможно установить операцию фильтрации для всей системы, которая запускается один раз для каждого получателя адреса. В этом случае, могут использоваться переменные типа $local_part и $domain, и действительно, выбор файла фильтра может быть сделан зависимым от них. Это - пример роутера, который осуществляет такой фильтр:
central_filter:
  check_local_user
  driver = redirect
  domains = +local_domains
  file = /central/filters/$local_part
  no_verify
  allow_filter
  allow_freeze

   Фильтр запускается в отдельном процессе под собственным uid. Поэтому, любая опция check_local_user должна быть установлена (как выше), в случае когда фильтр выполняется от локального пользователя, или опция user должна определять, какой пользователь будет использоваться. Если заданы обе, user перезадаётся.
   Необходимо позаботится чтобы ни одна из команд в файле фильтра не определяет важную доставку, если сообщение доставляется его непосредственному получателю. Тогда роутер не будет требовать адрес, таким образом, оно будет передано последующим роутерам для доставки обычным способом.


=============
translated by lissyara
verifying by Gerk



Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=20.



Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 18 чел.
За последние 30 мин было: 76 человек
За сегодня было
4051 показов,
715 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.037 секунд
Из них PHP: 31%; SQL: 69%; Число SQL-запросов: 56 шт.
Исходный размер: 131739; Сжатая: 22573