четверг, 12 ноября 2009 г.

Мой другой проект о гитаре

allguitar.info Игра на гитаре руками. Переводы статей.

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

Спасибо за внимание, и извините...
Читать далее

вторник, 2 сентября 2008 г.

Чистка очереди exim

В очереди, увы, может накапливаться всякая дрянь... Кто-то неправильное мыло в веб-форме указал, где-то спамеры с несуществующего адреса что-то прислали. От этого нужно избавляться, желательно по крону. Нижеприведенный скрипт предназначен для чистки очереди Exim'а на cPanel серверах, но cPanel здесь необязательна.

Настоятельно рекомендую все пути к бинарникам прописать абсолютными -- для верности.
Пользователь от которого запускается скрипт должен быть доверенным для Exim'а (в общем случае, просто добавте его в группу mail).

Кроме того, объясню шаманскую строчку.
По непонятным для меня причинам (кто объяснит?!) экзим иногда теряет тела писем после доставки. В следствие чего, в выводе списка писем (exim -bp) объем тела не указан.
exiqgrep такое не понимает и падает с подобной ошибкой:
Line mismatch:  4h       1Kg6sa-0454TM-Tu <sender@domain.com>

Поэтому и была написана "шаманская строчка", которая таких "призраков" изгоняет.

Рекомендую очень хорошо понять, что делает скрипт перед тем как пихать его в крон. Почта удаляется из очереди навсегда.

#!/bin/bash

# Определяем qualify_domain -- он нужен для удаления всякой лажи
domain=`exim -bP | grep -i "^qualify_domain" | sed -e s/.*\=\ //g`

# Это очень шаманская строчка
exim -bpr | grep '<' | awk '{print $2}' | grep '-' | xargs exim -Mrm 2> /dev/null

# если скрипту передан параметр c, то включается более агрессивный режим
if [ "$1" == "c" ]; then

# Удаляем все баунсы старше 10 минут
exiqgrep -o 600 -if '^<>$' |xargs exim -Mrm
# Удаляем сообщения с адресами начинающимися с подчерка, минуса или вертикальной черты
exiqgrep -f '^<\_|^<\-|^<\|' -i | xargs exim -Mrm
exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm
#Удаляем сообщения отправленные скриптами на китайские домены старше 10 минут
exiqgrep -f "$domain" -r '.cn$' -o 600 -i | xargs exim -Mrm
# Удаляем любые сообщения отправленные скриптами, если они не доставлись за 12 часов
exiqgrep -f "$domain" -o 43200 -i | xargs exim -Mrm
exit
fi

# В мягком режиме удаляем только frozen баунсы и письма с невозможными адресами в заголовках
exiqgrep -zif '^<>$' |xargs exim -Mrm
exiqgrep -f '^<\_|^<\-|^<\|' -i | xargs exim -Mrm
exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm



Читать далее

ЛинСовет: Полезные Советы По Linux

Есть такой ресурс Полезные советы по Linux с недавнего времени называемый Линсовет.
Люди публикуют различные советы. Советы бывают самые разные, и самого разного уровня, начиная с "как выйти из telnet" и заканчивая чем-нибудь хитрым типа "Аутентификация пользователей windows через MIT Kerberos" (ну, для меня это что-то хитрое).

Сделал подборку моих любымых советов с сайта. Важно читать комментарии, часто там информации больше чем в самом совете.

Работа с tar. Базовые операции и шифрование.
Использование tar в качестве cp
Копирование директорий с сохранинием прав и атрибутов (также по сети)

Создание виртуальной файловой системы и ее монтирование
Создаём swap как обычный файл

Как сделать работу с историей команд в bash приятнее
Как посчитать сумму чисел в выводе программы

Поиск одинаковых файлов
Поиск и замена текста в нескольких файлах
Заменить повторяющиеся пустые строки на одну пустую строку
Массовое переименование файлов с пробелами и разными регистрами
Краткий справочник по массовому переименовыванию файлов
Удаление множества файлов

vim и кодировки
Вставка в vim текста из клипбоарда
Сетевые возможности vim
Редактирование файлов на FTP с помощью lftp
Редактирование с помощью vim файлов в архивах
Сохранение файла без прав на запись в vim используя sudo

