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 authenticator
der Name desExim4-AuthentifikatorSie haben dies in der Konfigurationsdatei angegeben und auth_user
sind 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