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 '^<>$|wc -l`
sudo exiqgrep -zif '^<>$'|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 '^<>$'|wc -l`
sudo exiqgrep -if '^<>$'|xargs sudo exim -Mrm > /dev/null
echo "$num_of_mes bounces deleted"
exit
fi
num_of_mes=`sudo exiqgrep -if '^<>$'|wc -l`
num_of_frz_mes=`sudo exiqgrep -zif '^<>$'|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, но на самом деле это более глобальная программа которая анализирует логи многих программ и выводит статистику.
Ссылки
Заменка написана на основе официальной документации к Exim. В процессе написания использовались некоторые формулировки из перевода документации отсюда
Официальный сайт программы
Официальная Wiki Exim'а
Сайт VirtualExim
Сайт утилиты exilog –
сайт Lire
FAQ по Exim MTA
Диспут на тему Exim vs Postfix
Virtual Domains with Exim + Courier-IMAP + MySQL
Установка почтового сервера на базе Exim
Комментариев нет:
Отправить комментарий