Как быстро закодировать/раскодировать файл
vim + gpg = удобное и безопасное хранилище приватной информации
vim + openssl = удобное и безопасное хранилище приватной информации

Добавить из скрипта сообщение в системный лог
Использование команды перенаправления без команды
Логи в отдельной консоли

Как бороться с umount: ... device is busy
Как бороться с Зомби

Решение задачи однострочником на perl
Решение задачи однострочником на perl 2
FTP-автологин
Тестирование https из командной строки
Использование ports в FreeBSD на хостингах без прав root

Читать далее

Удобная смена паролей для cPanel'ных пользователей

Итак, есть некоторое количество cPanel'ных хостинговых серверов, есть некий сервер который имеет доступ на каждый из сипанельных серверов по SSH на любой IP без пароля (по ключу или по хосту).

Надо легко и просто из консоли менять пароли для клиентов.

Дано два скрипта:
chpass.sh - лежит на основном сервере, NOC
rchpass.sh лежит на каждом хостинговом сервере в /sbin/

Первый скрипт принимает в качестве параметра домен, логинится по этому домену на хостинговый сервер, сначала смотрит какому логину нужно менять пароль и переспрашивает все ли верно. Скрипту нужно ответить yes, иначе выполнение прервется.
Если подтверждение получено, то удаленный скрипт с помощью стандартных сипанельных скриптов меняет пароль (так как это делает сама сипанель через WHM) и возвращает текст который можно сразу copy/paste'ить в письмо.

Рекомендую прочесть комментарии, там описано как это все происходит. Теоретически можно использовать непосредственно rchpass.sh чтобы менять пароль из консоли прямо на сервере, если у вас он только один.

Требования к скрипту:
1. На NOC должен стоять pwgen
2. Юзер под которым мы логинимся на хостинговый сервер должен иметь беспарольное sudo на некоторые сипанельные скрипты

Первый, основной скрипт


#!/bin/bash

####################################################################
# #
# chpass.sh v1.2 (CSX, 1 September 2008) #
# #
# http://support24x7.blogspot.com/ #
# #
# Главная часть скрипта для смены пароля на хостинговых серверах. #
# Вторая часть должна лежать на хостинговых серверах #
# /sbin/rchpass.sh. #
# #
# Скрипт в качестве опции принимает имя домена, логинится туда, #
# куда резолвится домен с NOC'а, и запускает там удаленный скрипт, #
# который меняет все пароли и возвращает текст для письма клиенту. #
# #
# Для изменения пароля используются стандартные скрипты cPanel. #
# #
####################################################################

# Если нет опций
if [ -z "$1" ]
then
echo "Use: chpass.sh <domain>"
exit 0
fi

# Если опций более одной
if [ "$2" ]
then
echo "Only one argument is allowed"
exit 0
fi

domain=$1

# Изменяя первый параметр мы можем изменять длину пароля
pass=`pwgen 8 1`

echo "Domain: $domain"

# Запускаем удаленный скрипт /home/tech/bin/cdpass.sh с параметром test в качестве второй опции,
# так он отдаст нам имя пользователя и спросит разрешения на смену пароля.
# Такой скрипт должен лежать на всех хостинговых серверах.
echo "/home/tech/bin/cdpass.sh $domain test"|ssh $domain 2> /dev/null || `echo "Can't connect to host"; exit 0`
echo ''
echo -n "Change password [yes/NO]: "
read resp
echo ""
if [ "$resp" != "yes" ]
then
echo 'OK. Stoped'
exit 0
fi

# Если разрешение на смену пароля получено то запускаем удаленный скрипт и меняем пароль.
echo "/sbin/rchpass.sh $domain $pass"|ssh $domain 2> /dev/null || `echo "Can't connect to host"; exit 0`

# Пишем в лог дату и сообщение о том для какого домена был сменен пароль и на какой.
# Разумеется, это очень несекьюрно, поэтому по-умолчанию закомментировано
# ---- logging ----
# logdate=`date "+[%d/%m/%y %T] "`
# echo -n "$logdate" >> /var/log/chpass.log
# echo -n "Password for domain $domain changed to $pass" >> /var/log/chpass.log
# echo '' >> /var/log/chpass.log
# ---- logging ----

