どのプロセスが電子メールを送信しているかを確認する方法は?

どのプロセスが電子メールを送信しているかを確認する方法は?

私の電子メールサービスプロバイダは、毎日SMTPクォータ制限に達し続け、私のサーバーの1つがrootアカウントから電子メールを送信することを識別したことを私に知らせます。

電子メールを送信するすべてのcronjobを無効にしてから、メールログとシステムログを確認すると、それらが参照するメールプロセスがまだ毎分実行されていることがわかります。

ただし、cronでは実行されず、別々のSMTPプロセスとして表示されます。

tail -f ./var/log/syslog
Jul 15 09:25:02 serveralias sSMTP[1359056]: Creating SSL connection to host
Jul 15 09:25:03 serveralias sSMTP[1359056]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Jul 15 09:25:06 serveralias sSMTP[1359056]: Sent mail for [email protected] (221 2.0.0 Bye) uid=1000 username=not-root-account outbytes=1332
Jul 15 09:26:01 serveralias sSMTP[1359129]: Creating SSL connection to host
Jul 15 09:26:03 serveralias sSMTP[1359129]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Jul 15 09:26:05 serveralias sSMTP[1359129]: Sent mail for [email protected] (221 2.0.0 Bye) uid=1000 username=not-root-account outbytes=1332

このプロセスを識別し、実行中の作業を確認する方法はありますか?オペレーティングシステムはUbuntu Server 20.04です。

答え1

この場合、通常はプロセス、crontabなどから電子メールを送信するために使用されるsendmailコマンドの周りに迅速で汚いラッパーを作成します。

  1. 元の sendmail の名前を sendmail.real に変更します。mv /usr/bin/sendmail{,.real}

  2. 次のスクリプトを次のように作成します/usr/bin/sendmail

    #!/bin/sh
    calling_process=$(ps ax -o pid,cmd|grep -P "^[ ]*${PPID}"|awk '{print $2}')
    echo "${date}: Called by ${PPID} (resolves as ${calling_process})"
    /usr/bin/sendmail.real $*
    
  3. スクリプトに正しい権限(chmod 755/usr/bin/sendmail`)を付与してください。

これほど十分だと思います:)

関連情報