[Карта]                      [Начало]                      [Sendmail-ссылки]                      [Синтаксис]                      [Типовые задачки]                      [Задачки по маршрутизации]                      [Задачки по маскарадингу]                      [SendmailACL]                      [Spamooborona]                      [VadeRetro]                      [Regex]                      [Тонкости]                      [Недок.особен.]                      [Несущ.юзеры]                      [Прячемся!]                      [RFC1893.Цитаты]                      [ТП.Эмоции]                      [Антиспам&Разум]                     


Procmail. Задачки.

  • 0. Немного теории.
  • 1. Извещение получателя письма о том, что письмо с подозрительным вложением было отложено в карантин.
  • 2. Письмо со вложением (файл Excel) для одного получателя раскладываем по дополнительным ящикам.
  • 3. Письма со ссылками на фильмы и не только откладываем в отдельный файл, если они не от root'a..
  • 4.
  • 5.
  • 6.
  • 100. Ссылки.

  • 0. Немного теории.

    Procmailrc.5 гласит:
    Рецепты
    Строка, начинающаяся с ':', помечает начало рецепта. Он имеет следующий формат:

    :0 [флаги] [ : [локальный lock-файл] ]
    <ноль или более условий (по одному на каждую строку)
    <ровно одна строка действия>

    Условия начинаются с символа '*'. Все, что следует за этим символом (за исключением первого и последнего пробелов), передается внутреннему egrep. Эти регулярные выражения полностью соответствуют обычным расширенным регулярным выражениям egrep(1)
    Над условиями выполняется логическое И. Если условия отсутствуют, то значением по умолчанию будет "истина".
    Весьма показательны примеры из procmailex.5:

    :0
    * ^From.*peter
    * ^Subject:.*compilers
    {
    :0 c
    ! william@somewhere.edu

    :0
    petcompil
    }

    An equivalent solution that accomplishes the same:

    :0 c
    * ^From.*peter
    * ^Subject:.*compilers
    ! william@somewhere.edu

    :0 A
    petcompil
    An equivalent, but slightly slower solution that accomplishes the same:

    :0 c
    * ^From.*peter
    * ^Subject:.*compilers
    ! william@somewhere.edu

    :0
    * ^From.*peter
    * ^Subject:.*compilers
    petcompil



    1. Извещение получателя письма о том, что письмо с подозрительным вложением было отложено в карантин.

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

    Лог procmail'a:
    LOGFILE=/var/log/procmaillog

    05.05.2009. Следующие два правила имеют побочный эффект, который делает их применение неприемлемыми: если в строке To: указано несколько получателей (N), первым из которых значится именно someuser, то someuser получит письмо N раз. Значит, если пользоваться таким правилом, нужно ограничить адрес получателя признаком конца строки $. Но здесь еще не учтен вариант To: I.I.Ivanov< someuser@anrb.ru >.
    Пользователи someuser & otheruser получают нормальную (незараженную) почту с перечисленными ниже вложениями с определенного адреса, поэтому их почту не фильтруем.
    :0
    * ^To: someuser@anrb.ru$
    /var/spool/mail/someuser2

    :0
    * ^To: otheruser@anrb.ru$
    /var/spool/mail/otheruser2


    Отправитель, который посылает моим клиентам нормальную (незараженную) почту с перечисленными ниже вложениями, в качестве получателя указывает _иногда_ в поле "To:" и такой (единственный!) адрес получателя (список рассылки), прописывая между тем моих юзеров в "Bcc:"
    :0
    * ^To: hotline@somedomain.ru
    /var/spool/mail/someuser

    Далее проверяем тело письма (B), при этом после этой проверки (если она дала положительный результат) продолжаем исполнять конфиг (c)
    :0 B c
    *^.+name="(.+card.exe|.+(elm|log|txt|msg|dat|log).(pif|scr|bat|exe|cmd)|(Update-KB.*|postcard|setup|video|.+story|setup).(exe|zip)|(document|docs|doc|readme|test|body|message|messages|file|text|data|msg|Page|Mail).zip)"
    Складываем это добро в:
    /var/spool/mail/virus/virus

    Теперь формируем извещение пользователю:
    :0 A
    Это для того, чтобы избежать зацикливания:
    * !^X-Loop: loop@loop.anrb.ru
    {
    SHELL=/bin/bash
    Выцарапываем из заголовка адрес отправителя:
    Snd=`formail -xFrom:`
    А также получателя:
    Recip=`formail -xTo:`
    На тот случай, когда получателей несколько следует использовать подход посложнее:
    Recip=`formail -xTo:|egrep -o "[[:alnum:]]+@anrb.ru"|tr "\n" ","|sed 's/,$//g'`
    Его минус в том, что количество извещений продублируется согласно количеству получателей вашего домена
    Дублирование также возникнет, если письмо пришло проалисенному юзеру.
    Как с этим бороться, пока не знаю.
    Наш лог по поводу фильтрации будет болтливым:
    VERBOSE=on
    LOGABSTRACT=all
    И будет записываться сюда:
    LOGFILE=/var/log/suspic

    А теперь формируем сообщение (i - игнорируем сообщение об ошибках):
    :0i
    | ( formail -rI"From: postmaster@anrb.ru" -I"To:$Recip" -I"Subject: Suspicious attachment in the mail for you." -A"X-Loop: loop@loop.anrb.ru" ; date ; cat /etc/1251-1 ; echo $Snd ; cat /etc/1251-2 ; cat /etc/koi8-1 ; echo $Snd ; cat /etc/koi8-2 ; cat /etc/en1 ; echo $Snd ; cat /etc/en2 ) | /usr/sbin/sendmail -t
    }


    Пользователь получит следующее сообщение:

    "Fri May 25 18:16:23 YEKST 2007

    Сообщение, посланное отправителем Mail Delivery Subsystem (возможно, адрес подделан), не было вам доставлено, потому что содержит подозрительное вложение.
    Сообщение сохранено в архиве.
    Если вы хотите его получить, сообщите об этом postmaster@anrb.ru

    ================================================================

    уППВЭЕОЙЕ, РПУМБООПЕ ПФРТБЧЙФЕМЕН Mail Delivery Subsystem (ЧПЪНПЦОП, БДТЕУ РПДДЕМБО), ОЕ ВЩМП ЧБН ДПУФБЧМЕОП, РПФПНХ ЮФП УПДЕТЦЙФ РПДПЪТЙФЕМШОПЕ ЧМПЦЕОЙЕ.
    уППВЭЕОЙЕ УПИТБОЕОП Ч БТИЙЧЕ.
    еУМЙ ЧЩ ИПФЙФЕ ЕЗП РПМХЮЙФШ, УППВЭЙФЕ ПВ ЬФПН postmaster@anrb.ru

    =================================================================

    Dear user,the message sent to you from Mail Delivery Subsystem has not been delivered, because contains an suspicious attachment.
    The original message was stored in archive.
    In order to receive the original message, please send request to postmaster@anrb.ru.
    "

    Nota Bene! При указанном раскладе есть одна проблема: если письмо с "нехорошим" вложением приходит на список рассылки, то каждому участнику рассылки сваливается n-ое количество извещений, где n - число участников рассылки.
    Если кто-нибудь знает, как эту проблему обойти - буду признательна, если поделитесь.
    Будет время, добью это дело сама.

    2. Письмо со вложением (файл Excel) для одного получателя раскладываем по дополнительным ящикам.
    :0
    * ^To:.*paradise@anrb.ru.*
    {
    :0 B
    Хотя здесь не указан флаг D (нижний и верхний регистры различаются), я все же указала Content-Type в обоих регистрах. У меня было мало времени на тестирование этого правила, и не всегда оно срабатывало. Окончательно разобраться не удалось, так как скоро в нем необходимость отпала.
    * ^(.+name=".+.xls"|Content-Type: (application/vnd.ms-excel|APPLICATION/VND.MS-EXCEL).*)
    {
    :0 c:
    /var/spool/mail/gatling
    :0 c:
    /var/spool/mail/terrapin
    :0:
    /var/spool/mail/consiglio
    }
    }

    3. Письма со ссылками на фильмы и не только откладываем в отдельный файл, если они не от root'a.

    :0 B
    * http://(www.meqaproqenq.ru|p1\.fr/.|simurl.com/marher|www.slimlite.ru|xet.ru/|bazasite.ru|ticuryqudy.kogaryu.com|flopping.virtualgost.com)|745\-95\-87|vertex\-nsk.ru|getz.74@yandex.ru|mdsbook@gooddvdgood.ru|Hang Seng Bank Limited
    {
    :0
    * !^Return-Path: <root@mail.anrb.ru>
    /var/spool/mail/filmspam
    }


    100. Ссылки по procmail:
  • [1]
  • [2]
  • Ошибка "Error while writing to ..." "Error while writing to" is in the procmail manpage ('man procmail'), where it is described as "Nonexistent subdirectory, no write permission, pipe died or disk full."
  • [3]
  • [4]
  • sendmail + procmail - дублирование почты
  • Документация к procmail на рус.яз.
  • procmailex - примеры файлов настройки procmail [на рус.яз.]
  • procmailex - примеры файлов настройки procmail
  • You need to run 'chmod g+s /usr/bin/procmail'
  • [5]
    procmailrc - файл настроек procmail









    Обратная связь
    Последнее обновление: 23 ноября 2009 г.
    ------------