# Если видно это сообщение, значит все прошло хорошо.
echo "Done"


Второй скрипт, который собственно делает всю работу


#!/bin/bash

####################################################################
# #
# rchpass.sh v1.2 (CSX, 1 September 2008) #
# #
# http://support24x7.blogspot.com/ #
# #
# Вторая часть скрипта для смены пароля на хостинговых серверах. #
# Первая часть должни лежать на NOC сервере #
# #
# Скрипт в качестве первой опции принимает имя домена, в качестве #
# второй опции пароль или слово test. Если вторая опция не test, #
# то скрипт меняет пароль для хостинг-аккаунта владельца домена и #
# возвращает текст для письма клиенту. Если вторая опция test, то #
# возвращает логин владельца домена и завершается. #
# #
# Для изменения пароля используются стандартные скрипты cPanel. #
# #
####################################################################

# Если не две опции
if [ -z "$1" ] || [ -z "$2" ]
then
echo "empty"
exit 0
fi

# Если вторая опция test выводим логин владельца домена и завершаем работу
if [ "$2" = "test" ]
then
ddomain=$1
usrname=`sudo /scripts/whoowns $ddomain`
echo -n "Username: "
echo $usrname
exit 0
fi

ddomain=$1
ppass=$2

usrname=`sudo /scripts/whoowns $ddomain`
echo -n "Username:"
echo $usrname

# Этот сипанельный скрипт меняет UNIX пароль
sudo /scripts/chpass $usrname $ppass

# Этот скрипт меняет пароль для базы данных у cPanel'ного логина
# (используется, например, для доступа в phpMyAdmin)
sudo /scripts/mysqlpasswd $usrname $ppass && echo "Пароль для MySQL изменен"

# Этот скрипт синхронизирует UNIX пароль с паролями в настройках FTP сервера
sudo /usr/local/cpanel/bin/ftpupdate $usrname

echo ""
echo "---------------------------------------------------------------------------------"
echo "Здравствуйте!"
echo ""
echo "Пароль для Вашего сайта изменен!"
echo ""
echo "Новые данные:"
echo ""
echo "cPanel "
echo "Ссылка: https://$ddomain:2083"
echo "Логин: $usrname"
echo "Пароль: $ppass"
echo ""
echo "FTP"
echo "Ссылка: ftp://$ddomain"
echo "Логин: $usrname"
echo "Пароль: $ppass"
echo ""
echo "Любые другие настройки Вы можете изменить самостоятельно через cPanel."
echo "Пожалуйста, обратите внимание, что для доступа к cPanel у Вас должен быть открыт порт 2083 в файерволле. Для доступа к FTP порт 21."
echo ""
echo "Спасибо."
echo "---------------------------------------------------------------------------------"

Буду рад сообщениям обо всех замеченных ошибках.

Читать далее

четверг, 28 августа 2008 г.

Прячем файлы mount, или ищем пропавшее место

С помощью mount можно "прятать" файлы. Когда файловая система монтируется в папку, в которой уже есть файлы, они становятся абсолютно недоступны. Но занимают место.

При необходимости, это легко сделать с помощью монтирования iso.
Например во FreeBSD так:
# монтирование
mdconfig -a -t vnode -f filename.iso -n 0
mount_cd9660 /dev/md0 folder
# размонтирование
umount folder
mdconfig -d -u 0

Создать сам iso файл можно с помощью mkisofs из пакета cdrtools.

На самом деле, все это не так уж и полезно, поскольку df выдаёт такие "проказы" с головой.
Но знать о такой возможности нужно. Если непонятно куда делось место и показания df не соответствуют показаниям du, то велика вероятность, что какой-то волшебный человек положил несколько файликов в директорию, занятую сейчас файловой системой.
Ссылки:
OpenNET: статья - как смонтировать ISO image

Читать далее

Обход запретов в *nix

Unix-like системы имеют, с одной стороны, очень простую, с другой - довольно сложную систему распределения прав. И отнюдь не всегда, если у вас не хватает прав на то или иное действие с файлом вы не можете его сделать.

