어떤 프로세스가 이메일을 보내고 있는지 확인하는 방법은 무엇입니까?

어떤 프로세스가 이메일을 보내고 있는지 확인하는 방법은 무엇입니까?

내 이메일 서비스 공급자는 일일 SMTP 할당량 한도에 계속 도달하고 내 서버 중 하나가 루트 계정에서 이메일을 보내는 것으로 식별했음을 나에게 알립니다.

이메일을 보내는 모든 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`)을 부여하십시오.

이 정도면 충분할 것 같아요 :)

관련 정보