У меня есть сервер Exim с несколькими настроенными доменами. В каждом домене у меня есть несколько учетных записей электронной почты. Время от времени компьютер, на котором настроено одно из этих писем, заражается и начинает рассылать спам.
Я использую Isoqlog для получения отчетов о самых популярных учетных записях электронной почты, но он больше не работает, так как он был обновлен в последний раз в 2005 году.
Мне нужен способ узнать 50 самых популярных учетных записей электронной почты, рассылающих спам за последние 24 часа (не отправителя, а учетная запись, которая используется для аутентификации для отправки спама. Отправитель может быть поддельным, поэтому у него нет достоверных данных)
Любая идея, есть ли пакет (например, Isoqlog или аналогичный), который может это сделать? Спасибо
Вам не нужна сложная программа для извлечения информации из файла журнала. An Строка журнала exim4 для входящей почты выглядит так:
2020-01-18 02:19:41 1iscm4-0000Nt-TE <= env_sender@example.com\
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 id=1d9f3556-251c-734c-9b96-68ce1e52839c@example.com
с отправителем конверта env_sender@example.com
, отправляющий хост 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