Finden Sie ein Exim-Konto, das viele E-Mails sendet. (Spam)

Finden Sie ein Exim-Konto, das viele E-Mails sendet. (Spam)

Ich habe einen Exim-Server mit mehreren konfigurierten Domänen. In jeder Domäne habe ich mehrere E-Mail-Konten. Von Zeit zu Zeit wird ein mit einer dieser E-Mails konfigurierter Computer infiziert und beginnt, Spam zu versenden.

Früher habe ich Isoqlog verwendet, um Berichte über die am häufigsten gesendeten E-Mail-Konten zu erhalten, aber seit der letzten Aktualisierung im Jahr 2005 funktioniert es nicht mehr.

Ich brauche eine Möglichkeit, die 50 Spam-E-Mail-Konten der letzten 24 Stunden zu ermitteln (nicht den Absender, sondern das Konto, das zur Authentifizierung beim Senden von Spam verwendet wird. Der Absender kann gefälscht sein, daher sind die Daten nicht gültig).

Irgendeine Idee, ob es ein Paket (wie Isoqlog oder ähnliches) gibt, das dies kann? Danke

Antwort1

Sie benötigen kein komplexes Programm, um Informationen aus der Protokolldatei zu extrahieren.Exim4-Protokollzeilefür eingehende E-Mails sieht das so aus:

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]

mit dem Umschlagabsender [email protected], dem sendenden Host H=verified_rdns.example.net (helo.example) [192.0.2.1]und einer Liste von tag=value.

Wir sind vor allem an dem Tag interessiert A, der einen Wert der Form hat authenticator:auth_user, wobei authenticatorder Name desExim4-AuthentifikatorSie haben dies in der Konfigurationsdatei angegeben und auth_usersind der authentifizierte Benutzer.

Wenn wir alles zusammenfassen, können wir mit einem einfachen Skript die Anzahl der von jedem Benutzer in dem in der Protokolldatei angegebenen Zeitraum gesendeten E-Mails ausdrucken 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

verwandte Informationen