Exim: корисні команди

Коротенькі нотатки по командах поштового сервера Exim.

Отримання базової інформації щодо Exim

Перевірити правильність синтаксису конфігураційного файлу і дізнатися, з підтримкою яких опцій зібрано exim:

# exim -bV

Вивести кількість повідомлень у черзі:

# exim -bpc

Друк списку повідомлень у черзі. Виводяться час постановки в чергу, розмір, ID-повідомлення, відправник, одержувач:

# exim -bp

Перегляд активних відправників:

# exim -bp | awk '{print $4}' | sort | uniq -c | sort -rn

Виведення сумарної інформації (виведені колонки: кількість листів, обсяг, найстаріший час, найновіший час, домен):

# exim -bp | exiqsumm

Тестування маршруту доставки до вказаної адреси:

# exim -bt [email protected]

Вивід в консолі буде приблизно наступний:

[email protected]
router = lookuphost, transport = remote_smtp
host mail.example.com [10.10.10.10] MX=10

Імітувати SMTP-транзакцію з командного рядка так, наче повідомлення прийшло із зазначеної IP-адреси. При цьому буде показано проходження і спрацьовування перевірок, фільтрів і листів доступу (ACL). Насправді жодне повідомлення нікуди доставлено не буде.

# exim -bh 10.10.10.10

Лістинг усіх налаштувань конфігурації:

# exim -bP

Пошук у черзі за допомогою утиліти exiqgrep

Перегляд повідомлень конкретного відправника:

# exiqgrep -f [email protected]

Перегляд повідомлень для конкретного одержувача:

# exiqgrep -r [email protected]

Пошук повідомлень, старших за вказаний час (кількість секунд). У прикладі — повідомлення, старші за 1 добу:

# exiqgrep -o 86400

Пошук повідомлень свіжіше зазначеного часу (кількості секунд). У прикладі — пошук повідомлень, що надійшли протягом останньої години:

# exiqgrep -y 3600

Перегляд заморожених повідомлень:

# exiqgrep -z

Підрахунок заморожених повідомлень:

# exiqgrep -zc

Перегляд заблокованих повідомлень:

# exiqgrep -x

Підрахунок заблокованих повідомлень:

# exiqgrep -xc

Перегляд тільки ідентифікаторів усіх повідомлень:

# exiqgrep -i

Керування чергою повідомлень

Примусове надсилання всієї пошти в черзі  (запуск черги):

# exim -q -v

Запуск черги тільки для локальної доставки:

# exim -ql -v

Видалити повідомлення з черги:

# exim -Mrm ID-повідомлення

Видалити всі заблоковані повідомлення з черги:

# exipick -zi | xargs exim -Mrm

Видалити всі повідомлення з черги:

# exipick -i | xargs exim -Mrm

Або:

# exim -bpr | awk {'print $3'} | xargs exim -Mrm

Видалити всі заблоковані повідомлення:

# exiqgrep -z -i | xargs exim -Mrm

Або:

# exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm

Видалити всі повідомлення, старіші за 3 доби (86400 * 3 = 259200 секунд):

# exiqgrep -o 259200 -i | xargs exim -Mrm

Заблокувати (заморозити) всі листи від зазначеного відправника:

# exiqgrep -i -f [email protected] | xargs exim -Mf

Видалити всі листи від зазначеного відправника:

# exiqgrep -i -f [email protected] | xargs exim -Mrm

Заблокувати (заморозити) повідомлення:

# exim -Mf ID-повідомлення

Розблокувати повідомлення:

# exim -Mt ID-повідомлення

Доставити повідомлення, незалежно від стану блокування або часу повторної доставки (примусова доставка повідомлення):

# exim -M ID-повідомлення

Доставити повідомлення, тільки якщо досягнуто часу для повторної доставки:

# exim -Mc ID-повідомлення

Примусово зупинити повідомлення з формулюванням “скасовано адміністратором”:

# exim -Mg ID-повідомлення

Перегляд заголовків повідомлень:

# exim -Mvh ID-повідомлення

Перегляд тіла повідомлень:

# exim -Mvb ID-повідомлення

Перегляд логів повідомлення:

# exim -Mvl ID-повідомлення

Додати одержувача в повідомлення:

# exim -Mar ID-повідомлення email email

Змінити адресу відправника повідомлення:

# exim -Mes ID-повідомлення email

Пошук повідомлень, надісланих із певної IP-адреси:

# exigrep '<= .* \[10.10.10.10\] ' /var/log/exim4/mainlog

Пошук повідомлень надісланих на певну IP адресу:

# exigrep '=> .* \[10.10.10.100\]' /var/log/exim4/mainlog

Даний приклад шукає повідомлення, що містять символи “=>” і відправлені на адресу “[email protected]”, далі, по конвеєру результат передається команді grep, яка з отриманого результату обирає рядки, які містять “<=” з інформацією про відправника, поштову адресу, IP-адресу, розмір повідомлення, ID-повідомлення та заголовок subject, якщо логування цього рядка увімкнене:

# exigrep '=> .*[email protected]' /var/log/exim4/mainlog | fgrep '<='

Генерувати з файлу журналу і показати статистику Exim:

