Книга: Сетевые средства Linux
Пример использования рецептов
Пример использования рецептов
Приведенные выше сведения были необходимы для создания общего представления о работе Procmail. В листинге приведен чрезвычайно простой пример файла Procmail, предназначенного для фильтрации сообщений. Содержащиеся в нем рецепты пригодны для пользовательского файла .procmailrc
, поскольку они предусматривают доставку сообщений в папку рабочего каталога пользователя.
Листинг 19.3. Пример конфигурационного файла Procmail
MAILDIR = $HOME/Mail
# Поиск рекламных сообщений. Проверка не затрагивает письма,
# адресованные пользователю postmaster или отправленные им
:0
*! (From|To) : . *postmaster
{
: 0 В
* .*301.*S.*1618 /dev/null
:0
* From: .*badspammer.net
/dev/null
:0
* Subject:.*$$$
/dev/null
}
# Проверка по ключевым словам rug и david и
# перенаправление писем адресату
:0 с
* From: . *[email protected]
* Subject: . *rug
! [email protected]
# Сообщения списков рассылки помещаются в отдельную папку
:0:
* То: . *list@mailinglist .example .com
$MAILDIR/mailinglist
Листинг 19.3 иллюстрирует некоторые важные особенности рецептов Procmail.
• Вложенные рецепты. Рецепты, выполняющие блокировку спама, содержатся в составе другого рецепта, в результате эти фильтры применяются только для тех сообщений, которые адресованы пользователям, отличным от postmaster
. (Это достигается посредством оператора отрицания, указанного в условиях включающего рецепта.) Аналогичный результат можно получить, включив условие *! То: .*postmaster
в состав каждого из фильтров, предназначенных для блокирования спама. В данном простом примере это может несколько сократить объем конфигурационного файла. В более сложных фильтрах при использовании вложенных рецептов объем файла уменьшается. Кроме того, применение вложенных фильтров уменьшает вероятность ошибки, так как некоторые условия при этом указываются однократно.
• Регулярные выражения. В листинге 19.3 содержатся три рецепта, предназначенные для фильтрации рекламных сообщений. Первый из них проверяет тело сообщения (на это указывает флаг В
) на наличие строки, содержащей последовательности 301, S
и 1618
. Этот рецепт предназначен для перехвата писем, содержащих указание на раздел 301
и номер S.1618
, которые часто используются спамерами для создания иллюзии официального сообщения. Второй из рецептов, предназначенных для фильтрации спама, блокирует все письма из домена badspammer.net
, а третий фильтр блокирует сообщения, содержащие в поле Subject:
последовательность $$$
. Обратите внимание на использование обратной косой черты для отмены специального значения символов. Все три рассматриваемых здесь рецепта направляют сообщения в файл /dev/null
, т.е. удаляют их. После копирования в файл /dev/null
письма уже не могут быть восстановлены. Файл блокировки для этих рецептов не требуется, так как сообщения не сохраняются ни в одной папке.
• Копирование сообщений. Вместо того чтобы записывать сообщение в файл, второй рецепт, приведенный в рассматриваемом примере, передает его другому пользователю. На это указывают флаг с
и восклицательный знак в начале описания действия. Сообщение должно удовлетворять двум критериям: отправителем его должен быть пользователь [email protected]
, и оно должно содержать слово rug
в поле заголовка Subject:
. Если хотя бы одно из условий не выполняется, сообщение не копируется.
• Сортировка сообщений. Последний рецепт распределяет сообщения по папкам. Письма, адресованные [email protected]
, помещаются в отдельную папку, расположенную в подкаталоге рабочего каталога пользователя, предназначенного для работы с почтой. Во многих списках рассылки поле заголовка сообщения используется для идентификации самого списка, а информация о получателе сообщения включается в поле То:
заголовка конверта. Для того чтобы выбрать наиболее удобный способ распределения писем по папкам, вам следует выяснить, какие данные содержатся в заголовках писем, распространяемых посредством списков рассылки.
Рецепты, приведенные в листинге 19.3, предельно просты, и их вряд ли можно использовать для решения конкретных задач, однако на их основе вы можете создать реальные рецепты. Кроме того, при необходимости вы можете внести изменения в фильтры, полученные из других источников.
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий
- Примеры
- 2. Пример создания базового отношения в записи на псевдокоде
- Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста
- Часть I На примере денег