Estoy tratando de calcular un porcentaje aproximado de la cantidad de correo electrónico que procesa mi servidor de correo para una entrega exitosa frente a la cantidad que cae en el acto como correo electrónico proveniente de servidores de correo mal configurados, spam, etc.
Primero ejecuté los siguientes 2 comandos en el directorio /var/log/ (para capturar entradas en el registro de correo, así como registros de correo más antiguos que se han eliminado):
grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l
7814
grep "NOQUEUE: reject: RCPT" * | wc -l
13338
Pero luego pensé que estas entradas podrían estar recogiendo duplicados (especialmente las NOQUEUE). Entonces ejecuté el siguiente comando ligeramente modificado para ver cuánta discrepancia podría haber.
grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l
8839
Al mirar las entradas de mi registro de correo, recibo varias entradas NOQUEUE para intentos de entrega. Pero creo que eso se debe a que los servidores de correo emisor a veces intentan realizar entregas múltiples. Por ejemplo:
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [112.198.103.178]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: disconnect from unknown[112.198.103.178]
Entonces tengo 2 preguntas:
- ¿Debería preocuparme por detectar entradas duplicadas con un grep de just
NOQUEUE: reject: RCPT
? - ¿Existe algún método mejor que debería considerar al filtrar estas entradas de registro y obtener los números correctos?
- ¿Cómo puedo determinar una línea única para cada entrega exitosa? Al observar la diferencia entre
grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l
ygrep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l
podemos decir que hay una diferencia.
Respuesta1
Parecen ser intentos de entrega separados, por lo que deben contarse como tales.
Suponiendo que este tipo de cosas ya se hayan abordado, miré en el
munin
postfix_mailstats
guión cómo se hace allí. Se trata de un script en Perl, por lo que las expresiones regulares son compatibles con Perl:
Estas son entregas exitosas:
/ to=.*, status=sent /
Estos son los rechazados:
/postfix\/smtpd.*proxy-reject: \S+ (\S+)/
/postfix\/smtpd.*reject: \S+ \S+ \S+ (\S+)/
/postfix\/cleanup.* reject: (\S+)/
La parte capturada de la expresión regular (entre paréntesis) es el código de rechazo que indica cómo se rechazó el mensaje.
delivered to maildir
es una entrega local, la250 .* from MTA
es una entrega a distancia, es decir, dos tipos distintos de entrega; así que no es extraño que cuentes números diferentes de cada uno.