# eximstats /var/log/exim4/mainlog

Теж що і вище, але з детальнішими даними:

# eximstats -ne -nr -nt /var/log/exim4/mainlog

Аналогічно, але за певний день:

# fgrep YYYY-MM-DD /var/log/exim4/mainlog | eximstats

Видалити всі повідомлення в черзі, що містять у тілі певний рядок:

# grep -lr 'a certain string' /var/spool/exim4/input/ | \sed -e 's/^.*\\/\([a-zA-Z0-9-]*\)-[DH]$/\1/g' | xargs exim -Mrm

Командою вище ми перевіряємо вміст каталогу /var/spool/exim4/input/ у пошуках файлів черги, що містять певний рядок у тілі повідомлення, оскільки команда exiqgrep не вміє переглядати тіло повідомлень. Якщо ви вирішите видалити знайдені файли безпосередньо, ЦЕ БУДЕ НЕ ПРАВИЛЬНО. Використовуйте призначені для цього команди exim. Після того, як ви внесли зміни до файлу конфігурації, необхідно перезапустити exim або послати робочому процесу сигнал SIGHUP, щоб він перечитав конфігураційний файл і зміни набули чинності. Краще, звісно, відправити сигнал, ніж перезапускати додаток:

# kill -HUP cat /var/run/exim4/exim.pid

Перевірка розпізнавання адреси exim і виведення роутера і транспорту, який буде використовуватися для доставки локальним користувачам:

# exim -bt [email protected]

Вивід в консолі буде приблизно наступний:

[email protected]
router = localuser, transport = local_delivery

Перевірка розпізнавання адреси exim, і виведення роутера і транспорту, який буде використовуватися для доставки зовнішнім користувачам:

# exim -bt [email protected]

Тестування доставки повідомлень зовнішнім користувачам:

# exim -v [email protected]

Далі вводимо руками заголовок листа:

From: [email protected]
To: [email protected]
Subject: test letter
test
^D
^C

Тестування доставки повідомлень локальним користувачам:

# exim -v postmaster

Далі вводимо руками заголовок листа:

From: [email protected]
To: [email protected]
Subject: test letter
test
^D
^C

Для повідомлень, які підозрюються в спамі, зручно спочатку масово зробити -Mf, потім -Mvl, -Mvh і -Mvb для пари навмання вибраних повідомлень. Якщо все ще неможливо з консолі визначити, чи це спам (наприклад, проблеми з кодуванням або є вкладення), то можна за допомогою -Mar додати себе до списку одержувачів і прискорити це повідомлення за допомогою -M. Коли все нарешті стане зрозуміло, то або -Mrm, або -Mt

Приклади видалення спамерської пошти з черги

Перегляд кількості повідомлень у черзі:

# exim -bpc

Перегляд активних відправників:

# exim -bp | awk '{print $4}' | sort | uniq -c | sort -rn

2061 <>
531 [email protected]
....................

Підрахунок кількості повідомлень у черзі від конкретного відправника:

# exiqgrep -i -f [email protected] | wc -l

536

Перегляд ID-повідомлень від конкретного відправника:

# exiqgrep -i -f [email protected] | less

1pPsll-006Aaz-0C
1pPWIG-005ITI-2G
................

Як правило, при перегляді тіла листа ми бачимо, що це спам:

# exim -Mvb 1pPsll-006Aaz-0C

# exim -Mvb 1pPWIG-005ITI-2G

Також можна переглянути заголовок повідомлення:

# exim -Mvh 1pPsll-006Aaz-0C

Логи повідомлення:

# exim -Mvl 1pPsll-006Aaz-0C

Видаляємо всі листи від зазначеного відправника:

# exiqgrep -i -f [email protected] | xargs exim -Mrm

Перегляд доменів і кількості листів, надісланих на цей домен, але відхилених одержувачем:

# tail -3000 /var/log/exim4/mainlog |grep 'rejected RCPT' |awk {print$4}|awk -F\[ '{print $2} '|awk -F\] '{print $1} '|sort | uniq -c | sort -k 1 -nr | head -n 5

Перевірка чи спамлять з /tmp або /home:

# tail -f /var/log/exim4/mainlog | grep tmp

# tail -f /var/log/exim4/mainlog | grep home

Видалення листів ВІД або ДЛЯ <>:

# exim -bpr | grep "<>" | awk '{print $3}' | xargs exim -Mrm

Видалення листів ВІД або ДЛЯ <example.com>:

# exim -bpr |grep "example.com" | awk {'print $3'} | xargs exim -Mrm

Перегляд кількості листів ВІД або ДЛЯ у черзі:

# exim -bpr | grep "<*@*>" | awk '{print $4}'|grep -v "<>" | sort | uniq -c | sort -n

Перегляд IP-адрес, які підключені на 25 порт:

# netstat -plan|grep :25|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort

Перегляд кількості листів і доменів, на які відправляються ці листи:

# exim -bp | exiqsumm | more

Перегляд кількості заморожених повідомлень:

# exim -bpr | grep frozen | wc -l

Шлях до скриптів, які відправляють поштові повідомлення:

# cd /var/spool/exim4/input/

# egrep "X-PHP-Script" * -R