Простой анализатор логов Postfix

Vladimir
Опубликовано в: Linux

Выявление адресов, генерирующих bounce

При создании сайтов, занимающихся email-маркетингом, полезно анализировать логи почтового сервера, например, для нахождения адресов, генерирующих hard bounce (перманентная ошибка доставки). Такие адреса нужно удалять из списка рассылки. Во-первых, для того, чтобы не нагружать сервер адресата, а во-вторых, чтобы не попасть в блок- или спамлист.

Мне сегодня пришлось написать простенький скрипт для анализа лог-файлов Postfix; чтобы добро не пропадало, я хочу поделиться им с читателями.

Скрипт не претендует на высокую производительность и универсальность и был написан где-то за полчаса. Любые усоврешенствования приветствуются.

#! /bin/sh

LOG=/var/log/mail.log
GREP=/bin/grep
AWK=/usr/bin/awk
SED=/bin/sed
CAT=/bin/cat
SORT=/usr/bin/sort
UNIQ=/usr/bin/uniq

qids=`$CAT $LOG | $GREP -Eo 'postfix/bounce\[[[:digit:]]+\]: ([A-Z0-F]+)' | $AWK '{ print $2; }' | $SORT | $UNIQ`
for i in $qids; do
    qm=`$CAT $LOG | $GREP -m 1 -E "postfix/cleanup\[[[:digit:]]+\]: $i" | $GREP -Eo "$i: message-id=(.*)"`
    echo `$CAT $LOG | $GREP -m 1 -Eo "postfix/(smtp|local)\[[[:digit:]]+\]: ($i): to=<(.*)>, .*, dsn=(.*)," | $SED -r -e 's/orig_to=[^,]+, //g' -e 's/[,:>]//g' -e 's/to=<//g' -e s/dsn=//g | $AWK '{ print $2 " " $3 " " $7; }'` `echo $qm | $GREP "$i:"| $SED s/message-id=//g  | $AWK '{ print $2 }'`
done;

На выходе получается примерно следующее:

[-]
View Code Text
03D683C009C email@example.com 5.1.1 <20081215012612.03D683C009C@mail.mysite.com>
1A2D73C009C email@example.com 5.1.1 <20081215012753.1A2D73C009C@mail.mysite.com>
246603C009C email@example.com 5.1.1 msgid
2FF123C009C email@example.com 5.1.1 <20081215014627.2FF123C009C@mail.mysite.com>
3E9CD3C009C email@example.com 5.1.1 <20081215005343.3E9CD3C009C@mail.mysite.com>
4B2BA3C009C ugrhvbytiouhyotnbiyt@example.com 5.1.1 <20081215002821.4B2BA3C009C@mail.mysite.com>
57ED83C009C email@example.com 5.1.1 <20081215010334.57ED83C009C@mail.mysite.com>
596293C009C email@example.com 5.1.1 <20081215010706.596293C009C@mail.mysite.com>
69DE93C009C email@example.com 5.1.1 <20081215012846.69DE93C009C@mail.mysite.com>
7EADE3C009C email@example.com 5.1.1 <20081215014717.7EADE3C009C@mail.mysite.com>
8011F3C009C email@example.com 5.1.1 <20081215011407.8011F3C009C@mail.mysite.com>

Первая колонка: идентификатор очереди Postfix (полезен, если есть необходимость детально изучить происшедшее; например, так: grep "идентификатор очереди" /var/log/mail.log).
Вторая колонка: email адресата
Третья колонка: DSN (если первая цифра — пятёрка, то это hard bounce, если четвёрка, то soft bounce)
Четвёртая колонка: уникальный идентификатор письма (по нему можно осуществлять поиск в БД).

Добавить в закладки

Связанные записи

15
Дек
2008

Комментарии к статье «Простой анализатор логов Postfix» (3)  »

  1. Lecactus says:

    в логе вижу упоминания такие а запускаю скрипт а на экране пусто…

    кстати в форме коментов капч-картинка у меня поечему то в ФФ показывается а в Опере нет ничего такого и даже не ругается что капчу не заполнил

    screenshots.zip

    • Vladimir says:

      в логе вижу упоминания такие а запускаю скрипт а на экране пусто

      Возможно, версия Postfix другая, возможно, что-то еще не так… Надо смотреть…

      а в Опере нет ничего такого и даже не ругается что капчу не заполнил

      Это фича — если человек уже один раз капчу заполнил и имеет контрольные cookies, то капча ему показываться не будет.

  2. Vladimir says:

    Модифицировал скрипт, теперь он учитывает письма, отправленные и через local, и через smtp.

Подписаться на RSS-ленту комментариев к статье «Простой анализатор логов Postfix» Trackback URL: http://blog.sjinks.org.ua/linux/456-simple-postfix-log-analyzer/trackback/

Оставить комментарий к записи «Простой анализатор логов Postfix»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя