Найдите учетную запись exim, отправляющую множество писем. (Спам)

Найдите учетную запись exim, отправляющую множество писем. (Спам)

У меня есть сервер Exim с несколькими настроенными доменами. В каждом домене у меня есть несколько учетных записей электронной почты. Время от времени компьютер, настроенный с одним из этих адресов электронной почты, заражается и начинает рассылать спам.

Раньше я использовал Isoqlog для получения отчетов о самых популярных отправителях писем, но он больше не работает с тех пор, как был обновлен в 2005 году.

Мне нужен способ узнать 50 самых популярных аккаунтов электронной почты, рассылающих спам, за последние 24 часа (не отправителя, а аккаунт, который используется для аутентификации при отправке спама. Отправитель может быть поддельным, поэтому достоверных данных нет).

Есть идеи, есть ли пакет (типа 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

Связанный контент