Вопрос или проблема
Иногда при отладке проблем с SMTP стандартного maillog бывает недостаточно, и мне нужно увидеть всю сессию SMTP. В postfix я добавляю проблемный IP в “debug_peer_list”, что позволяет вести журнал сессии и другую отладочную информацию только для этого IP.
Есть ли что-то похожее в exim? Я нашел только ссылки на “запуск exim в режиме отладки”, что, по-видимому, приводит к ведению журнала ВСЕХ сессий, что, как я боюсь, быстро создаст множество ненужных записей, вызовет большую нагрузку на диск и усложнит поиск нужной транзакции.
Краткий ответ: Какой лучший способ получить полный лог транзакции SMTP с определенного IP (или адреса отправителя)?
Я использую exim 4.80 (сервер cpanel).
Вы можете легко посмотреть команды, полученные от удаленной системы, добавив несколько директив ACL:
# Глобальная настройка для хостов, список IP-адресов, для которых вы хотите видеть команды SMTP
hostlist debug_hosts = xxx.xxx.xxx.xxx : yyy.yyy.yyy.yyy
# рано в acl_smtp_helo
warn hosts = +debug_hosts
log_write = DEBUG: $smtp_command
# рано в acl_smtp_mail
warn hosts = +debug_hosts
log_write = DEBUG: $smtp_command
# рано в acl_smtp_rcpt
warn hosts = +debug_hosts
log_write = DEBUG: $smtp_command
Но если вы хотите видеть в журнале, что говорит ваша сторона тоже, это невозможно в exim. Ваши варианты тогда ограничены любыми системными инструментами для отладки сети, такими как tcpdump, tshark или (мой любимый) ngrep.
Например, если у вас есть клиент, который жалуется, что не может отправить почту через ваш сервер. Вот простой пример, который показывает, почему он не может отправить:
# ngrep -q port 25 host 208.54.85.254
<snip>
T 208.54.85.254:15084 -> 208.89.138.22:25 [AP]
AUTH PLAIN kkvdsoirDSAasdfrASDF4swSD23DAGAG6893Mgss==..
T 208.89.138.22:25 -> 208.54.85.254:15084 [AP]
535 Incorrect authentication data..
Я надеюсь, что один из этих вариантов окажется полезным для вас.
Возможно, это не то, что вы ищете, но wireshark / tshark отлично подходят для этого. На командной строке:
tshark -w exim.pcap -i <interface> host <target IP>
Затем откройте файл в Wireshark, и вы сможете внимательно изучить весь разговор SMTP: щелкните правой кнопкой мыши на одном из совпадающих пакетов и выберите ‘View TCP Conversation’.
Если вы хотите видеть это в режиме реального времени, просто опустите аргумент -w
из приведенной выше команды, хотя это может быть довольно многословно с большими письмами.
Я думаю, что у меня не та же проблема, но запуск транзакции SMTP самостоятельно является полезным инструментом для отладки.
Например, если вы должны получать SMTP-почту от хоста mysender.example.com, 93.184.216.34, с адресом, размещенным вашим MTA ([email protected]) на какой-то другой адрес ([email protected]), это будет выглядеть так – введите каждую строку интерактивно, вы увидите, что вывод довольно многословный:
exim -bhc 93.184.216.34
EHLO mysender.example.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
DATA
.
Есть и другие варианты, которые могут быть вам полезны в зависимости от вашей настройки, но это работает у меня. Рад принять исправления от тех, кто лучше говорит на языке SMTP/Exim.
Спецификатор управления ACL debug
может быть полезен для этого, например, вы можете использовать тот же подход, что и в ответе выше, но используя
control = debug/opts=+all
вместо logwrite
. Обратите внимание, что вывод идет в файл debuglog
в директории журнала по умолчанию, т.е. что-то вроде /var/log/exim4/debuglog
.
Если у вас есть одно письмо, застрявшее в очереди из-за проблем с настройкой, вы можете “воспроизвести” его в режиме отладки, используя exim -v -M <id>
.
Чтобы увидеть очередь писем, используйте mailq
или exim -bp
.
Например:
# exim -bp
0m 327 1tTSsu-001U7r-2a <[email protected]>
[email protected]
# exim -v -M 1tTSsu-001U7r-2a
LOG: MAIN
cwd=/etc/exim4 4 args: exim -v -M 1tTSsu-001U7r-2a
delivering 1tTSsu-001U7r-2a
Connecting to smtp.gmail.com [2a00:1450:4025:401::6d]:465 ... set up lazy-connect
connected
SMTP<< 220 smtp.gmail.com SMTP Server ready January 2, 2025 03:42:46 PM PST
SMTP>> EHLO mx.myserver.com
SMTP<< 250-smtp.gmail.com Hello mx.myserver.com
250-AUTH LOGIN PLAIN
250 SIZE 53477376
SMTP>> AUTH PLAIN ********************************************
SMTP<< 235 Authentication Successful
SMTP>> MAIL FROM:<[email protected]> SIZE=1362
SMTP<< 250 Sender <[email protected]> OK
SMTP>> RCPT TO:<[email protected]>
SMTP<< 250 Recipient <[email protected]> OK
SMTP>> DATA
SMTP<< 354 Ok Send data ending with <CRLF>.<CRLF>
SMTP>> (writing message)
SMTP>> .
SMTP<< 250 Message received
SMTP+> QUIT
SMTP(TLS shutdown)>>
SMTP(shutdown)>>
SMTP(closed)<<
SMTP(close)>>
LOG: MAIN
Completed QT=58s
#
Ответ или решение
Если вы используете Exim и сталкиваетесь с проблемами отладки SMTP-сессий, стандартных журналов может быть недостаточно для получения полной информации о транзакциях. В Postfix можно добавить проблемный IP-адрес в "debug_peer_list", что позволит логировать сессии только для этого адреса. Аналогичный подход возможен и в Exim.
Как получить журнал SMTP-сессии в Exim:
Настройка логирования для определённых IP-адресов
-
Создание списка IP-адресов для отладки:
hostlist debug_hosts = xxx.xxx.xxx.xxx : yyy.yyy.yyy.yyy
-
Добавление правил предупреждения в ACL:
- acl_smtp_helo:
warn hosts = +debug_hosts log_write = DEBUG: $smtp_command
- acl_smtp_mail:
warn hosts = +debug_hosts log_write = DEBUG: $smtp_command
- acl_smtp_rcpt:
warn hosts = +debug_hosts log_write = DEBUG: $smtp_command
- acl_smtp_helo:
Просмотр полного лога с использованием сетевых инструментов
Хотя Exim не может полностью логировать каждое отправляемое или получаемое сообщение, для этой цели можно использовать сетевые инструменты:
-
ngrep: Анализируйте SMTP трафик в реальном времени:
ngrep -q port 25 host <target_IP>
-
Wireshark / Tshark: Для более подробного анализа:
tshark -w exim.pcap -i <interface> host <target_IP>
Далее, открыв файл в Wireshark, вы можете комфортно изучать всю SMTP-конверсацию.
Дополнительные инструменты и методы отладки
-
Перезапуск и отладка отдельных сообщений:
Для просмотра и отладки отдельного сообщения, застрявшего в очереди, используйте:exim -v -M <id>
Сначала получите ID сообщения:
exim -bp
-
Эмуляция SMTP-сессии:
Вы также можете вручную эмулировать SMTP-сеанс для диагностики.exim -bhc <source_IP>
Использование описанных методов позволит вам точно выявить проблемы в определённых SMTP-транзакциях, минимизируя нагрузку на систему. Эти подходы помогут эффективно управлять логированием без перегрузки дискового пространства лишними данными.