|
|
www.lissyara.su
—> документация
—> EXIM
—> 4.70
—> filter facility
Exim's interfaces to mail filtering
1. Форвардинг и фильтрация в exim
1.1. Введенеие
1.2. Работа фильтра
1.3. Тестирование нового файла фильтра
1.4. Инсталляция файла фильтра
1.5. Тестирование проинсталлированного файла фильтра
1.6. Детали фильтрующих команд
2. Файлы фильтра sieve
2.1. Распознание фильтров sieve
2.2. Сохранение в заданные каталоги
2.3. Строки содержащие имена заголовков
2.4. Тест “exists ” с пустыми списками заголовков
2.5. Тесты заголовков с неверной кодировкой MIME в заголовке
2.6. Тестирование адреса для нескольких адресов на заголовок
2.7. Семантика “keep ”
2.8. Семантика “fileinto ”
2.9. Семантика “redirect ”
2.10. Строковые аргументы
2.11. Множественные единицы
2.12. Соответствие RFC
3. Файлы фильтра exim'a
3.1. Формат файлов фильтра exim'a
3.2. Значения данных в командах фильтра
3.3. Раскрытие строки
3.4. Некоторые полезные общие переменные
3.5. Переменные заголовков
3.6. Пользовательские перемeнные
3.7. Текущая директория
3.8. Важные доставки
3.9. Команды фильтра
3.10. Команда “add ”
3.11. Команда “deliver ”
3.12. Команда “save ”
3.13. Команда “pipe ”
3.14. Почтовые команды
3.15. Команды логгинга
3.16. Команда “finish ”
3.17. Команда “testprint ”
3.18. Команда “fail ”
3.19. Команда “freeze ”
3.20. Команда “headers ”
3.21. Удовлетворение условий команд
3.22. Условия тестирования строк
3.23. Тестирование числовых условий
3.24. Тестирование важных доставок
3.25. Тестирование на сообщения о ошибке
3.26. Тестирование списка адресов
3.27. Тестирование на персональность почты
3.28. Адреса альясов для персональных условий
3.29. Детали персональных условий
3.30. Тестирование статуса доставки
3.31. Пользовательские мультипочтовые ящики
3.32. Игнорирование ошибок доставки
3.33. Примеры команд фильтра exim'a
1 Форвардинг и фильтрация в exim
Этот документ описывает пользовательский интерфейс к встроенному средству фильтрации exim'a, и имеет копирайты University of Cambridge 2006. Это относится к exim версии 4.68.
1.1 Введение
Большинство почтовых агентов UNIX (программ, которые доставляют почту) дают возможность индивидуальным пользователям задать автоматический форвардинг их почты, обычно, путём помещения списка адресов форвардинга в файле с именем “.forward ” в их домашних директориях. Exim расширяет это средство, путём разрешения установки в инструкции форвардинга, более чем просто списка адресов, в смысле предоставления “.forward с условиями ”. Операция установки правил называется фильтрацией (filtering), а, файл который их содержит, называется файлом фильтра (filter file).
Exim поддерживает два различных вида файлов фильтра. Фильтр exim'a содержит инструкции в формате, который уникален для exim'a. Фильтр sieve содержит инструкции в формате Sieve, который задан в RFC3028. Так как это стандартный формат, фильтры sieve уже могут быть знакомы некоторым пользователям. Файлы sieve, также, могут быть портируемы между различными окружениями. Однако, средство фильтрации exim'a содержит больше особенностей (типа раскрытия переменных), и лучше интегрируются с окружением хоста (типа использования внешних процессов и труб).
Выбор, какой вид фильтра использовать, может быть оставлен конечному пользователю, при условии, что системный администратор сконфигурировал exim для обоих видов фильтра. Однако, если важна совместимость, sieve - единственный выбор.
Способность использовать фильтрацию, или традиционный форвардинг, может быть включена системным администратором, и некоторые индвидуальные средства могут быть отдельно включены или отключены. Текущий документ должен предоставить описание, что должно быть включено. В отсутствие этого, проконсультируйтесь у вашего системного администратора.
Этот документ описывает, как использовать файл фильтра, и формат его содержимого. Он предназначен для использования конечными пользователями. Охватываются оба - фильтры sieve и фильтры exim'a. Однако, для фильтров sieve, обсуждается лишь то, что воплощено в exim'e, с тех пор, как sieve описан самостоятельно.
Содержимое традиционных файлов “.forward ” тут не описывается. Они, обычно, содержат лишь список адресов, имён файлов, или команд труб, разделённых запятыми или новыми строками, но, также доступны иные типы элементов. Полная детализация может быть найдена в части спецификации exim'a, посвящённой роутеру “redirect ”, которая также описывает, как системный администратор может установить и контролировать использование фильтрации.
1.2 Работа фильтра
Обратите внимание на понимание того, в exim'e не происходят доставки при обработке файла фильтра, или традиционного файла “.forward ”. Работа фильтра или обработка традиционного файла “.forward ”, устанавливает дальнейшие операции доставки, но не проводит их.
Результат обработки фильтра или файла “.forward ” - список назначений, к которым будут доставлены сообщения. Сами доставки происходят позднее, вместе со всеми доставками для сообщения. Это означает, что невозможно тестирование успешной доставки при фильтрации. Также, это означает, что любые дубликаты адресов, которые сгенерированы - уничтожаются, поскольку exim никогда не доставляет то же смое сообщение на один и тот же хост более чем один раз.
1.3 Тестирование нового файла фильтра
Файлы фильтра, особенно в сложных случаях, всегда должны быть протестированы, для нахождения ошибок. Exim предоставляет средство для предварительного тестирования файла фильтра до его инсталляции. Тестируется синтаксис файла и его базовые операции, и, также, может быть использовано с традиционными файлами “.forward ”.
Поскольку фильтр может тестировать содержимое сообщения, требуется тестовое сообщение. Предполагается, что вы имеете новый файл фильтра, называемый “myfilter ”, и тестовое сообщение в файле с именем “test-message ”. Предполагается, что exim инсталлирован с обычным именем “/usr/sbin/sendmail ” (некоторые операционные системы используют “/usr/lib/sendmail ”), может быть использована следующая команда:
/usr/sbin/sendmail -bf myfilter <test-message
| Опция “-bf ” говорит exim'y, что следующий элемент командной строки - имя файла фильтра для тестирования. Также есть подобная опция “-bF ”, но используется для тестирования файлов системного фильтра, как противоположность пользовательским файлам фильтра, и по этой причине используется только системным администратором.
Тестовое сообщение предоставляется на стандартном вводе. Если в фильтре нет тестов зависящих от сообщения, может использоваться пустой файл ( “/dev/null ”). Предоставляемое сообщение должно начинаться со строк заголовков, или разделительной строки сообщения “From ”, которая находится во многих файлах каталогов мульти-сообщений. Отметтьте, что пустые строки завершают строки заголовков. Выдаётся предупреждающее сообщение, если нет прочитанных строк заголовков.
Результат запуска этой команды, при условии, что в файле фильтра не было обнаружено ошибок, - список действий, которые exim предпринял бы, если бы представленное сообщение было реальным. Например, для фильтра exim'a, вывод:
Deliver message to: gulliver@lilliput.fict.example
Save message to: /home/lemuel/mail/archive
| означает, что одна копия сообщения будет послана на “gulliver@lilliput.fict.example ”, и другая будет добавлена к файлу “/home/lemuel/mail/archive ”, если всё пройдёт хорошо.
Сами действия, при тестировании фильтра этим способом, не производятся; тут нет проверок, например, что любые адреса форвардинга действительны. Для фильтра exim'a, если вы хотите знать причины, почему были предприняты такие действия, добавьте к команде опцию “-v ”. Это заставляет exim выводить результаты любых условных тестов и к отступу вывода в зависимости от глубины вложенности команд “if ”. Дальнейший дополнительный вывод от тестирования фильтра мошет быть сгенерён путём команды “testprint ”, как описано ниже.
Когда exim выводит список действий которые он предпринял бы, если любые текстовые строки включены в вывод, непечатаемые символы конвертируются в их символьные последовательности. В частности, если любая текстовая строка содержит символ новой строки, в тестовом выводе он отображается как “\n ”.
При тестировании фильтра этим способом, exim создаёт “конверт ” ( “envelope ”) для сообщения. Получатель, по умолчанию, пользователь запустивший команду, он же и отправитель, но команда может запущена с опцией “-f ”, для предоставления иного отправителя. Например:
/usr/sbin/sendmail -bf myfilter \
-f islington@never.where <test-message
| Альтернативно, если не используется опция “-f ”, но первая строка предоставленного сообщения - разделитель “From ” файл каталога сообщений (не то же самое, что и строка заголовка “From: ”), отправитель берётся из неё. Если присутствует “-f ”, содержимое любых строк “From ” - игнорируется.
“return path ” - тоже самое что и отправитель конверта, если сообщение не содержит заголовка “Return-path: ”, в случае чего он берётся оттуда. Вам не нужно беспокоится о этом, если вы хотите тестировать возможности файла фильтра который полагается на адрес отправителя или путь возврата.
Возможно изменить получателя конверта, путём задания дальнейших опций. Опция “-bfd ” изменяет домен адреса получателя, тогда как опция “-bfl ” изменяет “локальную часть ” ( “local part ”), т.е. часть до символа “@ ”. Это может использоваться для тестирования некоторых файлов фильтра.
Опции “-bfp ” и “-bfs ” определяют преффикс или суффикс локальной части. Они уместны лишь когда осуществляется поддержка для мульти-персональных почтовых ящиков; смотрите описание в секции 3.31, ниже.
1.4 Инсталляция файла фильтра
Файл фильтра, обычно, инсталлируется под именем “.forward ”, в вашей домашней директории - он отличается от обычного файла “.forward ” первой строкой (описано ниже). Однако, имя файла конфигурируемо, и некоторые системные администраторы могут его изменить на какое-то иное имя, или местоположение для файлов фильтров.
1.5 Тестирование проинсталлированного файла фильтра
Тестирование файла фильтра до инсталляции не может выявить все потенциальные проблемы; например, реально не запускаются команды передачи сообщений в трубы. Некоторые “живые ” тесты следует провести когда фильтр проинсталлирован.
Если это возможно, протестируйте ваш фильтр путём посылки сообщений от одного из иных аккаунтов. Если вы посылаете сообщение себе от фильтруемого аккаунта, и доставка неудачна, сообщение о ошибке будет послано назад на тот же аккаунт, который может вызвать иную ошибку доставки. Это может вызвать бесконечную последовательность таких сообщений, поскольку сообщение о неудачной доставке самостоятельно генерирует последующие сообщения. Однако, обычно, что ошибка возвращается вам, и, что постмастер захочет исследовать приложенное сообщение.
Если вы хотите тестировать фильтр exim'a от того же самого аккаунта, разумная предострожность - включить строку
if error_message then finish endif
| как первую команду фильтра, возле тестирования. Это вызывает фильтрацию брошенных сообщений об ошибке доставки, и с тех пор не имеющих сгенерированного места назначения, сообщения не будут доставлены на оригинальный адрес. Если нет хорошей причины так не делать, рекомендуется делать вышеуказанный тест для всех файлов фильтров exim'a. (Это не применяется к файлам sieve.)
1.6 Детали фильтрующих команд
Команды фильтрации для фильтров sieve и exim совершенно различаются в синтаксисе и семантике. Механизм sieve определён в RFC3028; в следующей части мы описываем, как он интегрирован в exim. Последующие части детально охватывают фильтрацию exim'a.
2 Файлы фильтра sieve
Код для фильтрации sieve в exim был пожертвован Michael Haardt, и большинство содержимого этой части взято из примечаний, которые он предоставил. Поскольку sieve - расширяемый язык, обратите внимание на понимание “Sieve ” в этом контексте как “специфическая реализация Sieve для Exim ” ( “the specific implementation of Sieve for Exim ”).
Эта часть не содержит описание sieve, поскольку оно может быть найдено в RFC3028, который может быть прочитан вместе с этими примечаниями.
Реализация exim sieve представляет ядро описанное в RFC3028, сравнительные тесты, расширения “copy ”, “envelope ”, “fileinto ”, и “vacation ”, но не расширение “reject ”. Exim не подерживает уведомления о доставке сообщений (MDNs), таким образом добавление этого к фильтру sieve (как требуется для “reject ”) вызовет недоразумение.
С целью корректной работы sieve в exim системному администратору необходимо создать некоторые настройки в конфигурации exim'a. Это описано в части роутера “redirect ”, в полной спецификации exim'a.
2.1 Распознание фильтров sieve
Файл фильтра интерпретируется как фильтр sieve, если его первая строка
Это - отличает его от обычного файла “.forward ”, или файла фильтра exim'a.
2.1 Сохранение в заданные каталоги
Если системный администратор сделал установки как описано в спецификации exim'a, и вы используете “keep ” или “fileinto ” для сохранения почты в директорию, абсолютные файлы сохраняются где задано, относительные файлы сохраняются в “$home ” и “inbox ” находится в стандартном местоположени почтового ящика.
2.3 Строки содержащие имена заголовков
RFC3028 не определяет, что происходит если строка указывает на поле заголовка не содержащее допустимое имя заголовка, например, оно содержит двоеточие. Эта реализация генерирует ошибку, вместо игнорирования поля заголовка, с целью облегчить отладку скриптов, которые вписаны в общую реализацию sieve.
2.4 Тест “exists ” с пустыми списками заголовков
Тест “exists ” успешен лишь если все заданные заголовки существуют. RFC3028 неясно определяет что происходит на пустом списке заголовков. Эта реализация вычисляет, условие как истинное, интерпретируя RFC в строгом смысле.
2.5 Тесты заголовков с неверной кодировкой MIME в заголовке
Некоторые MUA обрабатывают данные неправильно закодированные base64, генерируя чушь. Иные - игнорируют хлам после символа равно в данных кодированных base64. RFC2047 не определяет как реагировать в этом случае, лишь заявляет, что клиент не должен запрещать обработку сообщения по этой причине. RFC2045 определяет, что неверные даные должны быть проигнорированы (повидимому, найдя конец строки символов). Также он определяет, что неверные данные могут вызвать отклонение сообщения с ними (и там он указывает на переговоры о истинном нарушении кодирования), что начисто противоречит их игнорированию.
RFC3028 не определяет как обрабатывать некорректные слова MIME. Эта реализация обращается с ними буквально, как будто слова корректны, но их набор символов не может быть конвертирован в UTF-8.
2.6 Тестирование адреса для нескольких адресов на заголовок
Заголовок может содержать несколько адресов. RFC3028 неясно определяет как с ними работать, но затем адреса тестируются проверкой, если что угодно совпадает с чем-то ещё, совпадение одного адреса хватает для удовлетворения условия. Тестирование становится невозможным если заголовок содержит некоторый набор адресов и не более, но он более логичен чем позволение неудачи теста если заголовок содержит дополнительные адреса, кроме того для которого проводилось тестирование.
2.7 Семантика “keep ”
Команда “keep ” эквивалентна
Она сохраняет сообщение и сбрасывает неявный флаг keep. Она не устанавливает неявный флаг keep; нет команды для установки его как только он был сброшен.
2.8 Семантика “fileinto ”
RFC3028 не определяет должен ли “fileinto ” пробовать создать почтовую директорию, если она не существует. Эта реализация позволяет системным администраторам конфигурировать использование опций “create_directory ”, “create_file ” и “file_must_exist. ” транспорта “appendfile ”. Для дополнительных деталей, смотрите транспорт “appendfile ” в спецификации exim'a.
2.9 Семантика “redirect ”
Скрипты sieve предполагаются совместимыми между серверами, таким образом эта реализация не позволяет редирект почты на неквалифицированные адреса, поскольку домен зависит от используемой системы. На системах с виртуальными почтовыми доменами, дефолтовый домен, вероятно, не то, что ожидает пользователь.
2.10 Строковые аргументы
Могут быть недоразумения, если строка аргументов к “require ” сравнивается регистрозависимо или регистронезависмо. Эта реализация сравнивает их с типом сравнения “:is ” (значение по умолчанию, смотрите раздел 2.7.1 RFC) и компаратором “i;ascii-casemap ” (значение по умолчанию, смотрите раздел 2.7.3 RFC). RFC ясно определяет дефолтовую команду, таким образом, любые отличающиеся реализации грубо нарушают RFC3028. То же самое каасается имён компатарторов, также заданных как строки.
2.11 Множественные единицы
В RFC3028 есть ошибка: суффикс “G ” означает гига-, а не терабайт. Эта ошибка очевидна, поскольку RFC3028 определяет “G ” как означающее 2^30 (что является гига, а не тера) и это - то, что данная реализация использует как фактор масштабирования для суффикса “G ”.
2.12 Соответствие RFC
Exim требует, чтобы первая строка фильтра sieve была:
Разумеется, RFC не определяют эту строку. Однако, не ожидайте, что примеры будут работать без её добавления.
RFC3028 требует использования CRLF для завершения строки. Рационально, что CRLF универсально используется в сетевых протоколах для обозначения конца строки. Эта реализация не встраивает sieve в сетевой протокол, а использует скрипты sieve как часть MTA exim. Поскольку все части exim используют LF как символ новой строки, эта реализация делает точно также, по умолчанию, что может изменить системный администратор (во время компиляции exim'a), для использования вместо этого - CRLF.
Exim нарушает RFC2822, секцию 3.6.8, путём приёма 8-ми битных имён заголовков, таким образом, эта реализация повторяет это нарушение для сохранения совместимости с exim. Это - подготовка к данным в UTF-8.
Скрипты sieve не могут содержать символы NUL в строках, но почтовые заголовки могут содержать символы NUL закодированные MIME, которые никогда не смогут совпасть со скриптами sieve, использующими точное сравнение. По этой причине, эта реализация расширяет синтаксис экранированных строк sieve на “\0 ” - для описания символа NUL, нарушение “\0 ” создаёт тоже самое что и 0 в RFC3028. Одинаковые без использования “\0 ”, следующие тесты все истинны в этой реализации. Реализации которые используют строки С-стиля приводят лишь к оценке первого теста как истинного.
Subject: =?iso-8859-1?q?abc=00def
header :contains "Subject" ["abc"]
header :contains "Subject" ["def"]
header :matches "Subject" ["abc?def"]
| Отметтьте, что учитывая что sieve бывает в MUA, RFC2074 может быть интерпретировано, что NUL символы укорачивающие строку разрешены для реализаций sieve, однако не рекомендуются. В будущем, позволяется использование кодированных символов NUL в заголовках, но это не рекомендуется. Примеры выше показывают как.
RFC3028 сообщает, что если реализация не в сосотоянии конвертировать набор символов в UTF-8, две строки не могут быть эквивалентны, если одна содержит октеты более чем 127. Предполагается, что все неизвестные наборы символов - однобайтовые наборы символов, с нижними 128 октетами не существующими в US-ASCII, таким образом эта реализация нарушает RFC3028 и обрабатывает такие слова MIME буквально. Этим способом они иногда могут сравнены.
Директория определеённая путём “fileinto ” не должна содержать последовательность символов “.. ”, для избежания проблем с безопасностью. RFC3028 не определяет синтаксис директорий, отделяя “keep ” эквивалентом к
Эта реализация вместо этого использует “inbox ”.
Ошибки скриптов sieve, сейчас, вызывают тихое помещение сообщений в “inbox ”. RFC3028 требует, чтобы пользователь был уведомлён об этом условии. Это может быть реализовано в будущем, путём добавления строки заголовка к почте, которая была помещена в “inbox ” из-за ошибок в фильтре.
3 Файлы фильтра exim'a
Эта часть содержит полное описание содержимого файлов фильтра exim'a.
3.1 Формат файлов фильтра exim'a
Отдельно от начального пустого постранства, первый текст в файле фильтра exim'a должен быть
Это - то, что отличает его от обычного файла “.forward ”, или файла фильтра sieve. Если у файла нет этой начальной строки (или эквивалентной для фильтра sieve), он обрабатывается как обычный файл “.forward ”, и тот и другой, когда доставляется почта, и когда используется механизм тестирования “-bf ”. Пустое пространство в строке - опционально, и может использоваться любая капитализация (Слово capitalization - переводится однозначно, и что оно значит в этом предложении - я не знаю - прим. lissyara). Дальнейший текст в этой строке обрабатывается как комментарий. Например, вы могли бы иметь
# Exim filter <<== do not edit or remove this line!
| Оставшаяся часть файла - последовательность фильтрующих команд, которые состоят из ключевых слов и значений данных. Например, в команде
deliver gulliver@lilliput.fict.example
| ключевое слово - “deliver ”, и значение данных - “gulliver@lilliput.fict.example ”. Пустое пространство или новые строки отделяются от компонентов команд, исключая случай условия для команды “if ”, где круглые скобки также действуют как разделители. Полные команды отделяются от каждой другой путём пустого пространства или перевода строки; нет специальных терминаторов. Таким образом, некоторые команды могут находится в одной строке, или одна команда может располагаться на нескольких строках.
Если символ “# ” сопровождает разделитель где угодно в команде, всё, что следует за “# ” до следующего символа новой строки - игнорируется. Это предоставляет способ включения комментариев в файл фильтра.
3.2 Значения данных в командах фильтра
Есть два способа, которыми значения данных могут быть введены:
Если текст не содержит пустого пространства, они могут быть набраны дословно. Однако, если это - часть условия, оно также должно быть свободно от круглых скобок, так как они используются для группирования в условиях.
Иначе, текст должен быть заключён в двойные кавычки. В этом случае, символ “\ ” (обратный слэш) обрабатывается как “экранирующий символ ” ( “escape character ”) в строке, вызывая специальную обработку следующего символа, или символов:
последовательность
|
значение
|
\n
|
замещается на новую строку
|
\r
|
замещается на возврат каретки
|
\t
|
замещается на табуляцию
|
|
Обратный слэш сопровождаемый тремя восьмеричными цифрами - замещается на символ определённый этими цифрами, и “\x ” сопровождаемый вплоть до двух шестнадцатеричных цифр - обрабатывается подобным образом. Обратный слэш сопровождаемый иными символами - замещается на второй символ, таким образом, в частности, “\" ” превращается в “" ”, и “\\ ” превращается в “\ ”. Элементы данных помещённый в двойные кавычки могут быть продолжены на следующей строке путём завершения первой строки обратным слэшом. Любое начальное пустое пространство в начале строки продолжения - игнорируется.
В дополнение к символу экранирования, обрабатывающему, что происходит когда строка помещена в кавычки, много значений данных подчиняются “раскрытию строк ” ( “string expansion ”, как описано в следующей секции), в случае чего символы “$ ” и “\ ” - также многозначимы. Это способ, если действительно в строке требуется один символ обратного слэша, и строка, также помещена в кавычки, должена быть введена последовательность “\\\\ ”.
Максимальная разрешённая длинна строки данных до раскрытия - 1024 символа.
3.3 Раскрытие строки
Большинство значений данных раскрываются до использования. Раскрытие состоит из замещения подстрок начинающихся на “$ ”, иным текстом. Полные средства раскрытия, доступные в exim'e - обширны. Если вы хотите знать всё, что exim может делать со строками, вы должны проконсультироваться с частью посвящённой раскрытию строк, в документации exim'a.
В файлах фильтра, наиболее частым использованием раскрытия строк является замещение содержимого переменных. Например, подстановка
заменяется адресом, на который должны быть посланы ответы на сообщение. Если имя переменной сопровождается буквой, цифрой, или подчёркиванием, оно должно быть помещено в фигурные скобки, например
Если символ “$ ” реально требуется в раскрываемой строке, он должен быть экранирован обратным слэшом, и, поскольку обратный слэш также экранируется внутри кавычек в вводимых строках, в этом случае, он должен быть удвоен. Следующие два примера иллюстрируют два различных пути тестирования на символ “$ ” в сообщении:
if $message_body contains \$ then ...
if $message_body contains "\\$" then ...
| Вы можете предотвратить часть строки от раскрытия, путём помещения её между двумя “\N ”. Например,
if $message_body contains \N$$$$\N then ...
| тестирует на четыре символа доллара.
3.4 Некоторые полезные общие переменные
Полный список переменных доступен в документации exim'a. Это - сокращённый список наиболее полезных в персональном файле фильтра:
“$body_linecount ”: Число строк в теле сообщения.
“$body_zerocount ”: Число символов бинарных нулей в теле сообщения.
“$home ”: В обычных конфигурациях, эта переменная, обычно, содержит пользовательскую домашнюю директорию. Однако, системный администратор может это изменить.
“$local_part ”: Часть почтового адреса которая предшествует символу “@ ”, обычно, логин пользователя. Если включена поддержка мультиперсональных ящиков (смотрите ниже, секцию 3.31) и преффикс или суффикс локальной части распознан, он удаляется из строки в этой переемнной.
“$local_part_prefix ”: Если включена поддержка мультиперсональных ящиков (смотрите ниже, секцию 3.31) и преффикс или суффикс локальной части распознан, эта переменная содержит преффикс. Иначе, она содержит пустую строку.
“$local_part_suffix ”: Если включена поддержка мультиперсональных ящиков (смотрите ниже, секцию 3.31) и преффикс или суффикс локальной части распознан, эта переменная содержит суффикс. Иначе, она содержит пустую строку.
“$message_body ”: Начальная часть тела сообщения. По умолчанию, в эту перемнную считывается до 500 символов, но системный администратор может сконфигурировать иное значение. Новые строки в теле, конвертируются в единичные пробелы.
“$message_body_end ”: Финальная часть тела сообщения, отформатированная и ограниченная тем же способом что и “$message_body ”.
“$message_body_size ”: Размер тела сообщения, в байтах.
“$message_exim_id ”: Локальная идентификационная строка сообщения, которая уникальна для каждого сообщения обрабатываемого одним хостом.
“$message_headers ”: Строки заголовоков сообщения, объединённые в одну строку, с символами новой строки между ними.
“$message_size ”: Размер всего сообщения, в байтах.
“$original_local_part ”: Когда адрес который прибывает с сообщением обрабатывается, эта переменная содержит то же самое значение, что и переменная “$local_part ”. Однако, если адрес сгенерирован путём альясинга, форвардинга, или обработки файла фильтра, эта переменная содержит локальную часть оригинального адреса.
“$reply_address ”: Содержимое заголовка “Reply-to: ”, если сообщение его содержит; иначе, содержимое заголовка “From: ”. Это - адрес, на который обычно посылаются ответы на сообщение.
“$return_path ”: Путь возврата, это - поле, отправителя, которое было передано как часть конверта сообщения, если сообщение послано на иной хост. Это - адрес, на который отправляются ошибки доставки. Во многих случаях, эта переменная имеет то же значение, что и “$sender_address ”, но если, например, раскрывается входящее сообщение на список рассылки, “$return_path ” может быть изменено на адрес ответственного за список рассылки.
“$sender_address ”: Адрес отправителя, который был принят в конверте сообщения. Это - не обязательно содержимое строк заголока “From: ” или “Sender: ”. Для доставки сообщений о ошибке ( “рикошетов ”), у них нет адреса отправителя, и эта переменная пуста.
“$tod_full ”: Полная версия времени и даты, например: Wed, 18 Oct 1995 09:51:40 +0100. Временная зона, всегда даётся как числовое смещение от GMT.
“$tod_log ”: Время и дата в формате используемом для записи в файлы логов exim'a, без временной зоны, например: 1995-10-12 15:32:29.
“$tod_zone ”: Смещение локальной временной зоны, например: +0100.
3.5 Переменные заголовков
Это - специальный набор раскрываемых переменных, содержащих строки заголовков при обработке сообщения. Эти переменные имеют имена начинающиеся с “$header_ ”, сопровождаемое именем строки заголовка, завершаемое двоеточием. Например,
$header_from:
$header_subject:
| Весь элемент, включая завершающее двоеточие, заменяется содержимым строки заголовка. Если есть более одного заголовка с одним и тем же именем, их содержимое объединяется. Для строк заголовков, чьи данные состоят из списка адресов (например, “From: ” и “To: ”), запятые и символы новой строки вставляются между каждым набором адресов. Для всех других строк заголовоков, используется лишь символ новой строки.
Начальное и завершающее пустое пространство - удаляется из данных строки заголовка, и если в них есть любые слова MIME, которые закодированы как задано в RFC2047 (поскольку они содержат не-ASCII символы), они декодируются и переводятся, если возможно, в локальную кодировку. Попытка перевода предпринимается лишь в операционных системах, которые обладают функцией “iconv() ”. Это создаёт такой же поиск по строкам заголовков, как и при показе MUA. Дефолтовая кодировка устанвливается в ISO-8859-1, но это может быть изменено средством команды “headers ” (смотрите ниже).
Если вы хотите видеть фактическую кодировку, в которой созданы строки заголовков, вы можете определить “$rheader_ ” вместо “$header_ ”. Этим вставляются “сырые ” ( “raw ”) строки заголовков, немодифицированные.
Также есть промежуточная форма, запрашиваемая путём “$bheader_ ”, с удалёнными начальными и конечными пробелами, и декодированными “словами ” MIME, но не переведённой кодировкой. Если попытка декодирования того, что на первый взгляд показалось “словами ” MIME - неудачна, возвращается сырая строка. Если декодирование производит бинарные нули, они заменяются знаком вопроса.
Капитализация (невкурил - но перевод именно такой - прим. lissyara) следующего за “$header_ ” - несущественна. Поскольку любые печатные символы, исключая двоеточие, могут находится в имени заголовка сообщения (это - требование RFC2822, документ описывает формат почтовых сообщений), в этом случае не должны использоваться фигурные скобки, так как они будут взяты как часть имени заголовка. Два укорочения (блин - несмог подобрать более корректное слово - прим. lissyara) разрешены в именовании переменных заголовков:
Начальные “$header_ ”, “$rheader_ ”, или “$bheader_ ” могут быть заменены “$h_ ”, “$rh_ ”, или “$bh_ ”, соответственно.
Завершающее двоеточие может быть опущено, если следующий символ - пустое пространство. Символ пустого пространства поддерживается в раскрываемых строках. Однако, это не рекомендуется, поскольку вы можете забыть двоеточие когда оно действительно необходимо.
Если сообщение не содержит заголовок с данным именем, подставляется пустая строка. Это важно для корректного правописания имён заголовков. Не используйте “$header_Reply_to ”, когда вам реально нужен “$header_Reply-to ”.
3.6 Пользовательские перемeнные
Есть десять пользовательских переменных с именами “$n0 ” - “$n9 ”, число которых может быть увеличено путём команды “add ” (смотрите секцию 3.10). Они могут использоваться для “подсчёта очков ” сообщения, различными способами. Если exim сконфигурирован на работу системного фильтра ( “system filter ”) для каждого сообщения, значения в этих переменных копируются в переменные “$sn0 ” - “$sn9 ” в конце системного фильтра, таким образом, делая их доступными в пользовательских фильтрах. Как эти переменные используются - полностью зависит от индивидуальной инсталляции.
3.7 Текущая директория
Содержимое вашего файла фильтра не должно предполагать какую-то рабочую директорию. Лучше всего - использовать абсолютные пути для имён файлов; вы можете использовать переменную “$home ” обычным способом, для ссылки на вашу домашнюю директорию. Команда “save ” автоматически вставляет “$home ” в начало всех неабсолютных путей.
3.8 Важные доставки
Когда в ходе доставки сообщение обрабатывается файлом фильтра, то, что происходит дальше, т.е. после обработки файлом фильтра, зависит от того, установил ли фильтр какие-либо “важные доставки ” ( “significant deliveries ”). Если установлена хоть одна важная доставка, фильтр подготовливается к обработке доставки для текущего адреса, и дальнейшая обаботка более не имеет места. Однако, если нет установленных важных доставок, exim продолжает обработку текущего адреса как будто не было файла фильтра, и, обычно, производит доставку копии сообщения в локальный почтовый ящик. В частности, это происходит в специальном случае, когда файл фильтра содержит лишь комментарии.
Команды доставки - “deliver ”, “save ” и “pipe ”, по умолчанию - важные. Однако, если такой команде предшествует слово “unseen ”, эта доставка не рассматривается как важная. В противоположность, иные команды, типа “mail ” и “vacation ” не устанавливают важность доставки, если им не предшествует слово “seen ”. Следующие примеры команд устанавливают важные доставки:
deliver jack@beanstalk.example
pipe $home/bin/mymailscript
seen mail subject "message discarded"
seen finish
| Следующие примеры команд не устанавливают важные доставки:
unseen deliver jack@beanstalk.example
unseen pipe $home/bin/mymailscript
mail subject "message discarded"
finish
|
3.9 Команды фильтра
Команды фильтра которые описаны в последующих секциях, перeчисланы ниже, секция, где они описаны - в круглых скобках:
“add ” - увеличивает пользовательскую переменную (секция 3.10)
“deliver ” - доставка на почтовый адрес (секция 3.11)
“fail ” - принудительная ошибка доставки (используется системным администратором) (секция 3.18)
“finish ” - конец обработки (секция 3.16)
“freeze ” - заморозка сообщения (используется системным администратором) (секция 3.19)
“headers ” - установить кодировку заголовков (секция 3.20)
“if ” - условие(-я) тестирования (секция 3.21)
“logfile ” - задать файл логов (секция 3.15)
“logwrite ” - записать в лог файл (секция 3.15)
“mail ” - послать ответное сообщение (секция 3.14)
“pipe ” - труба к команде (секция 3.13)
“save ” - сохранить в файл (секция 3.12)
“testprint ” - напечатать при тестировании (секция 3.17)
“vacation ” - заказная форма “mail ” (секция 3.14)
Команда “headers ” имеет дополнительные параметры, которые могут использоваться лишь в системном фильтре. Команды “fail ” и “freeze ” доступны лишь когда средство фильтрации exim'a используется как системный фильтр, и, поэтому, используется лишь системным администратором, а не обычными пользователями. Они упоминаются лишь в этом документе; для дополнительной информации, смотрите главную спецификацию exim'a.
3.10 Команда “add ”
add <number> to <user variable>
e.g. add 2 to n3
| Есть 10 пользовательских переменных этого типа, с именами “$n0 ” - “$n9 ”. Их значения могут быть получены путём обычного синтаксиса раскрытия (например, “$n3 ”) в этих командах. В начале фильтрования, все эти переменные содержат ноль. Оба аргумента команды “add ” раскрываются до начала использования, делая возможным добавление переменной к самой себе. Вычитание может приводить к добавлению отрицательных чисел.
3.11 Команда “deliver ”
deliver <mail address>
e.g. deliver "Dr Livingstone <David@somewhere.africa.example>"
| Эта команда обеспечивает операцию форвардинга. Доставка устаналивается важной, если команде не предшествует “unseen ” (смотрите раздел 3.8). Сообщение шлётся на данный адрес, точно также, как происходит если адрес появился в традиционном файле “.forward ”. Если вы хотите доставить сообщение к нескольким различным адресам, вы можете использовать несколько, а не одну команду “deliver ” (каждый может иметь лишь один адрес). Однако, от повторяющихся адресов - отказываются.
Для доставки копии сообщения в ваш обычный почтовый ящик, ваше имя логина должно быть дано как адрес. Один раз адрес обрабатыватся механизмом фильтрации, идентичный сгенерированный адрес не будет обработан снова, таким образом не вызывая петель.
Однако, если вы обладаете почтовым альясом, вы не должны ссылаться на него. Например, если почтовый адрес “L.Gulliver ” приводит к альясу на “lg303 ”, затем все ссылки в файле “.forward ” Gulliver`a должны быть на “lg303 ”. Ссылки на альяс не работают для сообщений которые адресованы на этот альяс, поскольку, как и обработка файл “.forward ”, альясинг выполняется лишь раз для адреса, для предотвращения петель.
Может появляться, опционально, следующий новый адрес, второй адрес, с предшествующим “errors_to ”. Этим изменяется адрес, на который посылаются ошибки доставки форвардившихся сообщений. Вместо отправки сообщения оригинальному отправителю, они идут на новый адрес. Для обычных пользователей, разрешено лишь значение пользователя которому принадлежит обрабатываемый фильтр. Например, пользователь “lg303 ”, чей почтовый ящик в домене “lilliput.example ” мог бы иметь файл фильтра, который содержит
deliver jon@elsewhere.example errors_to lg303@lilliput.example
| Очевидно, использование этой особенности имеет смысл лишь в ситуациях, когда не все сообщения форвардятся. В частности, рикошеты не должны форвадится этим способом, так как вероятны почтовые петли, если что-то пойдёт не так.
3.12 Команда “save ”
save <file name>
e.g. save $home/mail/bookfolder
| Эта команда определяет, что копия сообщения будет добавлена к заданному файлу (т.е., файл будет использован как почтовая директория). Доставка которая установлена “save ” - важна, если команде не предшествует “unseen ” (смотрите раздел 3.8).
Может быть более одной команды “save ”; каждая вызывает запись копии сообщения в файл являющийся её аргументом, при условии, что они различны (дублирующиеся команды “save ” - игнорируются).
Если имя файла не начинается с символа “/ ”, добавляется содержимое переменной “$home ”, если она не пуста. В обычных конфигурациях, эта переменная, обычно, установлена в пользовательском фильтре в пользовательскую домашнюю директорию, но системный администратор может установить её в другой путь. В некоторых конфигурациях, “$home ” может быть незадана, в случае чнго могут быть сгенерированы неабсолютные пути. Такие конфигурации конвертируют его в абсолютный путь, когда имеет место доставка. В системном фильтре, “$home ” никогда не установлена.
Пользователь, разумеется, должен обладать разрешением записывать в файл, и запись файла происходит в процессе работающем от пользователя, под основной группой пользователя. Любые вторичные группы, к которым может принадлежать пользователь, обычно, не используются в аккаунте, однако, системный администратор может сконфигурировать exim для их установки. В дополнение, способность использовать эту команду всеми, контролируется системным администратором - она может быть запрещена на некоторых системах.
Опциональное значение режима, может быть задано после имени. Значение режима интерпретируется как восьмеричное число, даже если оно не начинается с нуля. Например:
Это даёт возможность пользователям перезадавать общесистемный режим для доставки в файл, который обычно 600. Если существующий файл не имеет корректный режим, он изменяется.
Альтернативная форма доставки может быть включена на вашей системе, в которых каждое сообщение доставляется в новый файл в заданной директории. В этом случае, эта функциональность может быть запрошена путём задания, после команды “save ”, имени директории, завершаемой слэшом, например:
Есть несколько различных форматов для таких доставок; проконсультируйтесь с вашим системным администратором, или локальной документацией чтобы узнать, какая (или какие) доступны в вашей системе. Если эта функциональность не включена, использование пути завершающегося слэшом вызывает ошибку.
3.13 Команда “pipe ”
pipe <command>
e.g. pipe "$home/bin/countmail $sender_address"
| Эта команда определяет, что сообщение будет доставлено к заданной команде, используя трубу. Доставка, которую она устанавливает, - важна, если команде не предшествует “unseen ” (смотрите раздел 3.8). Помните, однако, что доставки не закончатся пока обрабатывается фильтр. Все доставки происходят позже. Таким образом, результат работы трубы недоступен в фильтре.
Когда доставки завершены, запускается отдельный процесс, и копия сообщения передаётся на стандартный ввод. Процесс работает от пользователя, под первичной группой пользователя. Любые вторичные группы, к которым может принадлежать пользователь, обычно, не используются в аккаунте, однако, системный администратор может сконфигурировать exim для их установки. Может быть более одной команды “pipe ”; каждая вызывает запись копии сообщения в аргумент “pipe ”, при условии, что они различны (дублирующиеся команды “pipe ” - игнорируются).
Когда приходит время транспортировки сообщения, команда предоставленная “pipe ” разделяется exim'ом на имя команды и несколько аргументов. Они разделяются пустым пространством, исключая аргументы в двойных кавычках, в случае чего обратный слэш интерпретируется как символ экранирования, или в одиночных кавычках, в случае чего экранирование не распознаётся. Отметтьте, что вся команда, обычно, предоставляется в двойных кавычках, второй уровень помещения в кавычки - требуется для внутренних двойных кавычек. Например:
pipe "$home/myscript \"size is $message_size\""
| Раскрытие строки выполняет отдельные компоненты после разделения строки, после чего команда запускается непосредственно exim'ом, она не запускается под шеллом. Поэтому, подстановка не может изменить число аргументов, ни кавычек, обратных слэшей, или иных метасимволов shell в переменных, вызывая недоразумение.
Документация для некоторых программ, которые обычно запускаются через этот вид трубы, часто советует что команда должна начинаться с
Это - команда shell, и она не должна присутствовать в файлах фильтра exim'a, поскольку ему ненормально запускать команду под shell.
Однако, есть опция, которую администратор может установить, вызывая использование shell. В этом случае, вся команда раскрывается как одна строка, и передаётся shell`y для интерпретации. Этого рекомендуется избегать всегда, когда возможно, поскольку это может вызвать проблемы, когда вставленные переменные сожержат метасимволы shell`a.
Дефолтовая PATH устанавливаемая для команды - определяется системным администратором, обычно содержит,самое малое, “/bin ” и “/usr/bin ”, таким образом, большинство команд доступны без задания полного пути имени файла. Однако, системный администратор может ограничить средство трубы, так, что имя команды не сможет содержать любые символы “/ ”, и должно быть найдено в одной из директорий в сконфигурированном PATH. Системный администратор также может вообще заблокировать использование команды “pipe ”.
Когда команда запущена, установлено множество переменных окружения. Полный список для доставок в трубы может быть найден в руководстве exim'a. Те, которые могут быть полезны для доставок “pipe ” из файлов пользовательских фильтров, таковы:
Имя
|
Значение
|
DOMAIN
|
домен адреса
|
HOME
|
ваша домашняя директория
|
LOCAL_PART
|
смотрите ниже
|
LOCAL_PART_PREFIX
|
смотрите ниже
|
LOCAL_PART_SUFFIX
|
смотрите ниже
|
LOGNAME
|
ваше имя логина
|
MESSAGE_ID
|
уникальный идентификатор сообщения
|
PATH
|
путь поиска команды
|
RECIPIENT
|
полный адрес получателя
|
SENDER
|
отправитель сообщения
|
SHELL
|
/bin/sh
|
USER
|
смотрите ниже
|
|
LOCAL_PART, LOGNAME, и USER установлены в одно и то же значение, а именно, в ваш логин. LOCAL_PART_PREFIX и LOCAL_PART_SUFFIX могут быть установлены, если exim скнфигурирован распознавать префиксы или суффиксы локальных частей адресов. Например, сообщение адресованное на “pat-suf2@domain.example ” может вызвать запуск фильтра для пользователя “pat ”. Если установлена доставка в “pipe ”, LOCAL_PART_SUFFIX будет “-suf2 ”, когда работает команда трубы. Системный администратор должен специально сконфигурировать exim для доступности этой особенности.
Если вы запускаете команду, которая является скриптом shell, будте очень осторожны в использовании данных из входящего сообщения в командах вашего скрипта. RFC2822 очень щедро в символах, которым разрешено появляться в почтовых адресах, и, в частности, адрес пожет начинаться с вертикальной черты, или слэша. По этой причине, вы всегда должны окружать кавычками любые аргументы, которые связаны с данными сообщения, как тут:
таким образом, метасимволы shell не вызовут неожиданных эффектов.
Запомните, что ранее объяснявшаяся команда трубы не запускается во время интерпретации файла фильтра. Фильтр лишь определяет, какие доставки требуются для одного из частных адресов сообщения. Сами доставки происходят позднее, когда exim htibn что всё что необходимо сообщению - завершено.
В следствии этого, вы не можете проверять код возврата из команды трубы, внутри фильтра. Тем не менее, код возврата команды - важен, поскольку exim использует его для принятия решения - была ли доставка удачной или неудачной.
Команда должна возвращать код завершения ноль, если всё прошло успешно. Большинство ненулевых кодов рассматриваются exim'ом как индицирующие ошибку трубы. Это - рассматривается как неудача доставки, вызывая возврат сообщения к отправителю. Однако, есть некоторые коды, которые рассматриваются как временные ошибки. Сообщение остаётся на диске, в спуле exim'a, и доставка пробуется снова, позднее, пока время повторов ошибки доставки не будет слишком долгим. Окончательный код для этого случая может быть задан системным администратором, значение по умолчанию - 73 и 75.
Команда трубы, обычно, не должна ничего записывать в свой стандартный выод или файловый дескриптор стандартной ошибки. Если это происходит, вне зависмости от записанного, оно, обычно, возвращается отправителю как ошибка доставки, хотя это действие может быть изменено системным администратором.
3.14 Почтовые команды
Есть две команды, которые вызывают создание нового почтового сообщения, каждай из которых считается важной доставкой, если команде не предшествует “seen ” (смотрите раздел 3.8). Это - мощщное средство, но оно должно использоваться с осторожностью, поскольку есть опасность создания бесконечных последовательностей сообщений. Системный администратор может полностью запретить использование этих команд.
Для помощи в избежении последовательности сообщений, эти команды не имеют силы, когда когда входящее сообщение - рикошет (сообщение о ошибке доставки), и сообщения посылаемые этим способом, обрабатываются как отчёт о ошибке доставки. Таким образом, они не вызывают возврата рикошетов. Базовая команда посыла почты - такова:
mail [to <address-list>]
[cc <address-list>]
[bcc <address-list>]
[from <address>]
[reply_to <address>]
[subject <text>]
[extra_headers <text>]
[text <text>]
[[expand] file <filename>]
[return message]
[log <log file name>]
[once <note file name>]
[once_repeat <time interval>]
e.g. mail text "Your message about $h_subject: has been received"
| Каждый “<address-list> ” может содержать несколько адресов, разделённых запятыми, в формате строк заголовков “To: ” и “Cc: ”. Фактически, текст, который вы тут помещаете, копируется с воответствующие строки заголовоков. Он может содержать дополнительную информацию, как почтовый адрес. Например:
mail to "Julius Caesar <jc@rome.example>, \
<ma@rome.example> (Mark A.)"
| Подобным образом, текст предоставленный для “from ” и “reply_to ” копируется в соответтсвующие строки заголовков.
Для удобства использования в большинстве случаев, также есть команда с именем “vacation ”. Она ведёт себя таким же образом как и “mail ”, за исключением что по умолчанию опции “subject ”, “file ”, “log ”, “once ” и “once_repeat ”, таковы:
subject "On vacation"
expand file .vacation.msg
log .vacation.log
once .vacation
once_repeat 7d
| соответственно. Те же самые имена файлов м периоды повторов используются традиционной командой UNIX “vacation ”. Значения по умолчанию могут быть перезаданы явным заданием установок, но если дано имя файла, его содержимое раскрывается лишь если запрошено явно.
Предупреждение: Команда “vacation ” всегда должна использоваться условно, подчиняясь наименьшему условию “personal ” (смотрите ниже, раздел 3.27), так, чтобы не посылать автоматические ответы на не персональные сообщения от списков рассылки, или ещё каких-то. Отсылка автоматических ответов на списки рассылки или управляющему списком рассылки - Интернетный Грех (дословно :) - прим. lissyara).
Для обеих команд, пара аргументов ключ/значение, может фигурировать в любом порядке. Должен фигурировать по меньшей мере один из “text ” или “file ” (исключение с “vacation ”, где умолчание - “file ”); если представлены обе, текстовая строка фигурирует первой в сообщении. Если “expand ” предшествует “file ”, каждая строка файла подчиняется раскрытию строк до её включения в сообщение.
Несколько строк текста могут быть предоставлены к “text ” путём включения экранирующей последовательности “\n ” в строке где требуется новая строка. Если команда - вывод в течение тестирования файла фильтра, новые строки в тексте отображаются как “\n ”.
Отметтьте, что ключевое слово для создания заголовка “Reply-To: ” - “reply_to ”, поскольку ключевые слова exim'a могут содержать подчёркивания, но не дефисы. Если представлено ключевое слово “from ”, и данный адрес не совпадает с пользователем владеющим файлом “.forward ”, exim, обычно, добавляет к сообщению заголовок “Sender: ”, если не сконфигурировано не делать этого.
Ключевое слово “extra_headers ” позволяет вам добавлять нестандартные строки заголовков к сообщению. Предоставляемые текст должен быть одной или более синтаксически верными строками заголовоков, в соответствии с RFC2822. Вы можете использовать “\n ” внутри текста в кавычках, для задания новых строк между заголовками, и, также, для задания продолжающихся строк заголовков. Например:
extra_headers "h1: first\nh2: second\n continued\nh3: third"
| В конце финальной строки заголовков не будет новой строки.
Если аргумент “to ” не присутствует, сообщение посылается на адрес в переменной “$reply_address ” (смотрите выше, раздел 3.3). Все заголовки “In-Reply-To: ” автоматически включаются в создаваемое сообщение, давая ссылку на идентификатор входящего сообщения.
Если задана “return message ”, входящее сообщение вызвавшее запуск файла фильтра, добавляется к концу сообщения, и на каждый адрес посылается не более одного сообщения, если не задана “once_repeat ”. Этим определяется временной интервал после которого посылается иная копия сообщения. Интервал задаётся как последовательность чисел, каждая сопровождаемая начальной буквой одного из “seconds ”, “minutes ”, “hours ”, “days ”, или “weeks ”. Например,
вызывает отсылку нового сообщения если прошло 5 дней и 4 часа после того как было послано последнее. Не должно быть пробелов (в смысле - пустого пространства - прим. lissyara) во временном интервале.
Обычно, имя файла заданное для “once ”, используется как базовое имя для прямых файловых операций (DBM). Существует несколько различных библиотек DBM. Некоторые операционные системы предоставляют по умолчанию одну, но даже в этом случае, при сборке exim'a могут использоваться иные. С некоторыми библиотеками DBM, для определения результата “once ” используются два файла с суффиксами “.dir ” и “.pag ” добавляемыми к именам. В некоторых других, используется один файл с суффиксом “.db ”, или имя используется неизменным.
Использование файла DBM для реализация возможности “once ” означает, что файл растёт до такого размера, как необходимо. Обычно, это не проблема, но некоторые администраторы хотя его ограничить. Средство может быть сконфигурировано, чтобы не использовать файл DBM, но вместо этого, используется обычный файл с максимальным размером. Данные в таком файле ищутся последовательно, и, если файл запоняется, старые вхождения удаляются, для добавления новых. Это средство, которым некоторые корреспонденты могут передавать вторую копию сообщения после непредсказуемого интервала. Проконсультируйтесь с вашей локальной информацией, чтобы убедиться, что ваша система сконфигурирована таким способом.
Более чем одна команда “mail ” или “vacation ” может фигурировать в одном запуске файла фильтра; они все не выполняются, когда они все для одного и того же получателя (не уверен что правильно перевёл - прим. lissyara).
3.15 Команды логгинга
Логи могут быть взяты при помощи файла фильтра. Это средство, обычно, доступно в обычных конфигурациях, но есть некоторые ситуации когда они не могут быть получены. Также, системный администратор может их отключить. Проверьте вашу локальную информацию, если сомневаетесь.
Логгинг имеет место когда файл фильтра интерпретируется. Он не находится в очереди до более позднего времени, как команды доставки. Причина этого в том, что файл логов необходимо открывать лишь один раз для каждой операции записи. Есть две команды, ни одна из которых не назначает важную доставку. Первая - задаёт файл, в который впоследствии выводится логгинг:
logfile <file name>
e.g. logfile $home/filter.log
| Имя файла должно быть полностью квалифицированным. Вы можете использовать “$home ”, как в этом примере, для ссылки на вашу домашнюю директорию. Имя файла может опционально сопровождаться режимом для этого файла, который используется, если файл создаётся. Например:
logfile $home/filter.log 0644
| Число интепретируется как восьмеричное, если оно не начинается с нуля.Дефолтовый режим - 600. Это предполагает, что команда “logfile ”, обычно, появляется как первая команда в файле фильтра. Как только появился файл логов, для записи в него может быть использована команда “logwrite ”:
logwrite "<some text string>"
e.g. logwrite "$tod_log $message_id processed"
| Возможно иметь более, чем одну команду “logfile ”, для задания записи в различные файлы логов, в различных ситуациях. Запись имеет место в конце файла, и символ новой строки добавляется в конце каждой строки, если его там нет. Новая строка может быть помещена в середине строки, используя экранирующую последовательность “\n ”. Строки от одновременных доставок могут чередоваться в файле, так как тут нет взаимной блокировки, таким образом, вы должны планировать ваш логгинг с учётом этого. Однако, данные не теряются.
3.16 Команда “finish ”
Команда “finish ”, которая не имеет аргументов, вызывает остановку интепретации файла фильтра exim'ом. Она не важное действие, если её не предшествует “seen ”. Фильтр может содержать лишь одну команду “seen finish ” - это, чёрная дыра.
3.17 Команда “testprint ”
Иногда, полезна возможность распечатать значения переменных, когда тестируется файл фильтра. Команда
testprint <text>
e.g. testprint "home=$home reply_address=$reply_address"
| ничего не делает, когда почта доставляется. Однако, когда код фильтра тестируется при помощи опции “-bf ” (смотрите выше, секцию 1.3), значение строки пишется на стандартный вывод.
3.18 Команда “fail ”
Когда средство фильтрации exim'a используется как системный фильтр, доступна команда “fail ”, для принудительной неудачи доставки. Поскольку эта команда, обычно, используется лишь системным адмнистратором, и не включена для использования обычными пользователями, она более описана в главной спецификации exim'a более подробно, чем в этом документе.
3.19 Команда “freeze ”
Когда средство фильтрации exim'a используется как системный фильтр, доступна команда “freeze ”, для заморозки сообщения в очереди. Поскольку эта команда, обычно, используется лишь системным адмнистратором, и не включена для использования обычными пользователями, она более описана в главной спецификации exim'a более подробно, чем в этом документе.
3.20 Команда “headers ”
Команда “headers ” может использоваться для изменения целевой кодировки, которая используется при переводе содержимого сообщения кодированных строк заголовков, для вставки путём механизма “$header_ ” (смотрите секцию 3.5, выше). Значение по умолчанию может быть установлено в конфигурации exim'a; если не задано, используется ISO-8859-1. На данный момент, поддерживаемый формат “headers ” в файлах пользовательских фильтрах, как в этом примере:
Т.е., “headers ” сопровождается словом “charset ”, и, затем, именем кодировки. Этот частный пример может быть полезным, если вы хотите сравнить содержимое заголовков со строкой UTF-8.
В файлах системного фильтра, команда “headers ” может использоваться для добавления или удаления строк заголовков из сообщения. Эти особенности описаны в главной спецификации exim'a.
3.21 Удовлетворение условий команд
Большинство силы фильтрования происходит из способности тестировать условия и удовлетворять условия различных команд, зависящих от результата. Команда “if ” используется для выполнения специальных условий, и её общая форма - такова:
if <condition>
then <commands>
elif <condition>
then <commands>
else <commands>
endif
| Тут может быть любое число секций “elif ” и “then ” (включая отсутствие), и опциональная секция “else ”. Любое число команд, включая вложенные команды “if ”, могут фигурировать в секции “<commands> ”.
Условия могут быть скомбинированы используя слова “and ” и “or ”, и, для задания как комбинируются отдельные условия, могут использоваться круглые скобки. Без скобок, “and ” - более приоритетна, чем “or ”. Например:
if
$h_subject: contains "Make money" or
$h_precedence: is "junk" or
($h_sender: matches ^\\d{8}@ and not personal) or
$message_body contains "this is not spam"
then
seen finish
endif
| Условию может предшествовать “not ”, для его отрицания, и, также, есть некоторые отрицательные формы условия, которые более похожи на английский язык.
3.22 Условия тестирования строк
Есть несколько условий, которые оперируют текстовыми строками, используя слова “begins ”, “ends ”, “is ”, “contains ” и “matches ”. Если вы хотите применить тот же самый тест к более чем одной строке заголовков, вы можете легко объединить их в одну строку для тестирования, как в этом примере:
if "$h_to:, $h_cc:" contains me@domain.example then ...
| Если имя условия тестирования строки написано в нижнем регистре, тестирование букв происходит без учёта регистра; если оно написано в верхнем регистре (например, “CONTAINS ”), регистр букв берётся в расчёт.
<text1> begins <text2>
<text1> does not begin <text2>
e.g. $header_from: begins "Friend@"
| Тест “begins ” проверяет присутствие второй строки в начале первой, обе строки будут раскрыты.
<text1> ends <text2>
<text1> does not end <text2>
e.g. $header_from: ends "public.com.example"
| Тест “ends ” проверяет присутствие второй строки в конце первой, обе строки будут раскрыты.
<text1> is <text2>
<text1> is not <text2>
e.g. $local_part_suffix is "-foo"
| Тест “is ” проверяет точное соответствие между строками, вначале раскрывая обе.
<text1> contains <text2>
<text1> does not contain <text2>
e.g. $header_subject: contains "evolution"
| Тест “contains ” проверяет частичное соответствие строк, обе строки будут раскрыты.
<text1> matches <text2>
<text1> does not match <text2>
e.g. $sender_address matches "(bill|john)@"
| Для теста “matches ”, после раскрытия обеих строк, вторая интерпретируется как регулярное выражение. Exim использует библиотеку регулярных выражений PCRE, которая предоставляет регулярные выражения совместимые с perl.
Сравнение успешно, если регулярное выражение совпадает с любой частью первой строки. Если вы хотите, чтобы регулярное выражение совпадало лишь с началом или концом строки, вы должны явно закодировать требования, используя метасимволы “^ ” или “$ ”.
Верхний пример, являющийся неестественным, совпадает со всеми этими адресами:
bill@test.example
john@some.example
spoonbill@example.com
littlejohn@example.com
| Для совпадения лишь с двумя первыми, вы могли бы использовать это:
if $sender_address matches "^(bill|john)@" then ...
| Нужно быть внимательным, если вам необходим обратный слэш в регулярном выражении, поскольку обратный слэш интерпретируется как экранирующий символ обоими, кодом раскрытия строк, и обычной обработкой строк в кавычках exim'ом. Например, если вы хотите проверить адрес отправителя на домен завершающийся на “.com ”, то регулярное выражение - таково:
Обратный слэш и символ доллара, в этом выражении, должны быть экранированы, при использовании в команде фильтра, так как они будут интерпретированы кодом раскрытия. Таким образом, реально вы напишете:
if $sender_address matches \\.com\$
| Альтернативным способом обработки этого, является использование флагов раскрытия “\N ”, для подавления раскрытия:
if $sender_address matches \N\.com$\N
| Всё, что между двумя вхождениями “\N ”, копируется без раскрытия строки (и, фактически, вам не нужна финальная последовательность, поскольку она в конце строки). Если регулярное выражения дано в кавычках (обязательно, лишь если оно содержит пустое пространство), вы должны написать дважды:
if $sender_address matches "\\\\.com\\$"
| или
if $sender_address matches "\\N\\.com$\\N"
| Если регулярное выражение содержит субвыражение в квадратных скобках, то после успешного сравнения в последующих действиях могут использоваться числовые переменные, типа “$1 ”. Если сравнение неудачно, значения числовых переменных остаются неизменными. Предыдущие значения не восстанавливаются после “endif ”. Другими словами, всегда доступен лишь один набор значений. Если условие содержит несколько подусловий, соединённых с помощью “and ” или “or ”, эта строка извлекается из последнего успешного совпадения, которое доступно в последующих действиях. Числовые значения из любых единичных субусловий также доступны для использования в последующих субусловиях, поскольку раскрытие строки условия происходит до его тестирования.
3.23 Тестирование числовых условий
Следующие условия доступны для выполнения числовых тестов:
<number1> is above <number2>
<number1> is not above <number2>
<number1> is below <number2>
<number1> is not below <number2>
e.g. $message_size is not above 10k
| Аргументы “<number> ” должны раскрываться в строку цифр, опционально сопровождаемую одной из букв “K ” или “M ” (верхнего или нижнего регистра), которые вызывают умножение на 1024 или 1024x1024, соответственно.
3.24 Тестирование важных доставок
Вы можете использовать условие “delivered ”, для тестирования выполняла ли предыдущая команда фильтра установку важной доставки. Например:
if not delivered then save mail/anomalous endif
| “Delivered ” - возможно, плохой выбор имени для этого условия, поскольку сообщение не было реально доставлено ранее, доставка была установлена для последующей обработки.
3.25 Тестирование на сообщения о ошибке
Условие “error_message ” - истинно, если входящее сообщение - рикошет (ошибка доставки сообщения). Помещение команды
if error_message then finish endif
| в начале вашего файла фильтра - полезная страховка от неправильно происходящих вещей, типа невозможности доставить отчёт о ошибке. Отметтьте: “error_message ” - условие, а не переменная раскрытия, и поэтому ей не предшествует “$ ”.
3.26 Тестирование списка адресов
Это - средство для циклического обхода списка адресов, и применения условия к каждому из них. Оно имеет форму
foranyaddress <string> (<condition>)
| где “<string> ” - интерпретируется как список адресов RFC2822, как в типичной строке заголовка, и “<condition> ” - любое допустимое условие фильтра, или комбинация условий. Синтаксис “group ”, который задан для некоторых строк заголовков содержащих адрес - поддерживается.
Круглые скобки, окружающие условие, - обязательны, для определения границ от возможных последующих субусловий вложенных команд “if ”. Внутри условия, переменная раскрытия “$thisaddress ” - установлена в некомментирующую часть каждого адреса в строке, по очереди. Например, если строка
B.Simpson <bart@sfld.example>, lisa@sfld.example (his sister)
| тогда “$thisaddress ” будет принимать значение “bart@sfld.example ” и “lisa@sfld.example ”, по очереди.
Если в списке больше нет действительных адресов, всё условие - ложно. Если внутреннее условие истинно, для одного любого из адресов, общее условие - истинно, и цикл завершается. Если внутреннее условие ложно для всех адресов в списке, общее условие - ложно. Этот пример тестирует на присутствие восьмицифровой локальной части в любом адресе в заголовке “To: ”:
if foranyaddress $h_to: ( $thisaddress matches ^\\d{8}@ ) then ...
| Когда истинно общее условие, значение “$thisaddress ” в команде которая следует за “then ”, берётся последнее значение внутри петли. В конце команды “if ”, значение “$thisaddress ” сбрасывается к тому, каким оно было до этого. Это полезно для избегания использования многочисленных “foranyaddress ”, вложенных, или иначе, в одну команду “if ”, если значение “$thisaddress ” используется впоследствии, поскольку оно всегда очищается. Вместо этого, следовало бы использовать вложенные команды “if ”.
Строки заголовков могут быть соединены вместе, если проверка применяется более чем к одному из них. Например:
if foranyaddress $h_to:,$h_cc: ....
| Этим сканируются адреса в обоих заголовках - “To: ” и “Cc: ”.
3.27 Тестирование на персональность почты
Обычное требование - различать входящую персональную почту, и почту от почтовых рассылок, или от роботов, или иных автоматических процессов (например, рикошеты). В частности, это тестирование, обычно, требуется для “vacation messages ”.
Условие “personal ” проверяет, что сообщение - не рикошет, и что почтовый адрес текущего пользователя присутствует в строке заголовка “To: ”. Также, оно проверяет, что отправитель - не текущий пользователь, или один из множества обычных даемонов, и что в сообщении нет строки заголовка, начинающейся с “List- ”. В конце, оно проверяет содержимое строки заголовка “Precedence: ”, если она есть.
Вы должны всегда использовать условие “personal ”, когда генерируете автоматические ответы. Этот пример показывает использование “personal ” в файле фильтра, который отсылает сообщение о отпуске:
if personal then
mail to $reply_address
subject "I am on holiday"
file $home/vacation/message
once $home/vacation/once
once_repeat 10d
endif
| Это - замачиво, когда пишется команда, типа вышеприведённой, для цитирования оригинальной темы в ответе. Например:
subject "Re: $h_subject:"
| Однако - это опасно делать. Это может позволить кому-то иному подписать вас на выбранный список рассылки, при условии, что список принимает рикошеты как подтверждения о подписке. (Из фильтров, сообщения всегда шлются как рикошеты.) Хорошо управляемые списки требуют ,чтобы сообщение было не-рикошетом, для подтверждения подписки, таким образом, опасность относительно мала.
Если для локальных частей используются преффиксы или суффиксы - что-то, что зависит от конфигурации exim'a (смотрите ниже, раздел 3.31), тесты для текущего пользователя завершаются с полным адресом (включая преффикс и суффикс, если они есть), как с удалённым преффиксом и суффиксом. Если система сконфигурирована для перезаписи локальных частей почтовых адресов, например, для перезаписи “dag46 ” как “Dirk.Gently ”, перезаписанная форма адресов также используется в тестах.
3.28 Адреса альясов для персональных условий
Вполне обычно для людей имеющих почтовые аккаунты на нескольких различных системах - форвардить всю их почту на одну систему, и в этом случае проверка на персональную почту должна проверять все их различные почтовые адреса. Для разрешения этого, ключевое условие “personal ” может сопровождаться
любое число раз, например:
if personal alias smith@else.where.example
alias jones@other.place.example
then ...
| Адреса альясов обрабатываются как альтернативы пользовательскому почтовому ящику, при тестировании содержимого строк заголовков.
3.29 Детали персональных условий
Основной тест “personal ” примерно эквавалентен следующему:
not error_message and
$message_headers does not contain "\nList-Id:" and
$message_headers does not contain "\nList-Help:" and
$message_headers does not contain "\nList-Subscribe:" and
$message_headers does not contain "\nList-Unsubscribe:" and
$message_headers does not contain "\nList-Post:" and
$message_headers does not contain "\nList-Owner:" and
$message_headers does not contain "\nList-Archive:" and
(
"${if def h_auto-submitted:{present}{absent}}" is "absent" or
$header_auto-submitted: is "no"
) and
$header_precedence: does not contain "bulk" and
$header_precedence: does not contain "list" and
$header_precedence: does not contain "junk" and
foranyaddress $header_to:
( $thisaddress contains "$local_part$domain" ) and
not foranyaddress $header_from:
(
$thisaddress contains "$local_part@$domain" or
$thisaddress contains "server@" or
$thisaddress contains "daemon@" or
$thisaddress contains "root@" or
$thisaddress contains "listserv@" or
$thisaddress contains "majordomo@" or
$thisaddress contains "-request@" or
$thisaddress matches "^owner-[^@]+@"
)
| Переменная “$local_part ” содержит локальную часть почтового адреса пользователя, файл фильтра которого работает, обычно - это ваш логин. Переменная “$domain ” - содержит почтовый домен. Как объяснено выше, если заданы альясы или перезапись, или если используются преффиксы и суффиксы, тесты для текущего пользователя завершаются с альтернативными адресами.
3.30 Тестирование статуса доставки
Есть два условия, которые предназначены, главным образом, для использования в файлах системного фильтра, но которые также доступны в файлах пользовательских фильтров. Условие “first_delivery ” - истинно, если это - первый процесс, пытающийся доставить сообщение, и ложно в других случаях. Этот индикатор не сбрасывается после успешного завершения первого процесса доставки; если происходит сбой, или неполадки с питанием (например), следующая доставка предпринимается также, как первая ( “first delivery ”).
В пользовательском файле фильтра “first_delivery ” будет ложно, если до этого в фильтре были ошибки, или доставка для пользователя неудачна, например, из-за ошибки квоты, или если форвардинг к удалённому адресу был задержан по каким-то причинам.
Условие “manually_thawed ” - истинно, если сообщение было заморожено по каким-то причинам, и впоследствии разморожено системным администратором. Оно - необычно для использования в пользовательских файлах фильтров.
3.31 Пользовательские мультипочтовые ящики
Системный администратор может сконфигурировать exim так, что пользователи могут установить варианты их почтовых адресов, и обрабатывать их раздельно. Проконсультируйтесь с вашим системным администратором или локальной документацией, чтобы узнать, включено ли это средство в вашей системе, и если так, каковы его детали.
Средство включает в себя использование преффикса или суффикса в почтовом адресе. Например, вся поста адресованая на “lg303-<something> ” была бы собственностью пользователя “lg303 ”, который мог бы определить, как она должна быть обработана, в зависмости от значения “<something> ”.
Возможны два способа, которыми это можно сделать. Первая возможность - использование нескольких файлов “.forward ”, которые должны быть файлами фильтра, таким образом, они могут различать разные случаи, путём ссылки на переменные “$local_part_prefix ” или “$local_part_suffix ”, как в последнем примере, в секции 3.33, ниже.
Возможно сконфигурировать exim на поддержку обоих схем одновременно. В этом случае, специфический файл “.forward-foo ” ищется первым; если он не найден, используется основной файл “.forward ”.
Тест “personal ” (смотрите раздел 3.27) включает преффиксы и суффиксы в свои проверки.
3.32 Игнорирование ошибок доставки
Как было объяснено выше, фильтрация лишь устанавливает адреса для доставки - доставки реально не происходят, пока активен файл фильтра. если любой сгенерированный адрес, впоследствии переносит ошибку доставки, сообщение о ошибке генерируется обычным способом. Однако, если команда фильтра, которая устанавливает доставку, предваряется словом “noerror ”, ошибки для этой доставки, и любых доставок в результате её (т.е. - из альясинга, форвардинга, или вызыванных файлом фильтра) - игнорируются.
3.33 Примеры команд фильтра exim'a
Простой форвардинг:
# Exim filter
deliver baggins@rivendell.middle-earth.example
| Обработка отпуска, используя традиционные средства, предполагая, что “.vacation.msg ” и иные файлы находятся в вашей домашней директории:
# Exim filter
unseen pipe "/usr/ucb/vacation \"$local_part\""
| Обработка отпуска внутри exim'a, вначале должен быть создан файл с именем “.vacation.msg ”, в вашей домашней директории:
# Exim filter
if personal then vacation endif
| Файлы некоторых сообщений по теме:
# Exim filter
if $header_subject: contains "empire" or
$header_subject: contains "foundation"
then
save $home/mail/f+e
endif
| Сохранение всех несрочных сообщений по будним дням:
# Exim filter
if $header_subject: does not contain "urgent" and
$tod_full matches "^(...),"
then
save $home/mail/$1
endif
| Отбрасывание прочь всех сообщений от одного сайта, исключая письма от postmaster:
# Exim filter
if $reply_address contains "@spam.site.example" and
$reply_address does not contain "postmaster@"
then
seen finish
endif
| Обработка персональных мультипочтовых ящиков:
# Exim filter
if $local_part_suffix is "-foo"
then
save $home/mail/foo
elif $local_part_suffix is "-bar"
then
save $home/mail/bar
endif
| =============
translated by lissyara
verifying by Gerk
Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=20.
|
|
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"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat
Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills
Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS
Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs
Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD
Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC
Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat
Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot
Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless
Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение
Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга
Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff
Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа
Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
2009-06-16, DNK
Exim+PgSQL
Установка почтовой системы exim+pgsql на FreeBSD 7.1
2009-05-30, mvalery
HDD(mbr) -> HDD(gpt)
Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
2009-05-22, Cancer
SendXMPP
Отправка сообщений на Джаббер сервер по средствам SendXMPP
2009-05-11, Raven2000
Network UPS Tools
Network UPS Tools представляет собой набор программ, которые обеспечивают общий
интерфейс для мониторинга и администрирование UPS оборудования.
2009-04-29, m0ps
IPSEC over GRE with RIP
Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
2009-04-24, WhiteBear777
qemu network
Появилась необходимость поставить на БСД эмулятор(qemu) и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локалку и в сеть internet...
2009-04-22, vp
freebsd + huawei 162 gsm modem
В статье описывается простой способ подключения модема huawei 162 к freebsd + первичная настройка smstools
2009-04-12, mvalery
Мониторинг RAID
Мониторинг из командной строки RAID компаний AMCC 3ware, HighPoint, Dell (Perc 5/i и PERC 6/i) и LSI (MegaRAID SAS 8408E и SAS1078)
2009-04-09, texnotronic
RAID1 via LAN
Функциональности DRBD во FreeBSD можно добиться примонтировав блочное устройство по сети при помощи GEOM Gate (ggate) и добавив его в зеркало с локальным диском средствами gmirror.
2009-04-03, Raven2000
Оптимизация хоста для CMS
В последнее время на старый и не очень быстрый ПК (Celeron 800 RAM 256) мною было навешано с десяток сайтов и некоторые были из серии тяжелых CMS. И так нам дано FreeBSD 7.1 и ~10 сайтов/CMS.
2009-04-01, atrium
VSFTPD + AD && MySQL
Настройка самого безопасного сервера FTP - vsftpd.
2009-03-31, Dron
Peoplenet + C-motech (3G)
Описание подключения к сети Peoplenet посредством 3G модема С-motech CCu-650U на FreeBSD
2009-03-25, lissyara
mod_auth_external
mod_auth_external - авторизация пользователей в apache c помощью внешней программы - например, системных пользователей.
2009-03-24, gx_ua
Lightsquid
Частично lightsquid может заменить sams: быстрая и простая инсталляция, быстрый парсер, cgi скрипт для динамической генерации отчета, нет привязки к БД, различные графические отчеты, мультиязычный инт
2009-03-18, LHC
Установка Zabbix-1.6
Установка и первоначальная настройка системы мониторинга Zabbix (версия 1.6)
2009-03-16, Cancer
Принт-Сервер Samba+LPD & AD
Простейшая настройка Принт-Сервера на FreeBSD используя Samba+LPD & AD
2009-03-04, Mad_caterpillar
ipsec_vpnc
Настройка VPN IPSec концентратора на FreeBSD 6.2 для клиента cisco с использованием ipsec-tools и авторизацией в активной директории
2009-02-18, Andy
Free-SA
Программа анализирует log файлы Squid'а и формирует по ним отчет.
2009-02-02, Cancer
Openfire Jabber Server
Установка Jabber сервера на примере Openfire
2009-01-28, Cancer
mpd5 + сжатие и шифрование
Установка VPN сервера mpd5 + сжатие и шифрование
2009-01-26, vp
freebsd + webcamera
Подключение и настройка вебмкамеры для работы с freebsd на примере Logitech QCam STX
2009-01-10, Grishun_U_S
конфиг для офисов
В статье разбирается конфиг для офиса, пользователи которого имеют строгие ограничения по портам. Заворачиваем www трафик на транспарентный прокси, а остальное NAT'им. Эффективно делим канал интернет
2008-12-27, Storoge
sftp+chroot
Возникла необходимость дать возможность нескольким пользователям заливать на сервер контент для своих сайтов через sftp, чтобы при этом не страдала безопасность.
2008-12-13, Morty
PurefFTPd
Администрирование pureftpd-сервера с помощью вэб интерфейса Usermanager
2008-12-11, lissyara
termlog
Небольшая простая утилита, использующаяся для записи в файл всего что происходит на терминалах системы. Полезно, когда есть доступ по ssh у тех, кому не очень доверяете. Паранойя - это не плохо =)
2008-11-26, Cancer
SQUID+SAMS +Rejik-(ADLDAP)
Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
2008-11-22, dvg_lab
php5-oci8
Решение проблем segmentation fault (core dumped) при работе с oracle8-client и php5-oci8
2008-11-21, m0ps
NTP
Пример настройки NTP сервера для локальной сети и клиента, для синхронизации времени с локальный NTP сервером. Обновление ntpd из портов.
2008-11-20, Cancer
SQUID+SAMS +Rejik-(NTLM)
Установка Прокси сервера SQUID с аутентификацией по NTL с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf, РЕЖИК собственно рубит банеры и запрещает пользователям хо
2008-11-20, UA
Hotspot
Настройка безпроводной точки доступа (WiFi) на freebsd
2008-11-12, Shaman
Enemy Territory
Появилась у меня такое желание поднять сервер Enemy Territory.
Поискал погуглил, ничего толкового не нашел пришлось все самому делать.
И вот решил поделиться опытом. Начинаем......
2008-11-11, lissyara
Samba+ NT ACL
Использование vfs самбы - модули full_audit и recycle. Настройка для использования в качестве файлопомойки с 500+ одновременно работающих юзеров. Раздача прав через нативный виндовый интерфейс.
2008-11-11, Raven2000
Upgrading OpenBSD
Сегодня мы будем обновлять OpenBSD. Систему необходимо поддерживать в актуальном виде и следить, чтобы все работало, как часы и все дырки были залатаны до прихода врага =)
2008-11-10, lexy
SMSTools 3
Как автоматизировать отправку и обработку входящих сообщений при помощи мобильного телефона, датакабеля и компа
2008-11-06, Cancer
Asterisk IP PBX
Установка VoiP сервера Asterisk IP PBX для соединения двух шлюзов и АТС
2008-10-30, atrium
Samba & CUPS & AD & ACL
Настройка Samba в роли доменного файл-сервера, и CUPS в роли принт-сервера для Windows клиентов
2008-10-17, Raven2000
src & ports
Конечно, в OpenBSD система портов никогда не сможет быть полной сравнение с той же системой во FreeBSD. Связано это с тем, что разработчики включают в порты лишь те приложение которые протестированн
2008-10-13, Morty
Mysql - базовое описание
Базовое описание и принципы работы с MySQL
2008-10-10, Cancer
exim&dovecot + fetchmail + SSL
Exim & Dovecot + Postfixadmin & Roundcube + Fetchmail & smtp_relay
С возможностью отправлять письма через смтп релей провайдера.
С использование SSL шифрование: POP3s IMAPs sSMTP
2008-10-09, m0ps
Дополнительные порты для роутера
Увеличение количества Ethernet портов маршрутизатора за счет свободных портов коммутатора пробросив vlan с сабинтерфейса роутера на интерфейс коммутатора.
2008-10-06, princeps
Bacula
Настройка сервера системы резервного копирования Bacula на FreeBSD для бэкапов FreeBSD и Windows машин
2008-10-02, zheromo
Postfix + DBMail
Создание почтовой системы на основе Postfix + DBMail + SASL2 + TLS + DSpam + ClamAV + RoundCubeWebMail
2008-10-02, Cancer
SugarForge CRM
SugarForge CRM предоставляет подавляющее большинство функциональных возможностей CRM систем
2008-09-12, arksu
ng_ipacct + squid
Подсчет трафика с помощью ng_ipacct. Связка ng_ipacct + squid + парсер логов + авторизатор + nginx + mysql и куча служебных скриптов для работы всей системы.
2008-09-03, Raven2000
GLPI
Мне надо было найти замену существующей программы инвентаризации, чтобы за компьютерами, принтерами, картриджами, лицензиями и тп был учет. Желательно с дополнительными бонусами типа системы подачи...
2008-09-03, salimk
POWERDNS
Статья о том как мигрировать с DNS сетвера ISC Bind на POWERDNS
2008-09-03, DNK
Rinetd
Редирект TCP портов с помощью утилиты rinetd - просто до безобразия - само прилодение простое, конфиг в одну строчку - что ещё надо для счастья? =)
2008-09-03, L!Ner
eGroupWare
Это сервер групповой работы. Он укомплектован собственным веб-интерфейсом, который обеспечивает доступ к вашим данным с любой платформы по всей планете.
2008-08-30, jafff
MAC адрес
У девайса VoIP Planet VIP-000 слетел MAC адрес и стал FF-FF-FF-FF-FF-FF, как я его востанавливал
2008-08-30, Morty
clonehdd
Перенесение, бэкапирование HDD,легко и просто
2008-07-31, Raven2000
Proxy Auto Configuration
Возникла необходимость автоматически настраивать прокси для всех компов и не бегать например если поменялось что-то на сервере прокси. Для этого давно существует технология Proxy Auto Configuration.
2008-07-29, f0s
NNTP сервер
Конфигурирование собственного NNTP-сервера.
2008-07-28, Al
spamooborona
настройка yandex spamooborona в качестве smtp-proxy для работы с exim
2008-07-28, Cancer
SQUID+SAMS +Rejik-(NCSA)
Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
2008-07-20, Raven2000
Pax
Эта замечательная утилита поставляется с FreeBSD по умолчанию, и она имеет неплохой потенциал.
Можно создавать архивы модифицировать их, а так же живьем переносить всю операционную систему с данными
2008-07-16, Andy2k
BIND & AD
Настройка BIND для обслуживания запросов контроллеров Active Directory. Альтернатива поднятию DNS от Microsoft.
2008-07-16, aleksey.kravchenko
Samba (PDC+BDC)
Поднять главный (офис) и резервный (филиал) контроллер домена на базе Samba и OpenLDAP, организовать синхронизацию и репликацию между ними. Запись в LDAP должена выполняться только на PDC.
2008-07-14, aleksey.kravchenko
OpenVPN + LDAP
Статья о том, как настроить OpenVPN с авторизацией пользователей в OpenLDAP.
2008-07-14, aleksey.kravchenko
ProFTPd + LDAP
ProFTPd с авторизацией пользователей в OpenLDAP
2008-07-13, lissyara
Asus Eee PC
Дали на несколько дней поиграться Asus Eee PC - мелкий ноутбок по смешной цене. Ну, первым делом ставим правильный ОС и смотрим - что из этого получиться.
2008-07-09, terminus
DNS сервер Unbound
Установка и настройка кеширующего DNS сервера Unbound под управлением FreeBSD 7.0
2008-07-08, f0s
mozilla autoconfig
Автонастройка браузера и почты Mozilla Seamonkey пользователям
2008-07-05, lissyara
iftop
Утилита предназначена для мониторинга загрузки канала в режиме реального времени - позволяет видеть кто именно занял полосу. Полезно для организаций с FreeBSD на шлюзовой машине.
2008-07-02, manefesto
snd_hda
Патчим snd_hda для корректной работы с наушниками
2008-06-27, Grishun_U_S
dd : бэкапируем windows
Клонирование разделов windows с помощью загрузочного диска FreeBSD
2008-06-25, terminus
DNS сервер NSD
Установка и настройка авторитарного DNS сервера NSD под управлением FreeBSD 7.0
2008-06-17, Al
NetXtreme BCM5722
Драйвер для сетевой карты NetXtreme BCM5722 Gigabit Ethernet
2008-06-15, tango
Amanda
Установка и настройка сервера резервного копирования Amanda на FreeBSD.
2008-06-12, LMik
Виртуальный свитч
Статья описывает создание виртуального коммутатора для соединения удаленных физических ethernet сетей.
2008-06-08, littlesavage
SiS*Mirage*1 на D201GLY2
Как заставить работать видеоrарту SiS*Mirage*1 на материнской D201GLY2
2008-06-06, nsand
Рыбалка на FreeBSD
Стьатья о том как настроить рыбалку со спутника под FreeBSD
2008-06-06, nsand
TT budget S-1401
Настройка драйвера ttbudget (SkyStar3) под FreeBSD
2008-05-30, Andy2k
NOD32 mirror
Скрипт для создания зеркала обновлений для антивируса NOD. Автоматически ищет нужные логин-пароль для получения обновлений. В теории не требует обслуживания.
2008-05-25, Romzes
метаданные exif
Пример сортировки фотографий сделаных разными фотоаппаратами, с разными названиями, датами создания/модификации. Из под консоли, конечно.
2008-05-23, FenX
svn+apache+trac
Установка связки Apache2.2 + Subversion + Trac (Установка и настройка SVN сервера с доступом к репозиториям по http протоколу)
2008-05-22, Grishun_U_S
простой конфиг PF
В статье разбирается простой конфигурационный файл pf "изнутри можно все"
2008-05-20, KrivoSoft
HAVP
HAVP(HTTP AntiVirus proxy)- работает как http прокси, проверяющий файлики используя LibClamav. В заметке описан процес прикручивания антивируса к уже работающему прокси серверу squid.
2008-05-20, Covax
ALTQ в IPFW
Исполльзование ALTQ вместе с IPFW
2008-05-19, nonalog2007
pppoe
Настройка ADSL-модема для подключения к Интернет.
2008-05-04, Abigor
php + mssql
Настройка php на freebsd для работы с базами в mssql по доменной авторизации.
2008-04-28, serge
i386=>amd64
Рассматриваеться способ удаленной миграции с архитектуры i386 на amd64 на рабочем сервере.
2008-04-24, Mr.Y
Lan over Bluetooth
Статья описывает как используя Bluetooth, объединить две FreeBSD машины в сеть.
2008-04-19, lissyara
WiFi WPA
Подключение FreeBSD к беспроводной WiFi сети с использованием шифрования WPA.
2008-04-18, nikll
nginx+php-fpm+mysql
Статья о настройке мощного веб сервера который не ляжет от хорошей нагрузки.
2008-04-16, nikll
qmail-ldap + AD
Статья о том как я прикрутил qmail к АД win2003 (с упровлением почтовыми аккаунтами через консоль mmc из под винды)
2008-04-14, SHPAk
Приглашение csh/tcsh
Приглашение csh/tcsh не всегда удобно. Здесь описано как помянять оное...
2008-04-07, inspirra
deltup, xdelta, bdelta
Некоторые тонкости создания бинарных патчей. И использование "The dynamic deltup server network" для экономии на обновлениях исходников программ устанавливаемых из портов.
2008-04-02, fr33man
exim + cyrus-imapd
Руководство по настройке почтовой системы на базе OpenBSD-4.2: exim + cyrus-imapd + mysql
2008-03-30, Morty
LiveCD (+restore)
LiveCD, который развернет мне на жёсткий диск готовую настроенную систему
2008-03-25, lissyara
BlueTooth mouse
Краткое повествование о том, как привернуть BlueTooth мышь к FreeBSD. Краткое - потому как делается это с полпинка...
2008-03-21, moonug
ProFTPD+iconv
Порт позволяющий включить перекодировку имён файлов в proftpd. Раньше для этого был патч, а щас всё поломали =))
2008-03-11, helloworld
vsftpd + mysql
Настройка фтп сервера vsftpd с пользователями из mysql
2008-03-06, Raven2000
Call of Duty 4
Call of Duty 4: Modern Warfare — компьютерная игра, продолжение серии COD,
разработанное студией Infinity Ward. Это первая игра в серии, действие которой
происходит не во время мировой войны.
2008-03-04, schizoid
NeTAMS 2
Netams, статистика, биллинг, огрнаичение и подсчет трафика
2008-03-04, schizoid
NeTAMS
Программа для учета и управления сетевым трафиком
2008-03-01, Le1
EA Battlefield 2 server
Установка игрового сервера EA Battlefield 2 под ОС FreeBSD
|