Ungestörte Mailkommunikation ist in den letzten Monaten schwierig geworden (d.h. eigentlich war sie das schon vorher aber wir wussten es nicht). Die Inhalte können wir verschlüsseln, aber inzwischen wissen wir, dass die Metadaten für die Überwacher fast genau so interessant sind. Wenn wenigstens beide an einer Kommunikation beteiligte Mailserver TLS nutzen, dann fällt es dem Lauscher schon schwerer, Adressen und Subject:-Zeile mitzulesen, er kann aber immernoch die IP-Verbindung zwischen den beiden Mailservern sehen. Gerade zwischen uns „Power-Usern“ mit eigenen Mailservern lassen sich dadurch praktisch alle persönlichen Verbindungen rekonstruieren.
Was aber, wenn wir diese Verbindung durch Tor schicken? Probieren wir mal aus, ob das überhaupt geht.
Als Ausgangssituation habe ich wie üblich an beiden Enden Debian GNU/Linux-Server mit Postfix als MTA und Tor — alles von Standard-Paketen installiert.
Empfang
Den empfangenden Mailserver als Tor Hidden-Service einzurichten ist einfach. Dazu muss nur ein Verzeichnis angelegt werden:
mkdir hiddenmailserver
… und in der Konfiguration der SMTP-Port freigeschaltet werden:
HiddenServiceDir /var/lib/tor/hiddenmailserver/ HiddenServicePort 25 127.0.0.1:25
Beim nächsten Start des Tor-Dienstes entsteht dann der neue Hidden-Hostname in der Datei hostname im vorher angegebenen Verzeichnis. Nachdem wir den wissen, können wir die Verbindung gleich testen (mit netcat und torsocks, einem Wrapper, der Bibliotheken zur Umleitung der Netzwerkverbindungen über Tor vorlädt):
ponos:~# torsocks nc -t u2bhrnyodeqtmlt2.onion 25 220 nyx.wazong.de ESMTP Postfix (Debian/GNU) EHLO ich 250-nyx.wazong.de 250-PIPELINING 250-SIZE 102400000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN QUIT 221 2.0.0 Bye ponos:~#
Funktioniert.
Versand
Wie auch die meisten anderen Mail Transport Agents ist Postfix in der Lage, abhängig von der Zieladresse den Transportkanal zu wechseln. Der Mechanismus stammt von „früher“, als es aus Kostengründen noch üblich war, bestimmte Domains über einen anderen Weg als SMTP mit Mail zu beliefern (z.B. UUCP). Die einzelnen Transportkanäle sind Programme, die in einem Verzeichnis liegen. Wir erzeugen also ein Skript, das den smtp-Transportkanal mit torsocks aufruft:
#!/bin/bash torsocks /usr/lib/postfix/smtp $@
… und Tragen es als tor-Transportkanal in der /etc/postfix/master.cf ein:
[...] smtp unix - - - - - smtp tor unix - - - - - tor [...]
Dann schalten wir in der /etc/postfix/main.cf den Transport-Auswahlmechanismus ein:
[...] transport_maps = hash:/etc/postfix/transport [...]
…, schreiben unsere Tor-Konfiguration in die /etc/postfix/transport:
wazong.de tor:[u2bhrnyodeqtmlt2.onion]
…, und laden sie in den Mailserver:
cd /etc/postfix postmap transport
Zum Test schicken wir eine Mail. Im Logfile des versendenden Mailservers sieht das so aus:
Nov 25 23:29:02 ponos postfix/smtp[20884]: 002A82A43B6: to=<dentaku@wazong.de>, relay=u2bhrnyodeqtmlt2.onion[127.0.69.0]:25, delay=14, delays=0.06/0.09/12/1.5, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 877A97240DF)
… und in den Headern der empfangenen Mail:
Received: from ponos.wazong.lan (localhost [127.0.0.1]) by nyx.wazong.de (Postfix) with ESMTP id 877A97240DF for <dentaku@wazong.de>; Mon, 25 Nov 2013 23:29:01 +0100 (CET)
Funktioniert.
Ausblick
All das ist natürlich im Moment nur im Proof-Of-Concept-Stadium. Es skaliert in dieser Form nämlich überhaupt nicht, weil auf jedem teilnehmenden Server alle anderen über Tor erreichbaren Domains in der Transport-Map stehen müssten. Postfix kann aber den Table-Lookup an ein externes Programm auslagern (Stichwort: tcp_table) — und das könnte wieder in einem verteilten System nachsehen, also z.B. nach einem bestimmten TXT-Record im DNS. Diese Abfrage müsste dann natürlich auch durch Tor gehen, weil wir sonst DNS-Leaks riskieren.
Außerdem eignet sich die Methode nicht für komplett anonymes Mailen, weil Informationen über den vorherigen Weg der Mail noch immer in den Headern stehen. Und sie unterläuft einen Teil der üblichen Anti-Spam-Maßnahmen (z.B. Greylisting oder SPF), weil die IP-Adresse des einliefernden Mailservers ja jetzt nicht mehr bekannt ist.
Es gibt also noch einiges an Hausaufgaben zu erledigen. Trotzdem: wenn Ihr Lust habt, baut die Sache nach und schickt eine Mail an mich über u2bhrnyodeqtmlt2.onion.
3 Antworten auf „Mail über Tor routen, ein Experiment“
[…] Ich habe da mal etwas mit #Tor herumexperimentiert: dentaku.wazong.de/2013/12/03/m…xperiment/ # Microblog Tor […]
Die Skalierung ist ein Problem weil Du ja mit jedem Mailpartner die onion Adresse austauschen musst. Andererseits erledigt sich damit dann auch das Anonymitätsproblem 🙂
Aber das habe ich doch unter „Ausblick“ schon geschrieben: die onion-Adressen für die jeweiligen Domains gehören eigentlich ins DNS, so wie jetzt schon die MX-Einträge, die auf die öffentlichen Adressen des Servers zeigen.
Und Anonymität gegenüber dem Empfänger der Mail war nicht das Ziel sondern nur die Unsichtbarkeit der Kommunikation für den externen Beobachter.