Итак, если мы уже в системе, то, при должной удаче, можем совершить любую операцию, если поправим всего один маленьких конфиг /etc/sudoers (или /usr/local/etc/sudoers в некоторых случаях). Конечно, есть еще /etc/passwd, /etc/shadow и /etc/group, но если к их защищенности всегда повышенное внимание, то к настройкам sudo часто нет. Но! Правка sudoers с помощью обычного текстового редактора может привести к неработоспособности sudo вообще, любая ошибка в конфиге и sudo не работает ни для какого пользователя. Будьте внимательны.

Дальше я просто опишу некоторые способы обхода прав на изменение файла.

1. Нет прав на запись/чтение файла, но есть права на запись у папки



[csx@localhost /tmp/test]$ ls -la
total 6
drwxrwxrwx 2 root wheel 512 Oct 28 09:48 .
drwxrwxrwt 7 root wheel 512 Oct 28 09:47 ..
-rw-r--r-- 1 root wheel 9 Oct 28 09:48 file
[csx@localhost /tmp/test]$ cat file
bad text
[csx@localhost /tmp/test]$ echo 'good text' > file
bash: file: Permission denied


Итак, у нас есть некая директория, в которую мы имеем право писать, и в ней есть файлик, который мы изменить не можем. В данном примере, мы даже можем посмотреть этот файлик, но это ни на что не влияет.

[csx@localhost /tmp/test]$ echo 'good text' > file2
[csx@localhost /tmp/test]$ cp file2 file
cp: file: Permission denied


Попытка создать другой файл с нужным содержимым и заменить file плодов не дала.

А если так?

[csx@localhost /tmp/test]$ mv file2 file
override rw-r--r-- root/wheel for file? (y/n [n]) y
[csx@localhost /tmp/test]$ cat file
good text
[csx@localhost /tmp/test]$ ls -al
total 6
drwxrwxrwx 2 root wheel 512 Oct 28 09:50 .
drwxrwxrwt 7 root wheel 512 Oct 28 09:47 ..
-rw-r--r-- 1 csx wheel 10 Oct 28 09:50 file


Получилось! Обратите внимание на то, что владелец поменялся. Практически в любой свободной версии *nix-подобной системы менять владельца может только root, поэтому замести следы за собой уже не получится. Кроме того, в некоторых случаях неверные права/владелец на конфиге могут повлиять на работоспособность программы (например, ssh не работает с неверными правами на ключи).
Разумеется, файл можно не заменять, а предварительно переименовать, а потом (когда нужные операции сделаны) переместить обратно. В таком случае, после всех наших операций, права вернутся на место.

2. У нас есть sudo на less


Это детский мат. Цитирую из man less
v - Invokes an editor to edit the current file being viewed.  The editor is taken  from  the environment  variable VISUAL if defined, or EDITOR if VISUAL is not defined, or defaults to "vi" if neither VISUAL nor EDITOR is defined.

Естественно, что если less запущен от root'а, то и редактор запустится от него же.

3. У нас есть sudo на редактирование какого-нибудь файла


Итак, если в sudoers указано что-то типа

[root@localhost ~]# cat /etc/sudoers | grep csx
csx ALL=NOPASSWD: /usr/bin/vim file.txt

Здесь все просто.
[csx@localhost /tmp]$ ln -s /etc/sudoers /tmp/file.txt
[csx@localhost /tmp]$ sudo vim file.txt

Это работает.

В том случае если путь к файлу указан полностью
[root@localhost ~]# cat /etc/sudoers | grep csx
csx ALL=NOPASSWD: /usr/bin/vim /usr/local/etc/file.txt


И у нас есть права на запись для папки в которой лежит "разрешенный" файл, то мы всегда можем его переместить (или удалить) и заменить симлинком.
И, наконец, если в качестве программы указан вовсе не редактор, то можно попытаться заменить сам бинарник.

Отмечу, что нужно это вовсе не для того, чтобы "взламывать" системы и чувствовать себя крутым хакером. А в тех ситуациях когда рутовые права потеряны.

Читать далее

Полезные утилиты 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 '^<>$|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

Читать далее