有时,在调试 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 的人的纠正。
答案4
ACLdebug
控制说明符对此很有用,例如,您可以使用与上面的答案但使用
control = debug/opts=+all
而不是logwrite
。请注意,输出debuglog
默认转到日志目录中的文件,即类似于/var/log/exim4/debuglog
。