Crear una dirección noreply con Postfix
4 comentariosEn innumerables ocasiones hemos recibido una notificación a través del correo electrónico con remitente noreply@foo.tld esto no es más que un buzón de correo que no permite respuestas (duh!). Esta funcionalidad se puede implementar a través de varios métodos, sin embargo en esta entrada comparto con ustedes uno de ellos con la explicación —y justificación—. Si alguien tiene otro método MÁS EFECTIVO sería provechoso para todos que se compartiera.
Descripción del método
El método es bien sencillo: cuando Postfix reciba un mensaje con el destinatario noreply@localdomain, lo deseche. De este modo se asegura que el mensaje nunca llegue a la cola de Postfix y el remitente —que a pesar de todo lo envía— no recibirá ninguna notificación/bounce de que el mensaje fue desechado.
Cómo Postfix recibe el correo
Para entender el proceso un poco más lowlevel sería bueno describir una parte del viaje de un mensaje en un servidor Postfix. El siguiente esquema describe lo que nos compete: la recepción del correo [1].
trivial-
Network → smtpd rewrite
↘ ↕
Network → qmqpd → cleanup → incoming
↗
pickup ← maildrop
↑
Local → sendmail → postdrop
En este método la parte que nos interesa es cuando el mensaje entra a través del servidor smtp, en este punto Postfix envía el mensaje al demonio cleanup y este lo pone en la cola de mensajes recibidos. Sin embargo, no queremos que el mensaje ni siquiera llegue hasta el cleanup, simplemente lo rechazamos a través del demonio smtpd [2].
El método
La implementación de este método es muy fácil. En la configuración principal de Postfix (/etc/postfix/main.cf) incluir la siguiente línea para el chequeo del acceso [3].
smtpd_recipient_restrictions =
...
check_recipient_access = hash:/etc/postfix/noreply,
...
Posteriormente en el archivo /etc/postfix/noreply agregar la línea:
noreply@localdomain DISCARD
Por último, generar la base de datos con el par recipiente, acceso:
postmap /etc/postfix/noreply
¿Por qué DISCARD? Simplemente porque Postfix silenciosamente desecha el mensaje sin notificar a nadie que es el efecto deseado.
Comprobaciones
Cuando se envía un mensaje a noreply@localdomain Postfix debe generar un log como el siguiente:
Nov 18 12:34:27 mail postfix/smtpd[2384]: NOQUEUE: discard: RCPT from unknown[123.456.678.90]: <noreply@localdomain>: Recipient address triggers DISCARD action; from=<johndoe@foo.bar.tld> to=<noreply@localdomain> proto=ESMTP helo=<foo.bar.tld>
Nótese en el log NOQUEUE y DISCARD (en negritas), estas indican que el mensaje nunca llegó a la cola y que fue desechado respectivamente.
interesante esto.
Guiandome por la publicación de blog lo que hice fue poner
noreply@localdomain REJECT La cuenta no acepta mensajes
cuando pruebo desde mi servidor no me deja enviar ningún correo a la dirección en cuestión y me sale el mensaje que le puse.
Espero que el mensaje se vea igual para los que escriben de una red externa, pues en mi caso si me gustaría notificarles.
Sí, se ve de la misma forma para todos. Aunque la intención de la entrada no era esa. No tiene caso notificar cuando se envía a noreply.
Fíjate si NO tiene caso, que si por casualidad noreply@etc.etc.etc envía una notificación a cualquier cuenta con auto-respuesta habilitada (del tipo: “Esto es una respuesta automática…”) esos dos servidores estarían “conversando” eternamente… jajaja