Как получить журнал сеанса SMTP в Exim?

Вопрос или проблема

Иногда при отладке проблем с 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.

[Взято с https://github.com/Exim/exim/wiki/TroubleShooting]

Спецификатор управления 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-адресов

  1. Создание списка IP-адресов для отладки:

    hostlist debug_hosts = xxx.xxx.xxx.xxx : yyy.yyy.yyy.yyy
  2. Добавление правил предупреждения в 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

Просмотр полного лога с использованием сетевых инструментов

Хотя Exim не может полностью логировать каждое отправляемое или получаемое сообщение, для этой цели можно использовать сетевые инструменты:

  1. ngrep: Анализируйте SMTP трафик в реальном времени:

    ngrep -q port 25 host <target_IP>
  2. Wireshark / Tshark: Для более подробного анализа:

    tshark -w exim.pcap -i <interface> host <target_IP>

    Далее, открыв файл в Wireshark, вы можете комфортно изучать всю SMTP-конверсацию.

Дополнительные инструменты и методы отладки

  1. Перезапуск и отладка отдельных сообщений:
    Для просмотра и отладки отдельного сообщения, застрявшего в очереди, используйте:

    exim -v -M <id>

    Сначала получите ID сообщения:

    exim -bp
  2. Эмуляция SMTP-сессии:
    Вы также можете вручную эмулировать SMTP-сеанс для диагностики.

    exim -bhc <source_IP>

Использование описанных методов позволит вам точно выявить проблемы в определённых SMTP-транзакциях, минимизируя нагрузку на систему. Эти подходы помогут эффективно управлять логированием без перегрузки дискового пространства лишними данными.

Оцените материал
Добавить комментарий

Капча загружается...