Postfix 메일 서버 수신 성공 및 실패 계산

Postfix 메일 서버 수신 성공 및 실패 계산

성공적인 전달을 위해 내 메일 서버가 처리하는 이메일의 양과 잘못 구성된 메일 서버, 스팸 등에서 오는 이메일이 그 자리에서 삭제되는 양의 대략적인 비율을 계산하려고 합니다.

먼저 /var/log/ 디렉토리에서 다음 2개의 명령을 실행했습니다(maillog의 항목과 교체된 이전 메일로그를 포착하기 위해).

grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l
7814

grep "NOQUEUE: reject: RCPT" * | wc -l
13338

그러나 나는 이러한 항목이 중복 항목(특히 NOQUEUE)을 선택할 수 있다고 생각했습니다. 그래서 불일치가 얼마나 되는지 확인하기 위해 약간 수정된 다음 명령을 실행했습니다.

grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l
8839

내 메일로그 항목을 보면 배달 시도에 대한 NOQUEUE 항목이 여러 개 있습니다. 그런데 발신 메일 서버가 가끔 여러 번 전송을 시도하기 때문인 것 같아요. 예를 들어:

Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [112.198.103.178]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: disconnect from unknown[112.198.103.178]

그래서 두 가지 질문이 있습니다.

  1. grep just 로 중복된 항목을 잡는 것에 대해 걱정해야 합니까 NOQUEUE: reject: RCPT?
  2. 이러한 로그 항목을 필터링하고 올바른 숫자를 찾을 때 고려해야 할 더 좋은 방법이 있습니까?
  3. 성공적인 배송마다 고유한 라인을 어떻게 확인할 수 있습니까? grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l와 의 차이점을 살펴보면 grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l차이가 있음을 알 수 있습니다.

답변1

  1. 이는 별도의 배송 시도인 것으로 보이므로 이와 같이 계산되어야 합니다.

  2. 이런 종류의 일이 이미 해결되었다고 가정하고 munin postfix_mailstats스크립트에서 어떻게 처리되었는지 살펴보았습니다. 이는 Perl 스크립트이므로 정규 표현식은 Perl과 호환됩니다.

성공적인 배송은 다음과 같습니다.

/ to=.*, status=sent /

거부된 사항은 다음과 같습니다.

/postfix\/smtpd.*proxy-reject: \S+ (\S+)/
/postfix\/smtpd.*reject: \S+ \S+ \S+ (\S+)/
/postfix\/cleanup.* reject: (\S+)/

정규 표현식에서 캡처된 부분(대괄호 사이)은 메시지가 거부된 방식을 나타내는 거부 코드입니다.

  1. delivered to maildir지역 배송, 250 .* from MTA원격 배송, 즉 두 가지 다른 배송 유형입니다. 그래서 각각 다른 숫자를 세는 것은 이상하지 않습니다.

관련 정보