SMTPの問題をデバッグするときに、標準のメールログでは不十分で、SMTPセッション全体を確認する必要がある場合があります。接尾辞では、問題のあるIPを「debug_peer_list」に追加します。これにより、そのIPのみのセッションログやその他のデバッグ情報が有効になります。
Eximにも同様のことがありますか? 「デバッグモードでeximを実行する」への参照のみが見つかりました。これにより、すべてのセッションがログに記録され、大量の不要なログがすぐに書き込まれ、大量のディスクI/Oが発生し、問題のトランザクションを見つけるのが困難になることが懸念されます。
TL; DR:特定のIP(または送信者アドレス)から完全なSMTPトランザクションログを取得するための最良の方法は何ですか? ==
Exim 4.80(cpanelサーバー)を実行しています。
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..
これらの1つがあなたに役立つことを証明することを願っています。
おそらくあなたが求めているものではありませんが、wireshark/tsharkはこれに最適です。コマンドライン:
tshark -w exim.pcap -i <interface> Host <target IP>
次に、Wiresharkでファイルを開くと、SMTP会話全体を自由に閲覧できます。一致するパケットを1つ右クリックして、[表示TCP会話]]を選択します。
それが起こったときにそれを見たい場合は、上記の-w
引数を省略してください。ただし、大きなメールではかなりスパムになる可能性があります。
これと同じ問題はないと思いますが、SMTPトランザクションを自分で実行することは便利なデバッグツールです。
たとえば、ホストmysender.example.com、93.184.216.34から、MTAによってホストされているアドレス([email protected])から外部アドレス([email protected])へのSMTPメールを受信することになっている場合次のようになります。各行をインタラクティブに入力すると、出力がかなり冗長であることがわかります。
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
のようなものです。