이메일을 많이 보내는 exim 계정을 찾아보세요. (스팸)

이메일을 많이 보내는 exim 계정을 찾아보세요. (스팸)

여러 도메인이 구성된 Exim 서버가 있습니다. 각 도메인에는 여러 개의 이메일 계정이 있습니다. 때때로 이 이메일 중 하나로 구성된 컴퓨터가 감염되어 스팸을 보내기 시작합니다.

나는 가장 많이 보내는 이메일 계정에 대한 보고서를 얻기 위해 Isoqlog를 사용했지만 2005년에 마지막으로 업데이트된 이후로 더 이상 작동하지 않습니다.

지난 24시간 동안 상위 50개 스팸 이메일 계정을 찾을 수 있는 방법이 필요합니다(발신자가 아니라 스팸 전송을 인증하는 데 사용되는 계정입니다. 발신자는 가짜일 수 있으므로 유효한 데이터가 없습니다).

이 작업을 수행할 수 있는 패키지(Isoqlog 또는 이와 유사한)가 있는지 아시나요? 감사해요

답변1

로그 파일에서 정보를 추출하는 데 복잡한 프로그램이 필요하지 않습니다. 안Exim4 로그 라인수신 메일은 다음과 같습니다.

2020-01-18 02:19:41 1iscm4-0000Nt-TE <= [email protected]\
H=verified_rdns.example.net (helo.example) [192.0.2.1] P=esmtpsa\
X=TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128 CV=no A=dovecot_gssapi:auth_user\
S=3812 [email protected]

봉투 발신자 [email protected], 보내는 호스트 H=verified_rdns.example.net (helo.example) [192.0.2.1]tag=value.

A우리는 주로 형식의 값을 갖는 태그 에 관심이 있습니다 authenticator:auth_user. 여기서 authenticator태그의 이름은 다음과 같습니다.Exim4 인증자구성 파일을 제공했으며 auth_user인증된 사용자입니다.

모든 것을 종합하면 간단한 스크립트를 사용하여 로그 파일에 표시된 시간 동안 각 사용자가 보낸 전자 메일 수를 인쇄할 수 있습니다 bash.

#!/bin/bash 
if [ $# -lt 1 ]; then
    2>& echo Usage: $0 "<exim_mainlog_file>"
    2>& echo Example: $0 /var/log/exim4/mainlog
    exit 1
fi
# To save typing
d='[[:digit:]]'
a='[[:alnum:]]';
pref="^$d\{4\}-$d\{2\}-$d\{2\} $d\{2\}:$d\{2\}:$d\{2\} $a\{6\}-$a\{6\}-$a\{2\}"
logfile="$1"

zgrep "$pref <=" "$logfile" |
grep -oh "A=[[:alnum:]_]\+:[[:alnum:]_]\+" |
cut -d : -f 2 |
sort |
uniq -c |
sort -rn

관련 정보