Полезные утилиты Exim

Одним из главных плюсов Exim’а, без сомнения, являются утилиты, которые поставляются вместе с ним. Они могут значительно упростить рутинные операции, сократить ваши однострочники раз в 5, и дают возможность составлять сложные sh-скрипты для некоторых часто повторяемых действий с очередью и/или логами.

exiqgrep – Выборка из очереди.

Без опций будет идентично exim -bp
Самая главная опция это -h, которая выводит список всех опций.

-f <regexp; – регэксп совпадения с адресом отправителя
-r <regexp; – регэксп совпадения с адресом получателя
-s <regexp; – регэксп совпадения с полем размера (именно с полем размера, в том виде как оно указывается при выводе exim -bp)
регэкспы не надо заключать в //

-y <seconds; – выводит сообщения «младше» заданного количества секунд
-o <seconds; – выводит сообщения «старше» заданного количества секунд
-z – только frozen сообщения
-x – все кроме frozen
-c – Показать только количество совпадений (в зависимости от версии показывает либо просто число, либо фразу типа «15 matches out of 78 messages»
-l – Показывает полную информацию, как её выводит exim (включено по умолчанию)
-i – Показывает только IDs совпавших сообщений
-b – Показывает совпадения в «кратком» формате. Одна строка: ID, From и To
-R – Выводит сообщения в обратном порядке

Разумеется, опции можно комбинировать и делать вещи типа:
exiqgrep -zif ‘^<;$’
что выводит нам ID замороженных баунсов…

На основе этого можно написать такой вот скрипт

#!/bin/sh

if ! [ `which exim 2;/dev/null` ]; then
        echo "Sorry, exim binary not found! Exit now."
        exit
fi

if ! [ `which exiqgrep 2;/dev/null` ]; then
        echo "Sorry, exiqgrep binary not found! Exit now."
        exit
fi

if [ "$1" == "cf" ]; then
        num_of_frz_mes=`sudo exiqgrep -zif '^&lt;;$|wc -l`
        sudo exiqgrep -zif '^&lt;;$'|xargs sudo exim -Mrm ; /dev/null
        echo "$num_of_frz_mes frozen bounces deleted"
        exit
fi

if [ "$1" == "c" ]; then
        num_of_mes=`sudo exiqgrep -if '^&lt;;$'|wc -l`
        sudo exiqgrep -if '^&lt;;$'|xargs sudo exim -Mrm ; /dev/null
        echo "$num_of_mes bounces deleted"
        exit
fi

num_of_mes=`sudo exiqgrep -if '^&lt;;$'|wc -l`
num_of_frz_mes=`sudo exiqgrep -zif '^&lt;;$'|wc -l`
echo "$num_of_mes bounces currently in the queue"
echo "$num_of_frz_mes frozen bounces currently in the queue"

Запуск без опций показывает количество баунсов в очереди.
с – удалить все баунсы (не надо так делать!)
cf – удалить все frozen баунсы

А можно ускорить доставку для определённого домена (-v можно убрать, разумеется):
exiqgrep -i -r ‘domain.com$’ | xargs exim -v -M

Иногда, при использовании exiqgrep появляется такое
Line mismatch: 236d 1HOnvz-00069X-8w <info@lischer.com;
Лечится так
exim -bpr | grep «^[0-9][0-9][0-9]d» | awk ‘{print $2}’ | xargs exim -Mrm
Я не буду рассасывать, что это значит и как такое получается потому, что это «выходит за рамки статьи».

exipick – показывает сообщения из очереди по разным критериям и в разных форматах

Создана как замена exiqgrep’у. Лично мне хватает последнего, но если захочется чего-нибудь помощнее читайте exipick —help или perldoc exipick

exiqsumm – Анализ очереди

Сама по себе эта утилита ничего не делает. На вход ей обязательно надо подать очередь exim’а.
exim -bp | exiqsumm

Вывод программы по умолчанию состоит из пяти колонок: количество сообщений на домен, их общий объем, время жизни самого старого, самого нового, и собственно домен назначения.
В конце вывода есть суммарные значения.

По умолчанию вывод сортируется по доменам в алфавитном порядке. Есть и другие опции
-a – сортирует по возрасту самого старого сообщения
-c – сортирует по количеству сообщений
-b – показывает баунсы отдельно, строчки помечаются (b). Т.е. для тех доменов где есть баунсы будет две строки, одна с b, другая без нее.
-f – показывает «замороженные» сообщения
-s – показывает и домен с которого отправлено и письмо, и домен получатель. Соответсвенно каждая «пара» считается отдельно.

А вот так можно выявлять спамеров.
exim -bp | exiqsumm -c -s | head
В выводе появится что-то типа

root@domain.ru [~]# exim -bp | exiqsumm -c -s | head

Count  Volume  Oldest  Newest  Domain
-----  ------  ------  ------  ------

  668   814KB     74m     66m  server.ru ; yahoo.com
  653   788KB      3h     66m  server.ru ; mail.ru
   68    82KB     66m     66m  server.ru ; list.ru

Разумеется вместо server.ru будет qualify domain (подробнее см. опцию -f коммандной строки), или домен отправителя если шлют через SMTP.
Узнаем, что это за негодяй
exiqgrep -b -f ‘server.ru’ -r ‘mail.ru’ | awk ‘{print $3}’ | sort | uniq -c | sort -n | tail
Самый нижний он и есть.

Хотя все это можно сделать проще и за один заход, с помощью exiqgrep
exiqgrep -b | awk ‘{print $3}’ | sort | uniq -c | sort -n | tail

Ну и соответственно удалить всю очередь от него
exiqgrep -i -f ‘<spamer@server.ru;’ | xargs exim -Mrm

Хорошо бы только сначала посмотреть для пары наугад выбранных сообщений полную информацию. Или можно такое использовать (это уже извращение, разумеется) MID=`exiqgrep -i -f ‘<spamer@server.ru;’|tail -1`;exim -Mvl $MID; exim -Mvh $MID

Но вернемся к exiqsumm. У этой утилиты есть пара важных нюансов. Во-первых, считает она не сами сообщения а «доставки». И если некоторые сообщения имеют более одного получателя, то доставок будет больше чем сообщений. Во-вторых, домены на которые доставляется письмо в результате альясинга или форвардинга – не включаются (если не использовалась опция «one_time» роутера «redirect» для конвертации из в адреса «верхнего уровня»). Поэтому всегда надо смотреть логи.

exigrep – Выборка из логов

Утилита позволяющая банально «грепать» логи. От обычного грепа отличается тем, что выдет все строки для сообщения, у которого хотя бы в одной строке встречается паттерн. Иногда это удобно, иногда такое количество информации может быть излишним.

Использование
exigrep [-I] [-l] [-t ] [-v] []…
-I – включает регистрозависимость
-l – отключает обработку регулярных выражений в паттерне (все символы начинают обрабатываться «как есть»)
-t<n; – в качестве n нужно указывать количество секунд. Выводятся только сообщения, которые провели в очереди больше чем n секунд.
-v – опция идентична grep’овской. Выводит только строки не содержащие паттерн (вернее, строки относящиеся к сообщениям у которых ни в одной строке нет паттерна).

Логи можно подавать на стандартный ввод или через пробел после всех опций. Логи могут быть в архиве (вообще говоря, все это дело определяется опциями сборки ZCAT_COMMAND и COMPRESS_SUFFIX в файле Local/Makefile).

eximstats – Статистика на базе логов

Утилита парсит логи экзима (или syslog’а) и выводит статистический анализ по всем содержащимся сообщениям.
Вывод может быть в трех форматах: txt, html, xls (Excel).

Использование
eximstats [Output] [Options] mainlog1 mainlog2

По умолчанию скрипт выведет статистику в STDOUT в формате txt. Например можно сделать так
eximstats mainlog1 mainlog2 … ; report.txt
но лучше так
eximstats -txt=report.txt mainlog1 mainlog2
Вместо txt можно указать html или xls, чтобы вывод был в соответствующем формате.

Уже готовые отчеты можно объединить в один.
eximstats -merge -html [Options] report.1.html … ; weekly_rep.html

У программы масса опций, посмотреть их можно так
eximstats -help
или так
perldoc eximstats
Если отчеты в html, то можно даже png-графики выводить.

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

exim_checkaccess – проверка приема для адреса с IP

Очень простая программа для проверки Relay. Заменяет «exim -bh». Используем так:
exim_checkaccess <IP address; <email address; [exim options]
IP – IP отправителя
email address – адрес который будет указываться в RCPT TO
Обе опции обязательные (к сожалению, я не нашел как проверить «с любого IP»). После опций можно добавить любые опции экзима. Т.к. утилита использует <; в качестве отправителя удобно использовать её так:
exim_checkaccess 10.9.8.7 A.User@a.domain.example -f himself@there.example

Это не все утилиты, которые идут с exim’ом. Описал только те, которые считаю наиболее полезными.
Остальные утилиты просто перечислю:

  • exiwhat – список того, что делают процессы exim`a
  • exicyclog – ротация лог-файлов
  • exim_dbmbuild – сборка файла DBM
  • exinext – извлечение информации повторов
  • exim_dumpdb – дамп БД подсказок
  • exim_tidydb – очистка БД подсказок
  • exim_fixdb – правка БД подсказок
  • exim_lock – блокировка файла почтового ящика (mailbox)
  • eximon – показывает в X’ах информацию о состоянии очереди exim’a, и о том, что exim делает

Есть сторонние утилиты, типа
exilog – обеспечивает визуализацию логов от многих серверов exim’a.
Lire – аналог eximstats, но на самом деле это более глобальная программа которая анализирует логи многих программ и выводит статистику.

Источник

Запись опубликована в рубрике *Mail, *Unix,*Linux. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91