9 de Noviembre, 2013

Anonimizando correos con Postfix

A estas alturas es poco probable que no te hayas enterado de que han pillado con el carrito de los helados a algunas agencias de seguridad (por ejemplo la NSA), que aparentemente dedican gran cantidad de recursos a espiar a todo el mundo (todos somos sospechosos, parece ser). Aunque no es de eso de lo que voy a hablar en esta anotación, está muy relacionado.

Hace unos años di una charla sobre privacidad y GPG/PGP en la segunda Barcamp Valencia, y conociendo el tema podríamos decir que usando GPG/PGP ya no habría problema para comunicarnos de forma privada, ¿no? Pues no exáctamente, ya que el protocolo SMTP puede traicionarnos revelando información acerca de nosotros en algunas de sus cabeceras.

Si miramos las cabeceras de un correo cualquiera nos encontramos con lo siguiente:

Return-Path: <user@example.dom>
X-Original-To: me@example.dom
Delivered-To: me@example.dom
Received: from vortex.usebox.net (host-82-121-*-*.as13285.net [82.121.*.*])
        by usebox.net (Postfix) with ESMTPSA id 4307E300154
        for <me@example.dom>; Sat,  9 Nov 2013 08:50:15 +0000 (GMT)
Message-ID: <527DF0FD.8090506@example.dom>
Date: Sat, 09 Nov 2013 08:50:10 +0000
From: User <user@example.dom>
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130625 Thunderbird/17.0.7
MIME-Version: 1.0
To: Me <me@example.dom>
Subject: Test
X-Enigmail-Version: 1.6
OpenPGP: url=http://www.usebox.net/jjm/jjm.asc
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Vaya, acabo de decirle a cualquiera que vea esas cabeceras dónde me encuentro en este momento (que da la casualidad que es donde vivo), porque mi dirección IP está incluída (la he cambiado y he añadido asteriscos, esa no es mi IP :P).

Así que aunque usara GPG/PGP, mi servidor de correo estaría aportando información sobre mi que en realidad no es necesaria para enviar un correo, pero que puede ser útil para cualquiera que esté escuchando.

Esto es fácil de solucionar con Postfix (el MTA que estoy uso en mi servidor, versión 2.9.6), modificando algunas de las cabeceras.

Porque no quiero cambiar las cabeceras de todos los correos y solo las de los que envío yo, voy a añadir un filtro solo en el servicio submission (puerto 587), ya que este puerto solo se utiliza para entregar correos vía MUA y no mediante otros servidores de correo (si no sabes qué es un MUA, te recomiendo leer el clásico una explicación del correo electrónico).

En master.cf añadimos a nuestra entrada submission lo siguiente:

submission inet n       -       -       -       -       smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sasl_tls_security_options=noanonymous
  -o smtpd_sasl_security_options=noanonymous
  -o cleanup_service_name=clean_smt

Y definimos ese nuevo servicio clean_smt:

clean_smt unix  n       -       n       -       0       cleanup
  -o header_checks=pcre:/etc/postfix/header_checks_submit.pcre

Ahora solo nos queda poner las reglas en header_checks_submit.pcre para manipular las cabeceras:

/^Received: from ([^\n]+)(.*with ESMTPSA .*)/  REPLACE Received: from localhost (localhost [127.0.0.1])$2
/^User-Agent:/              IGNORE
/^X-Originating-IP:/        IGNORE
/^X-Mailer:/                IGNORE
/^X-Enigmail-Version:/      IGNORE

Lo que es realmente interesante está en la primera regla, pero por el mismo precio he incluído alguna más que puede ser útil para eliminar información que puede ser utilizada para identificar nuestro cliente de correo.

Hacemos un reload de postfix y volvemos a mandar nuestro mensaje de prueba:

Return-Path: <user@example.dom>
X-Original-To: me@example.dom
Delivered-To: me@example.dom
Received: from localhost (localhost [127.0.0.1])
        by usebox.net (Postfix) with ESMTPSA id E494A300154
        for <me@example.dom>; Sat,  9 Nov 2013 09:01:42 +0000 (GMT)
Message-ID: <527DF97A.806030@example.dom>
Date: Sat, 09 Nov 2013 09:00:50 +0000
From: User <user@example.dom>
MIME-Version: 1.0
To: Me <me@example.dom>
Subject: Test
OpenPGP: url=http://www.usebox.net/jjm/jjm.asc
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Con esto hemos conseguido eliminar nuestra IP y algunas cabeceras incómodas, con lo que nuestro servidor está anonimizando nuestros correos.

Importante recordar que esta configuración es para el puerto 587 (la expresión regular busca ESMTPSA) y no sé si funcionaría igual con otros tipos de entrega de correo. En mi caso funciona bien, pero es posible que haya una forma mejor de conseguir el mismo resultado ;).

Anotación por Juan J. Martínez, clasificada en: email, security.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: