CoderNotes - заметки программиста

Публикации  »  Администрирование Linux
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Команды почтового агента Exim

Exim - это MTA (приложение, которое направляет и передает электронную почту с одного узла в сети на другой), который широко используется в Unix-подобных операционных системах. Его гибкость и конфигурационные возможности делают его популярным выбором для построения почтовых серверов.

Ниже приведены некоторые команды, используемые для решения популярных задач.

 

Запустить:

# /etc/init.d/exim start

Остановить:

# /etc/init.d/exim stop

Перезапустить:

# /etc/init.d/exim restart

Перезапустить по другому:

# service exim start|stop|restart

Узнать что делает Exim в данный момент:

# exiwhat

Проверить маршрутизацию почты по заданному email:

# exim -bt user@my_mail.com

Вывести статистику Exim из лог файла:

# eximstats /путь__к_exim_mainlog

Проверить SMTP соединение для конкретного IP-адреса (покажет как проходит письмо с IP-шника, через какие ACL и фильтры):

# exim -bh 145.56.66.32

Узнать версию Exim:

# exim -bV | head -n 1

Вывести все настройки Exim:

# exim -bP

 

Работа с очередью

Узнать сколько писем в очереди:

# exim -bpc

Показать список сообщений которые находятся в очереди (сколько они в очереди (их время), их размер, идентификатор сообщения, кто отправитель и кто получатель):

# exim -bp

Вывести список всех сообщений которые находятся в очереди (их количество, объем, старых или новых, их области):

# exim -bp|exiqsumm

Поиск очереди сообщений от заданного отправителя:

# exiqgrep -f user@my_mail.com

Поиск в очереди сообщений для получателя или домена:

# exiqgrep -r user@my_mail.com

Показать только Message-ID очереди:

# exiqgrep -i

Получить количество писем в очереди:

# exim -bpr | grep "<" | wc -l

Показать возвращенные письма (из-за неправильного адреса получателя или возвращенные по другим причинам):

# exiqgrep -f '^<>$'

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

# exim -bpr | grep frozen | wc -l

Найти сообщения, старее, указанного количества секунд. Например, сообщения старее 1 дня:

# exiqgrep -o 86400

Найти сообщения свежее указанного количества секунд. Сообщения, пришедшие в течении последнего часа:

# exiqgrep -y 3600

Найти сообщения по размеру, которые совпадают с заданным регулярным выражением (в примере от 100K и больше):

# exiqgrep -s '^\d{3,}K|\d{1,}M$'

Запустить процесс на выполнения в самой очереди:

# exim -q -v

Запустить процесс выполнения самой очереди для локальных получателей:

# exim -ql -v

Принудительно запустить другую очередь на выполнение:

# exim -qf

Принудительно запустить другую очередь на выполнение и попытаться очистить замороженные сообщения:

# exim -qff

Отправить одно сообщение принудительно:

# exim -M  email_id

 

Работа с сообщениями

Вывести заголовки сообщения по его ID:

# exim -Mvh <message-id>

Просмотреть тело сообщения по его ID:

# exim -Mvb <message-id>

Посмотреть логи сообщения:

# exim -Mvl <message-id>

Посмотреть информацию по сообщению на конкретный email:

# tail -f /var/log/exim_mainlog| grep vitaly.n@gvocom.com
# cat /var/log/exim_mainlog | grep 1ZAglY-0000dr-SY

Добавить получателя в сообщение:

# exim -Mar <message-id> <address> <address> ...

Поменять отправителя сообщения:

# exim -Mes <message-id> <address>

 

Удаление сообщений

Удалить замороженные сообщения:

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

Удалить сообщение из очереди по его ID:

# exim -Mrm <message-id>

Удалить все сообщения из очереди которые старше указанного количества времени (1 день = 86400 сек.):

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

Заморозить все сообщения в очереди от отправителя:

# exiqgrep -i -f email@example.com | xargs exim -Mf

Удалить все сообщения из очереди:

# exiqgrep -i | xargs exim -Mrm

Удалить сообщения которые идут от конкретного домена:

# exim -bp| exiqgrep -i -f DOMAIN_for_DELETE| xargs -n1 exim -Mrm

