sudo: Jack of all trades, master of some

Crear una dirección noreply con Postfix

4 comentarios

En 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.

Referencias

  1. http://www.postfix.org/OVERVIEW.html
  2. http://www.postfix.org/smtpd.8.html
  3. http://www.postfix.org/access.5.html
Comentarios desactivados
  1. interesante esto.

  2. 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.

    1. @Ich

      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.

      1. @oneohthree

        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