Exim – Wie man TLS erzwingt

Exim ist einer der vielseitigsten Mailserver die man auf einem Server haben kann, fast Nichts ist unmöglich. In einer Zeit, in der immer mehr abgehört wird und die Kommunikation von Personen, Firmen und Behörden geschützt werden muß, finden sich immer noch Mailserver, die kein TLS sprechen.

Mailtransportverschlüsselung

TLS wurde vor fast 19 Jahren per RFC als Nachfolger von SSL geboren und hat dies erfolgreich abgelöst. Sollte man jedenfalls meinen. Tatsächlich habe ich erst heute eine Rechnung von 1und1 bekommen, ja, Name & Shame in progress, die mit einem gebrochenen TLS 1.0 aka. „SSLv3 modified“ übertragen wurde :

H=mbulk.1and1.com [212.227.126.220] P=esmtps X=TLSv1:DHE-RSA-AES256-SHA:256

Da unser Server TLS1.2 spricht und anbietet, kann man von einem Konfigurationsfehler ausgehen. Wenigsten wurde hier TLS gesprochen. Andere Mailserver können nicht mal SSL, die senden und empfangen unverschlüsselt, nicht wahr liebe Admins von faller.de 😉

Wie man TLS erzwingt

Im letzteren Fall kann man Exim dazu bewegen, daß er keine Emails ohne TLS sendet. Damit kann verhindert werden, daß Geheimnisse abgehört werden können. Exim ist von Haus aus mit den nötigen Funktionen ausgestattet und daher extrem leicht dafür zu begeistern 🙂

Der in praktisch jeder Eximconfig vorkommende Transporttreiber „remote_smtp“ muß nur um zwei Befehle erweitert werden:

remote_smtp:
 driver = smtp
 hosts_require_tls = *
 tls_tempfail_tryclear = false

Das zwingt Exim dazu, ohne TLS Verbindung abzubrechen und auf keinen Fall auf Klartext zurückzufallen. Das wäre ja auch selten dämlich, oder ? Tja, wie sich herausstellte, ist sich immer einer in der Welt nicht zu blöd, genau das zu machen 😀 Mein Name & Shame Beispiel für diesen Fail, hat sich allerdings bekehren lassen und sendet jetzt vorbildlich in TLSv1.2 \o/

Der ewige Optimist Exim

Exim sieht einen Fail beim TLS leider als temporären Fehler an. Er geht also davon aus, daß der empfangende Mailserver irgendwann in der Retryzeit seine Meinung ändert 😀 Aus Erfahrung kann ich sagen, nein, tun die empfangenden Mailserver nicht 🙂

Daher müssen wir die Retryzeit für diesen Fall auf 0 setzen, so daß sofort eine Delivery Message erzeugt wird.  Das erledigen wir so :

begin retry

*          refused
*           quota
*        tls_required
*             *         F,2h,15m; G,16h,1h,1.5; F,4d,6h

Das war es bis auf einen kleinen Schönheitsfehler schon: die Delivery Message macht für den Leser derselben keinen Sinn, da ein falscher Fehlergrund ausgegeben wird, aber das ist Euer Problem 😉

 

Redhat-Webseite des Session-Replaying bezichtigt

Da haben es Forscher der Princeton Universität mal genauer genommen und eine Menge bekannter Webseiten auf sogenanntes Session-Replaying untersucht. Dummerweise sind davon nicht nur hierzulande eher unbekannte Webseiten zu finden, sondern auch Teamviewer, wordpress.com, wp.com, conrad.de, comodo.com, Skype & Microsoft und Redhat .

Was ist Session-Replaying ?

Session-Replaying bezeichnet Trackingtechniken in Javascript, die alle Tastatureingaben, alle Mausbewegungen usw. aufzeichnen und zur Auswertung an einen Drittanbieter übermittelt. Natürlich ohne vorher zu fragen, ob die das dürfen. Mit den Daten kann man als Webseitenbetreiber auswerten lassen, wo die eigenen Seiten besonders gut oder besonders schlecht sind. Soweit, so „naja“. Jetzt zeichnen die Scripte aber auch Fehleingaben auf, also z.B. alles was in der Zwischenablage ist und per Copy&Paste unabsichtlich kopiert wird, bspw. auch Passwörter.

Was damit für Schindluder getrieben werden kann, kann sich jeder selbst ausmalen, dem das Copy&Paste schon einmal seine Dienste versagt hat. Das geht nämlich leider schneller, als einem Lieb ist.

Für Redhat kommt der Dienst von clicktale.net ins Spiel. Dieser wurde von Princeton mit dem Vermerk : „evidence of session recording“ versehen.

Gegenmaßnahmen

Wenn es nach dem jüngsten FireFox Update auf 57 gegangen wäre: Keine.

Glücklicherweise hat Giorgio Maone sein Plugin NoScript auf die neue Firefox Api angepaßt. Damit kann man die Tracking-Domains sperren, bzw. erst gar nicht aktivieren. Also, alle die an Giorgio gezweifelt haben, sollten vor Ihm auf die Knie fallen und um Entschuldigung bitten. Der Mann und sein Plugin können Euch jeden Tag den Arsch retten! Das Teil ist für den Datenschutz der Goldstandard. Wundert mich eigentlich, daß die Bundesdatenschutzbeauftragte das nicht für jeden Behörden PC vorschreibt. Das wäre ja mal was 🙂

Die Liste

Wer sich die Liste ansehen will, die ist hier erhältlich:

https://webtransparency.cs.princeton.edu/no_boundaries/session_replay_sites.html

Ihr werdet noch mehr prominente Namen finden z.B. addidas.com , dominos.com ( Ex-Joeys ) , symantec.com, mongodb.com, cpanel.net, magento.com, bitdefender.com, acrobat.com, worldoftanks.com und wenig verwundernd kaspersky.ru .

Alle Apacheprozesse gleichzeitig stracen

Der Apache Webserver kommt ja mit mehreren Methoden daher, wie er effektiv möglichst viele Anfragen gleichzeitig beantworten kann. Die alte Prefork-Methode, die nicht mit HTTP2 kompatibel ist, startet dazu einen Prozess mit wenigen Kindern und splittet neue Prozesse ab, sobald eine Anfrage reinkommt.

Ein einfaches strace -f -p [pidvonerstemhttpd] reicht völlig aus um alle Zugriffe auf den Apachen zu tracen.

Das Event-Modell

Im Eventmodell , das für HTTP2 nötig ist, klappt das nicht mehr ganz so leicht. Hier müssen tatsächlich alle laufenden Prozesse gleichzeitig getraced werden, was in dem Beispiel hier:

├─httpd─┬─httpd(apache)
│ └─4*[httpd(apache)───63*[{httpd}]]

schon sehr,sehr viel Tipparbeit wäre ( > 240 pids) . Natürlich kann man das vereinfachen, indem man ein paar kleine Shellanweisungen nutzt:

strace -f -p `pidof httpd | sed -e "s/ /,/g"`

pidof als Befehl gibt uns leerzeichensepariert alle Prozessids zurück, die zum Httpd gehören. Leider kann strace die so nicht verarbeiten, also müssen wir die Ausgabe in kommasepariert umwandeln, dies macht der SED – Befehl. Die Backticks führen die Befehlsanweisung vor dem Aufruf von strace aus, so daß das Ergebnis direkt als Argument benutzt werden kann.