как узнать версию exim
Как узнать версию exim
Постоянно при работе с exim приходится искать на других сайтах информацию по работе с очередью и остальным командам MTA Exim. Сайты меняются, уходят, приходят и надеяться можно только на себя. Решил у себя сделать заметку по наиболее часто используемым мною командам.
Управление Exim
Проверка конфигурации, вывод версии, вывод включенных в сборку модулей
Чем в данный момент занят MTA Exim?
Проверка маршрутизации почты по адресу электронной почты
Генерирование и отображение статистики Exim из лог-файла
Проверка SMTP соединения из коммандной строки для определенного IP-адреса. Результат покажет через какие проверки будет проходить письмо с данного IP-адреса, через какие ACL и фильтры. Необходимо заменить x.x.x.x на необходимый IP-адрес.
Отображение всех настроек Exim
Информация по очередям(Queue)
Вывести информацию по колличеству писем в очереди
Вывести список сообщений в очереди (время в очереди, размер, идентификатор сообщения, отправитель, получатель)
Отображение всех сообщений в очереди (количество, объем, старых, новых, области, и итоги)
Поиск сообщений в очереди
Поиск в очереди сообщения от определенного отправителя
Поиск в очереди сообщений для конкретного получателя/домена
Вывод только Message-ID, как результат одного из двух поисковых запросов выше
Вывод количества сообщений, как результат одного из поисковых запросов выше
Вывод только Message-ID очереди
Просмотр сообщений в очереди
Просмотр заголовков сообщения в очереди
Просмотр тела сообщения в очереди
Просмотр лога сообщения
Отправка всех frozen писем
Начать процесс выполнения очереди
Начать процесс выполнения только для локальных получателей
Удалить сообщение из очереди
Удалить все сообщения, которые старше, чем Х секунд из очереди (например, 5 дней будет 432 000 секунд)
Заморозить все сообщения в очереди от отправителя
Просмотр заголовков сообщения в очереди
Просмотр теля сообщения в очереди
Просмотр лога сообщения
Удалить все замороженные сообщения из очереди
Удалить все сообщения из очереди (плохая идея)
retry time not reached for any host after a long failure period
Срочно обновляйте exim до 4.92 — идёт активное заражение
Коллеги, кто использует на своих почтовых серверах Exim версий 4.87. 4.91 — срочно обновляйтесь до версии 4.92, предварительно остановив сам Exim во избежание взлома через CVE-2019-10149.
Потенциально уязвимы несколько миллионов серверов по всему миру, уязвимость оценивается как критическая (CVSS 3.0 base score = 9.8/10). Злоумышленники могут запускать на Вашем сервере произвольные команды, во многих случаях от рута.
Пожалуйста, убедитесь что Вы используете исправленную версию (4.92) либо уже пропатченную.
Либо пропатчите существующую, см. ветку комментария immaculate.
Обновление для centos 6: см. комментарий Theodor — для centos 7 оно тоже работает, если из epel напрямую еще не прилетело.
UPD: Убунту затронуты 18.04 и 18.10, обновление для них выпущено. Версии 16.04 и 19.04 не затронуты, если только кастомные варианты на них не ставили. Подробнее на их официальном сайте.
Сейчас описанная там проблема активно эксплуатируется (ботом, надо полагать), заметил у себя на некоторых серверах (бегавших на 4.91) заражение.
Далее читать актуально только для тех, кто уже «попал» — надо или перевозить всё на чистую VPS со свежим софтом, или искать решение. Попробуем? Пишите, если кто-то сможет побороть малварь эту.
Если Вы, являясь пользователем Exim и читая это, всё ещё не обновились (не убедились в наличии 4.92 или пропатченной версии), пожалуйста остановитесь и бегите обновляться.
Для уже попавших — продолжим…
Зловредов может быть великое множество. Запустив лекарство не от того и почистив очередь пользователь и не вылечится и возможно не узнает от чего ему лечиться нужно.
Заражение заметно так: [kthrotlds] грузит процессор; на слабой VDS на 100%, на серваках слабее но заметно.
Immutable можно снять например так, после чего удалить строку команды (1.5кб):
Далее там в редакторе crontab (vim) удаляем строку и сохраняем: dd
:wq
Однако какой-то из активных процессов перезаписывает снова, разбираюсь.
При этом висит куча активных wget’ов (либо curl’ов) на адреса из скрипта инсталлятора (см. ниже), я их пока сбиваю так, но они снова запускаются:
Скрипт инсталлятора трояна нашел тут (centos): /usr/local/bin/nptd… не выкладываю во избежание, но если кто заражен и разбирается в shell скриптах, пожалуйста изучите внимательнее.
Дополню по мере обновления информации.
UPD 4: Резюмируя на данный момент: отключаем exim, cron (с корнями), срочно убираем троянов ключ из ssh и правим конфиг sshd, перезапускаем sshd! И то пока не точно что это поможет, но без этого вообще беда.
Важную информацию из комментариев про патчи/апдейты вынес в начало заметки, чтобы читающие с неё начинали.
UPD 5: AnotherDenni пишет что малварь поменяла пароли в WordPress.
UPD 6: Paulmann подготовил временное лекарство, тестируем! После перезагрузки или отключения лекарства вроде как слетает, но пока хоть так.
Кто сделает (или найдёт) стабильное решение, пожалуйста пишите, многим поможете.
Если еще не сказали то вирус воскрешается благодаря неотправленному письму в exim, при повторной попытке отправить письмо он восстанавливается, гляньте в /var/spool/exim4
UPD 8: Снова спасибо за информацию AnotherDenni: FirstVDS предложили свою версию скрипта для лечения, давайте тестировать!
UPD 9: Похоже что работает, спасибо Кириллу за скрипт!
Главное не забудьте что сервер уже был скомпрометирован и злоумышленники могли успеть ещё каких-то нетиповых гадостей (не прописанных в дроппере) подсадить.
Поэтому лучше переехать на начисто установленный сервер (vds), или хотя бы продолжить отслеживать тему — если что-то будет новое, пишите в комменты здесь, т.к. явно не все будут переезжать на свежую установку…
UPD 10: Ещё раз спасибо clsv: он напоминает что заражаются не только серверы, но например и Raspberry Pi, и виртуалки всякие… Так что после спасения серверов не забудьте спасти свои видеоприставки, роботов и тд.
UPD 11: От автора целебного скрипта важное примечание для «лечащих вручную»:
(после применения того или иного метода борьбы с этим зловредом)
перезагружаться обязательно надо — малварь сидит где-то в открытых процессах и, соответственно, в памяти, и записывает себя по новой в крон каждые секунд 30
UPD 12: supersmile2009 нашел у себя в очереди exim другой(?) зловред и советует сначала изучить конкретно свою проблему, до начала лечения.
UPD 13: lorc советует скорее переезжать на чистую систему, и файлы переносить крайне осторожно, т.к. малварь уже в публичном доступе и её использовать могут другими, менее очевидными и более опасными способами.
UPD 14: успокаивающих себя тем что как люди умные от рута не запускают — ещё одно срочное сообщение от clsv:
Даже если работает не из под рута происходит взлом… У меня на OrangePi стоит debian
jessieUPD: stretch, exim запущен от Debian-exim и все равно случился взлом, потерло крон и прочее.
UPD 16: daykkin и savage_me столкнулись с другой проблемой: в системе в портах стояла одна версия exim, а на деле выполнялась другая.
Так что всем после обновления стоит убедиться что используете именно новую версию!
Конкретно с их ситуацией мы сообща разобрались.
На сервере использовался DirectAdmin и стоял его старый пакет da_exim (старой версии, без уязвимости).
При этом с помощью DirectAdmin’овского менеджера пакетов custombuild по факту потом была установлена более новая версия exim, уже уязвимая.
Конкретно в этой ситуации помогло также обновление через custombuild.
Не забывайте делать бэкапы до таких экспериментов, а также убедитесь что до/после обновления все процессы exim старой версии были остановлены и не «застряли» в памяти.
Полезные команды Exim
Управление Exim
Чем в данный момент занят MTA Exim?
Проверка маршрутизации почты по адресу электронной почты
Генерирование и отображение статистики Exim из лог-файла
Проверка SMTP содинения из коммандной строки для определенного IP-адреса. Результат покажет через какие проверки будет проходить письмо с данного IP-адреса, через какие ACL и фильтры. Необходимо заменить x.x.x.x на необходмый IP-адрес.
выводит все значения установленные в конфиге. У этой команды тоже есть
куча параметров, но дефолтное использование + grep достаточно в 90%
случаев.
Посмотрим настройки транспорта
Посмотрим настройки транспорта и подписи DKIM
отладка. Крайне полезная опция. Специально начал с нее, потому что её
можно комбинировать с любыми другими.
кроме того, что выдает версию и некоторую информацию о бинарнике,
проверяет exim.conf на ошибки (А скорее, на опечатки. Если эта опция
говорит, что все хорошо, то это еще не значит, что ВСЁ хорошо).
устанавливает имя отправителя. Если опция не указана, подставляется
значение поля «gecos» из данных пароля пользователя.
устанавливает адрес отправителя. Обычно, она может использоваться только
доверенными пользователями, но директива «untrusted_set_sender» может
разрешить её использование недоверенным пользователям.
Информация по очередям(Queue)
Вывести информацию по колличеству писем в очереди
Вывести список сообщений в очереди (время в очереди, размер, идентификатор сообщения, отправитель, получатель)
Отображение всех сообщений в очереди (количество, объем, старых, новых, области, и итоги)
Поиск сообщений в очереди
Поиск в очереди сообщения от определенного отправителя
Поиск в очереди сообщения по размеру, совпадающего с регулярным выражением:
Поиск в очереди сообщений для конкретного получателя/домена
Вывод только Message-ID, как результат одного из двух поисковых запросов выше
Вывод количества сообщений, как результат одного из поисковых запросов выше
Вывод только Message-ID очереди
Просмотр сообщений в очереди
Просмотр заголовков сообщения в очереди
Просмотр тела сообщения в очереди
Просмотр лога сообщения
Переместить сообщение (без ошибок)
Отправить сообщение об ошибке отправителю письма с формулировкой «отменено администратором»
Удалить сообщения и не посылать никаких ошибок (в логах упоминание будет).
Заблокировать (заморозить) сообщение:
Разблокировать (разморозить) сообщение:
Добавить получателя в сообщение:
Редактировать отправителя сообщения:
Просмотр заголовков сообщения в очереди
Просмотр теля сообщения в очереди
Просмотр лога сообщения
Управление очередью
просто запускает один процесс обработчика очереди; очередь сканируется и
сообщения доставляются в том, порядке в котором бы доставлялись обычно
(вообще, порядок случаен, здесь имеется ввиду, что учитываются все
заморозки и т. п.). Для каждого процесса обработчика очереди одно SMTP
соединение (это справедливо для всех опций этого класса). После одного
прохода по сообщениям процесс завершается (т.о. сообщения, у которых не
подошло время доставки даже не попытаются доставиться), если не указана
опция (см. ниже).
двухступенчатое выполнение очереди. При первой обработке очереди опция
«queue_smtp_domains» принимается как совпадающая с каждым доменом.
Адреса роутятся, происходят локальные доставки, но удалённые транспорты
не запускаются. Во время второй обработки происходит нормальное
сканирование очереди. Плюс такого способа в том, что те сообщения
которые роутятся на один и тот же хост, в основном, идут через одно
SMTP-соединение, на основе БД совпадений, которые были установлены при
первом сканировании очереди.
если присутствует флаг i то доставляются только те сообщения, для
которых еще не было попытки доставки.
если присутствует флаг f, доставляются любые незамороженные сообщения
(независимо от того, пришло их время повтора или нет).
то же что и f, но замороженные сообщения тоже доставляются.
l определяет, что нужно делать только локальные доставки (остальные
сообщения, разумеется, остаются в очереди).
Значение time идет после всех флагов. Он определяет промежуток времени,
через который будет повторяться заданная обработка очереди. Например:
Предпринимать попытку доставить любое (включая замороженные) сообщение,
требующее локальной доставки каждые 10 минут (очень полезно, когда
очередь забита всякой дрянью, которую нельзя удалить и из-за которой
нормальные люди не могут получить письма).
А так можно запустить демона, который будет обслуживать входящие
соединения и обрабатывать очередь каждые 30 минут (собственно штатные
средства ОС, его примерно так и запускают).
Начать процесс выполнения очереди
Принудительный запуск другой очереди
Доставить сообщение, вне зависимости от состояния блокировки или времени повторной доставки
Доставить сообщение, если достигнуто время для доставки
Принудительный запуск другой очереди c удалением замороженных сообщений
Начать процесс выполнения только для локальных получателей
Удалить сообщение из очереди
Удалить все сообщения, которые старше, чем Х секунд из очереди (например, 5 дней будет 432 000 секунд)
Удалить все сообщения, которые реньше, чем Х секунд из очереди (например, 5 дней будет 432 000 секунд)
Заморозить все сообщения в очереди от отправителя
Удалить все замороженные сообщения из очереди
Удалить все сообщения из очереди (плохая идея)
Поиск в журнальных файлах с помощью exigrep
Утилита exigrep ( не путайте с exiqgrep, использующейся для поиска в очереди ), используется для поиска по лог файлам. Например exigrep может вывести все записи из лог файла с совпадающим ID сообщения, что довольно удобно, учитывая что каждое сообщение занимает 3 строки в лог файле.
Поиск сообщений отправленных с определенного IP адреса:
Поиск сообщений отправленных на определенный IP адрес:
Данный пример ищет сообщения содержащие символы «=>», и отправленные на адрес «user@domain.tld», далее по конвейеру, результат передается команде grep, которая из полученного результата выбирает строки, содержащие « server_prompts = :
что выводит нам ID замороженных баунсов.
с — удалить все баунсы (не надо так делать!)
cf — удалить все frozen баунсы
exipick — показывает сообщения из очереди по разным критериям и в разных форматах
По умолчанию вывод сортируется по доменам в алфавитном порядке. Есть и
другие опции
— a — сортирует по возрасту самого старого сообщения
— c — сортирует по количеству сообщений
— b — показывает баунсы отдельно, строчки помечаются (b). Т.е. для тех
доменов где есть баунсы будет две строки, одна с b, другая без нее.
— f — показывает «замороженные» сообщения
— s — показывает и домен с которого отправлено и письмо, и домен
получатель. Соответсвенно каждая «пара» считается отдельно.
exigrep — Выборка из логов
Утилита позволяющая банально «грепать» логи. От обычного грепа
отличается тем, что выдет все строки для сообщения, у которого хотя бы
в одной строке встречается паттерн. Иногда это удобно, иногда такое
количество информации может быть излишним.
Использование
exigrep [-I] [-l] [-t ] [-v] [].
— I — включает регистрозависимость
— l — отключает обработку регулярных выражений в паттерне (все символы
начинают обрабатываться «как есть»)
— t — в качестве n нужно указывать количество секунд. Выводятся
только сообщения, которые провели в очереди больше чем n секунд.
— v — опция идентична grep’овской. Выводит только строки не содержащие
паттерн (вернее, строки относящиеся к сообщениям у которых ни в одной
строке нет паттерна).
Логи можно подавать на стандартный ввод или через пробел после всех
опций. Логи могут быть в архиве (вообще говоря, все это дело
определяется опциями сборки ZCAT_COMMAND и COMPRESS_SUFFIX в файле
Local/Makefile).
eximstats — Статистика на базе логов
Утилита парсит логи экзима (или syslog’а) и выводит статистический
анализ по всем содержащимся сообщениям.
Вывод может быть в трех форматах: txt, html, xls (Excel).
Это не все утилиты, которые идут с 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. В процессе
написания использовались некоторые формулировки из перевода документации
[urlspan]отсюда.[/urlspan]
Как узнать версию exim
Полезные команды Exim
Получение базовой информации по Exim
Проверить правильность синтаксиса конфигурационного файла и узнать с поддержкой каких опций собран exim:
Вывести количество сообщений в очереди:
Печать списка сообщений в очереди. Выводятся, время постановки в очередь, размер, ID сообщения, отправитель, получатель:
Просмотр активных отправителей
Вывод суммарной информации.
Выводимые колонки: количество писем, объем, самое старое время, самое новое время, домен.
Тестирование маршрута доставки до указанного адреса:
Иммитировать SMTP транзакцию из командной строки, как если-бы сообщение пришло с указанного IP адреса. При этом будет показано прохождение и срабатывание проверок, фильтров и листов доступа (ACL). На самом деле, никакое сообщение никуда доставлено не будет.
Листинг всех настроек конфигурации
Поиск в очереди с помощью утилиты exiqgrep
Просмотр сообщений конкретного отправителя
Просмотр сообщений для конкретного получателя
Поиск сообщений, старше, указанного времени ( количества секунд)
В примере, сообщения старше 1 дня:
Поиск сообщений свежее указанного времени(количества секунд). В примере поиск сообщений, пришедших в течение последнего часа:
Просмотр замороженных сообщений
Подсчет замороженных сообщеий
Просмотр заблокированных сообщений
Подсчет заблокированных сообщеий
Просмотр только идентификаторов всех сообщений
Управление очередью сообщений
Принудительная рассылка всей почты в очереди
Запуск очереди только для локальных доставок:
Удалить сообщение из очереди:
Удалить все заблокированные сообщения из очереди:
Удалить все сообщения из очереди:
Удалить все заблокированные сообщения:
Удалить все сообщения, старше 5 дней (86400 * 5 = 432000 секунд):
Заблокировать(заморозить) все письма от указанного отправителя:
Удалить все письма от указанного отправителя:
Заблокировать( заморозить ) сообщение:
Разблокировать сообщение:
Доставить сообщение, вне зависимости от состояния блокировки или времени повторной доставки(принудительная доставка сообщения):
Доставить сообщение, только если достигнуто время для повторной доставки:
Принудительно остановить сообщение с формулировкой «отменено администратором»:
Просмотр заголовки сообщений:
Просмотр тела сообщений:
Просмотр логов сообщения:
Добавить получателя в сообщение:
Изменить адрес отправителя сообщения:
Поиск сообщений отправленных с определенного IP адреса:
Поиск сообщений отправленных на определенный IP адрес:
Данный пример ищет сообщения содержащие символы «=>», и отправленные на адрес «user@domain.tld», далее по конвейеру, результат передается команде grep, которая из полученного результата выбирает строки, содержащие «
Генерировать из лог файла и показать статистику Exim:
То-же что и выше но с более подробными данными:
Аналогично но за определенный день:
Удалить все сообщения в очереди, содержащие в теле, определенную строку:
Проверка распознавания адреса exim, и вывода роутера и транспорта который будет использоваться для доставки локальным пользователям:
Проверка работы почтового сервера Exim на примере CentOS
Я написал небольшую шпаргалку по основным командам как проверить работу почтового сервера EXIM. Как правило он не доставляет проблем и поэтому со временем забываешь как им пользоваться и попадаешь в ступор при возникновении недоразумений с доставкой почты.
Как проверить работу почтового сервера на PHP
Для проверки работы почтового сервера я использую следующий PHP скрипт:
Этот скрипт попытается отправить проверочное письмо по списку адресов из массива. Измените этот список на почтовые ящики к которым у вас есть доступ и сохраните скрипт в каком-нибудь PHP файле у себя на сайте (например testmail.php) и затем запустите в окне браузера (http://mydomain.tld/testmail.php).
При успешной работе скрипта вы увидите в окне браузера список email адресов куда сервер попытается доставить почту. Далее вам нужно будет проверить указанные в скрипте почтовые ящики, чтобы убедиться что письма пришли.
Как проверить работу почтового сервера Exim из командной строки
Если кто-то вас уверяет, что сервер ничего не отправляет, то проверьте его его работу прямо из консоли:
где mail@domain.tld адрес электронный почты, на который вы хотите отправить проверочное сообщение.
Если при этом вы получили сообщение об ошибке:
То установите mailx (пример для CentOS):
Команды для работы с очередью сообщений в Exim
Проверить количество сообщений в очереди:
Получить список сообщений в очереди:
Просмотреть тело сообщения с конкретным ID:
Удалить все «замороженные» сообщения из очереди:
Полностью очистить очередь сообщений (удалить все неотправленные сообщения):
Благодарности
При написании статьи были использованы следующие источники: