如何在 Exim 中获取 SMTP 会话日志?

如何在 Exim 中获取 SMTP 会话日志?

有时,在调试 SMTP 问题时,标准邮件日志不够用,我需要查看完整的 SMTP 会话。在 postfix 中,我将有问题的 IP 添加到“debug_peer_list”,这将仅启用该 IP 的会话日志和其他调试信息。

exim 中是否有类似的东西?我只找到了“在调试模式下运行 exim”的参考资料,这显然会导致记录所有会话,我担心这会很快写入大量不必要的日志,导致大量磁盘 I/O,并且很难找到有问题的事务

总结: 从特定 IP(或发件人地址)获取完整 SMTP 事务日志的最佳方法是什么?

我正在运行 exim 4.80(cpanel 服务器)。

答案1

您可以通过添加一些 ACL 轻松查看从远程系统接收的命令:

# Global hosts setting, list of IP addresses you want to see SMTP commands
hostlist debug_hosts = xxx.xxx.xxx.xxx : yyy.yyy.yyy.yyy

# early in acl_smtp_helo
warn hosts     = +debug_hosts
     log_write = DEBUG: $smtp_command

# early in acl_smtp_mail
warn hosts     = +debug_hosts
     log_write = DEBUG: $smtp_command

# early in 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..

我希望其中一个能够对你有用。

答案2

可能不是你想要的,但 wireshark / tshark 非常适合这个。在命令行上:

tshark -w exim.pcap -i <interface> host <target IP>

然后在 Wireshark 中打开该文件,您就可以随意浏览整个 SMTP 对话:右键单击一个匹配的数据包并选择“查看 TCP 对话”。

如果您想看到它发生的情况,只需省略-w上面的参数,尽管这对于大型电子邮件来说可能会非常垃圾邮件。

答案3

我认为我没有同样的问题,但自己运行 SMTP 事务是一个有用的调试工具。

例如,如果您应该从主机 mysender.example.com、93.184.216.34 接收 SMTP 邮件,其地址由您的 MTA 托管([电子邮件保护])到某个外国地址([电子邮件保护])它看起来像这样 - 以交互方式输入每一行,你会看到输出非常详细:

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]

答案4

ACLdebug控制说明符对此很有用,例如,您可以使用与上面的答案但使用

control = debug/opts=+all

而不是logwrite。请注意,输出debuglog默认转到日志目录中的文件,即类似于/var/log/exim4/debuglog

相关内容