Команды Exim
В моей статье «Команды Exim» я привел некоторые команды, которые можно использовать для управления MTA Exim и так же очередями электронной почты. Все команды что я приведу ниже, должны быть выполнены из под ROOT-а (от суперпользователя root). По мере возможности, я возможно буду добавлять новые команды ( которых нет), но основные приведены ниже.
Управление Exim-ом.
Запуск
# /etc/init.d/exim start
Чтобы остановить, выполните:
# /etc/init.d/exim stop
Перезапустить Exim:
# /etc/init.d/exim restart
Или еще можно выполнить по другому:
# service exim start|stop|restart
Выясняем чем же занят в данный момент Exim (его MTA).
# exiwhat
Чтобы проверить маршрутизацию почты по заданному емейлу.
# exim -bt user@my_mail.com
Генерируем и выводим статистику Exim из лог файла.
# eximstats /путь__к_exim_mainlog
Можно проверить SMTP соединение из прямо из командной строки для конкретного IP-адреса.
Данная проверка будет показывать как проходит письмо с IP-шника, через какие ACL и так же фильтры:
# exim -bh 145.56.66.32
Вывести все настройки 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 [ -r | -f ] ...
Показать количество сообщений (или как в примере выше).
# exiqgrep -c [ -r | -f ] ...
Показать только Message-ID очереди
# exiqgrep -i
Вывести заголовков сообщения которые в очереди
# exim -Mvh
Просмотреть тела сообщения которые находятся в очереди
# exim -Mvb
Чтобы посмотреть логи сообщения
# exim -Mvl
Запустим процесс на выполнения в самой очереди
# exim -q -v
Запустим процесс выполнения самой очереди для локальных получателей
# exim -ql -v
Отправить одно сообщения принудительно
# exim -M email_id
А просмотреть ID:
# tail -f /var/log/exim_mainlog| grep vitaly.n@gvocom.com # cat /var/log/exim_mainlog | grep 1ZAglY-0000dr-SY
1ZAglY-0000dr-SY — Это и есть ID сообщения.
Принудительно запустить другую очередь на выполнение
# exim -qf
Принудительно запустить другую очередь на выполнение и попытаться очистить замороженные сообщения
# exim -qff
Получить количество писем в очереди
# exim -bpr | grep "<" | wc -l
Показать сколько замороженных писем в очереди
# exim -bpr | grep frozen | wc -l
Удалить замороженные сообщения
# exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm
Удалить сообщение из очереди
# exim -Mrm
Удаляем все сообщения из очереди которые старше чем определенной даты.
Допустим, 5 дней будет 432 000 секунд:
# exiqgrep -o 432000 -i | xargs exim -Mrm
Заморозить все сообщения в очереди от отправителя
# exiqgrep -i -f email@example.com | xargs exim -Mf
Удалить все сообщения из очереди (довольно плохая идея)
# exiqgrep -i | xargs exim -Mrm
Параметр «-o» указывает искать сообщения, старее, указанного количества секунд. В примере, сообщения старее 1 дня:
# exiqgrep -o 86400 [...]
Параметр «-y» ищет сообщения свежее указанного количества секунд. В примере, найти сообщения, пришедшие в течении последнего часа:
# exiqgrep -y 3600 [...]
Параметр «-s» даст возможность искать сообщения по размеру, которые совпадают с заданным регулярным выражением:
# exiqgrep -s '^7..$' [...]
Удалить сообщения которые идут от конкретного домена:
# exim -bp| exiqgrep -i -f DOMAIN_for_DELETE| xargs -n1 exim -Mrm
Удалить сообщения которые идут на конкретного домена:
# exim -bp| exiqgrep -i -r DOMAIN_for_DELETE| xargs -n1 exim -Mrm
Скрипты.
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
Вот такие команды exim. Если я не озвучил ( не нашел) все, то пожалуйста, сообщите мне и я дополню данный список. А на этом, я завершаю свою статью «Команды Exim».