Удалить сообщения которые идут на конкретный домен:

# exim -bp| exiqgrep -i -r DOMAIN_for_DELETE| xargs -n1 exim -Mrm

 

Скрипты Exim.

1. Чтобы получить отсортированный список электронной почты отправителя в Exim c почтовой очереди. Он покажет количество писем которые в очереди.

# exim -bpr | grep "<" | awk {'print $4'} | cut -d "<" -f 2 | cut -d ">" -f 1 | sort -n | uniq -c | sort -n

Вы получите результат:

       1 captain@my_test_domain.com
       3 100500@test100500.com
       4 root@my_test_domain.org
     124 captain@your_domain

Но это не самый простой способ, а проще всего выполнить команду:

# exim -bp|exiqsumm

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

# grep "cwd=/home" /var/log/exim_mainlog | awk '{for(i=1;i<=10;i++){print $i}}' | sort | uniq -c | grep cwd | sort -n
# awk '{ if ($0 ~ "cwd" && $0 ~ "home") {print $3} }' /var/log/exim_mainlog | sort | uniq -c | sort -nk 1
# grep 'cwd=/home' /var/log/exim_mainlog | awk '{print $3}' | cut -d / -f 3 | sort -bg | uniq -c | sort -bg

Вы получите результат первых двух сценариев. Третий сценарий просто к дополнению от первых двух скриптов:

8 cwd=/home/captain/public_html
9 cwd=/home/your_user_name/public_html/www/ololo
13 cwd=/home/test_user/public_html
99 cwd=/home/test_usr666/public_html
138 cwd=/home/test_user100500/public_html/web2
790 cwd=/home/test_user_6/public_html/captain

3. Иногда нужно выяснить кто же рассылает спам или скрипт. Следующий сценарий поможет вам найти точное названия скрипта, который отправляет спам-письма:

# ps auxwwwe | grep <your_user> | grep --color=always "<location of script>" | head

или

# ps auxwwwe | grep captain | grep --color=always "/home/captain/public_html/wp/wp-content/themes/twentyeleven" | head

Как только вы найдете точный сценарий, следующий сценарий поможет вам найти IP-адрес, который отвечает за спам. Вы получите список IP-адресов из следующего скрипта.Адрес IP-адреса, который имеет большое количество доступа, скорее всего — результат рассылки спама. Вы можете заблокировать IP-адрес в csf или apf брандмауэре.

# grep "<script_name>" /home/your_user/access-logs/my_test_domain.com | awk '{print $1}' | sort -n | uniq -c | sort -n

4. Следующая команда, которая покажет вам сценарий, который используете скрипт для отправки электронной почты. Если это отсылается от РНР, то его можно найти:

# egrep -R "X-PHP-Script"  /var/spool/exim/input/*

5. Это покажет 50 доменов, которые используют почтовый сервер:

# eximstats -ne -nr /var/log/exim_mainlog

6. Это покажет из какой пользовательской папки идет спам, так что вы можете легко отследить и заблокировать его.

# ps -C exim -fH ewww | grep home

7. Это покажет IP-адреса, которые связан с сервером через порт 25.

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

8. Для того, чтобы найти «кого-то» кто отсылает спам, выполните следующую команду

# ps -C exim -fH ewww | awk '{for(i=1;i<=40;i++){print $i}}' | sort | uniq -c | grep PWD | sort -n

9. Выше команда действует, только если спам в настоящее время в стадии отправки. Если спам выполнился, используйте следующую команду.

# grep "cwd=" /var/log/exim_mainlog | awk '{for(i=1;i<=10;i++){print $i}}' | sort | uniq -c | grep cwd | sort -n

10. Следующий скрипт даст суммарный ответ о почте с почтовой очередью.

# exim -bpr | exiqsumm -c | head

Материал с сайта https://linux-notes.org/komandy-exim/

Книги по теме:

Денис Колисниченко

Разработка Linux-приложений

Денис Колисниченко

Серверное применение Linux

Посмотреть все книги по программированию

Комментарии к статье:

Пока комментариев нет, ваш будет первым ;)

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