Tenho um servidor Exim com vários domínios configurados. Em cada domínio tenho várias contas de email. De tempos em tempos, um computador configurado com um desses e-mails é infectado e começa a enviar spam.
Eu uso o Isoqlog para obter relatórios das principais contas de e-mail do Sendin, mas ele não funciona mais desde que foi atualizado pela última vez em 2005.
Preciso encontrar uma maneira de descobrir as 50 principais contas de e-mail com spam nas últimas 24 horas (não o remetente, a conta que está sendo usada para autenticar o envio de spam. O remetente pode ser falso, portanto, não há dados válidos)
Alguma ideia se existe um pacote (como Isoqlog ou similar) que pode fazer isso? Obrigado
Responder1
Você não precisa de um programa complexo para extrair informações do arquivo de log. UmLinha de registro Exim4para mensagens recebidas é assim:
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]
com o remetente do envelope [email protected]
, o host remetente H=verified_rdns.example.net (helo.example) [192.0.2.1]
e uma lista de arquivos tag=value
.
Estamos mais interessados na A
tag que tem um valor no formato authenticator:auth_user
, onde authenticator
está o nome doAutenticador Exim4você forneceu o arquivo de configuração e auth_user
é o usuário autenticado.
Juntando tudo, podemos imprimir a contagem de e-mails enviados por cada usuário no tempo abrangido pelo arquivo de log usando um bash
script simples:
#!/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