Aus Linux-Magazin 07/2013

System-E-Mails verschlüsseln und übertragen mit Zeyple

© Luciano De Polo, 123RF.com

Viele Systemadministratoren lassen sich Statusmeldungen und Logdateien der von ihnen betreuten Server automatisch per E-Mail übers Internet schicken. Das Python-Skript Zeyple nutzt GPG, um die bisweilen sensiblen Inhalte vor unbefugten Blicken zu schützen.

Ob Logdigest [1], Logsurfer [2], Cron oder selbst gestrickte Skripte [3]: An vielen Stellen bleibt die E-Mail das Medium der Wahl, wenn es darum geht, schnell oder auch einfach nur regelmäßig relevante Informationen über ein System an den Admin zu bringen.

Sensible Daten per E-Mail

Doch die in solchen Mails enthaltenen Daten sind nicht immer nur informativ, sondern enthalten häufig auch schützenswerte Daten, etwa Benutzernamen, E-Mail-Adressen oder gar die datenschutzrechtlich relevante Information, wer wann wem gemailt hat (Abbildung  1). Wer derartige Mails unverschlüsselt überträgt, liefert nicht nur Angreifern wichtige Anhaltspunkte, sondern erleichtert auch Geheimdiensten die Überwachungsarbeit [4].

Abbildung 1: E-Mail-Adressen, Login-Daten und mehr: Viele Mails an den Systemadministrator enthalten schutzbedürftige Daten, die ein Man-in-the-Middle leicht auslesen kann.

Abbildung 1: E-Mail-Adressen, Login-Daten und mehr: Viele Mails an den Systemadministrator enthalten schutzbedürftige Daten, die ein Man-in-the-Middle leicht auslesen kann.

Den Transport mit SSL/TLS abzusichern ist eine Möglichkeit, hier Sicherheit zu gewinnen. Jedoch bietet diese Methode keinen vollständigen Schutz der Mailinhalte vor unbefugtem Zugriff. Erreicht eine Mail an der Gegenstelle den Mail Transfer Agent (MTA) des Providers, endet die Verschlüsselung und die E-Mails liegen wieder im Klartext vor. Eine für Außenstehende vollständig unzugängliche E-Mail-Kommunikation bedarf folglich einer durchgehenden Verschlüsselung der Inhalte vom Sender bis zum Empfänger.

SSL/TLS reicht nicht aus, GPG muss her

Dafür bieten gerade Linux-Systeme ein relativ einfach zu handhabendes Verschlüsselungsverfahren: GPG, den GNU Privacy Guard. Was im Alltag zwischen Benutzern problemlos funktioniert, verlangt auf einem Server, der ohne Interaktion verschlüsseln und versenden soll, jedoch ein wenig Vorarbeit. Die wohl eleganteste Methode übergibt die E-Mails von der Warteschlange des MTA an ein Programm, das sie verschlüsselt und danach wieder in die Warteschlange einstellt. Dann leitet der MTA die Mails wie gewohnt an den oder die Empfänger weiter (Abbildung 2).

Abbildung 2: Zeyple klinkt sich in die Warteschlange des Mail Transfer Agent ein, zum Beispiel bei Postfix.

Abbildung 2: Zeyple klinkt sich in die Warteschlange des Mail Transfer Agent ein, zum Beispiel bei Postfix.

Genau das macht das Python-Skript Zeyple [5] des Autors Cédric Félizard. Das Tool, in bester Unix/Linux-Manier als rekursives Akronym (Zeyple Encrypts Your Precious Log Emails) benannt, hängt sich in die Warteschlange des MTA und verschlüsselt dort alle E-Mails an Empfänger, deren öffentlicher GPG-Key hinterlegt ist.

Postfix-Beispiel

Dieser Artikel zeigt in einem Beispiel mit Postfix, wie der Admin Zeyple installiert und den SMTP-Server für die Kooperation konfiguriert. Zeyple steht auf Github zum Download [5] und sollte laut den Entwicklern auch mit anderen MTAs funktionieren, die einen entsprechenden Filtermechanismus der Warteschlange bereitstellen.

Listing 1 zeigt ein Skript namens »install.sh« , das die Zusammenarbeit von Zeyple und Postfix einrichtet. Das Beispiel beruht auf Debian Squeeze mit der Postfix-Version 2.7.2, es dürfte aber, von kleineren Anpassungen abgesehen, ebenso mit anderen Distributionen funktionieren. Damit die Verschlüsselung klappt, muss der Systemadministrator ein GPG-Schlüsselpaar generiert und seinen öffentlichen Schlüssel auf einen Schlüsselserver hochgeladen haben. Das Skript gibt’s unter [6] zum Download.

Listing 1

install.sh

01 #!/bin/bash
02 # install.sh
03 [...]
04 # Hier die interne Adresse eintragen, an welche die System-Mails normalerweise gehen
05 INT_ADDRESS=
06 # EXT_ADDRESS definiert die externe Adresse, an die der Server die verschlüsselten System-Mails versenden soll. Wichtig: Für diese Adresse muss ein öffentlicher GPG-Schlüssel auf dem Keyserver ($KEYSERVER_ADDRESS, siehe Zeile 9) zu finden sein
07 EXT_ADDRESS=
08 # Die URL des Keyservers
09 KEYSERVER_ADDRESS=
10
11 # Abhängigkeiten installieren
12 apt-get install sudo gpg python-gpgme
13
14 # Anlegen des Systembenutzers, ohne Home-Directory und ohne Login- Erlaubnis
15 adduser --system --no-create-home --disabled-login zeyple
16
17 # Das Python-Skript zeyple.py herunterladen
18 wget https://github.com/infertux/zeyple/blob/master/zeyple/zeyple.py
19 # Konfigurationsdatei herunterladen
20 wget https://github.com/infertux/zeyple/blob/master/zeyple/zeyple.conf.example
21
22 # Ein Verzeichnis unter /etc für die Konfigurationsdatei und die Schlüsselverwaltung einrichten
23 mkdir -p /etc/zeyple/keys && chmod 700 /etc/zeyple/keys && chown zeyple: /etc/zeyple/keys
24
25 # Den öffentlichen Schlüssel für $EXT_ADDRESS vom Keyserver holen und mit gpg importieren
26 sudo -u zeyple gpg --homedir /etc/zeyple/keys --keyserver $KEYSERVER_ADDRESS --search $EXT_ADDRESS
27
28 # Die Beispielkonfiguration nach /etc/zeyple verschieben
29 mv zeyple.conf.example /etc/zeyple/zeyple.conf
30 # zeyple.py nach /usr/local/bin verschieben und Benutzerrechte anwenden
31 mv zeyple.py /usr/local/bin/zeyple.py
32 chmod 744 /usr/local/bin/zeyple.py && chown zeyple: /usr/local/bin/zeyple.py
33
34 # Logdatei anlegen und Benutzerrechte setzen
35 touch /var/log/zeyple.log && chown zeyple: /var/log/zeyple.log
36
37 # Postfix für Zeyple vorbereiten: master.cf und main.cf um die Filtereinträge erweitern
38 cd /etc/postfix
39
40 cat >> master.cf <<END
41 zeyple  unix  -  n  n  -  -  pipe
42   user=zeyple argv=/usr/local/bin/zeyple.py
43
44 localhost:10026  inet  n  -  n  -  10  smtpd
45   -o content_filter=
46   -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
47   -o smtpd_helo_restrictions=
48   -o smtpd_client_restrictions=
49   -o smtpd_sender_restrictions=
50   -o smtpd_recipient_restrictions=permit_mynetworks,reject
51   -o mynetworks=127.0.0.0/8
52   -o smtpd_authorized_xforward_hosts=127.0.0.0/8
53 END
54
55 # Den Contentfilter in main.cf installieren
56 cat >> main.cf <<END
57 content_filter = zeyple
58 END
59
60 # Damit Zeyple die Schlüssel richtig zuordnet, empfiehlt es sich, die interne Mail-Adresse für ausgehende Mails auf die externe umzuleiten
61 cat >> recipient_canonical<<END
62 $INT_ADDRESS  $EXT_ADDRESS
63 END
64
65 # Die Postfix-Empfängerdatenbank neu erstellen
66 postmap recipient_canonical
67 # Datenbank in der Postfix-Adressenumschreibung bekannt machen
68 cat >> main.cf <<END
69 recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
70 END
71 # Postfix-Konfiguration neu laden
72 /etc/init.d/postfix reload
73
74 exit 0

Installationsskript

In den Zeilen 5 beziehungsweise 7 definiert der Admin die interne (beispielsweise »root@local.domain« ) und die externe (etwa »admin@example.com« ) E-Mail-Adresse. Dann wählt er einen passenden Keyserver, auf dem sich der öffentliche Schlüssel der externen E-Mail-Adresse befindet, und ergänzt Zeile 9 mit dessen URL.

Abhängigkeiten: Sudo, GPG, Python-gpgme

Voraussetzung für das Funktionieren des Installationsskripts und auch von Zeyple sind die Pakete Sudo, GPG und Python-gpgme. In Zeile 12 zieht ein Apt-get-Befehl diese aufs System. GPG ist bei Debian Squeeze meist bereits installiert, Sudo und Python-gpgme eher nicht. Zeile 15 legt den Benutzer Zeyple an, unter dessen Rechten das Skript läuft. Keinesfalls sollte der Admin Zeyple mit den Rechten der Accounts von Postfix oder gar Root laufen lassen.

Anschließend lädt Zeile 20 die Beispielkonfiguration von Github.com, das Skript legt das Konfigurationsverzeichnis und das für die GPG-Schlüsseldatenbank für Zeyple an und korrigiert die Berechtigungen. Zeile 29 transportiert die Beispielkonfiguration nach »/etc/zeyple« , der Admin kann sie ohne weitere Änderungen übernehmen. Die folgenden Zeilen verschieben das Python-Skript »zeyple« nach »/usr/local/bin« und machen es ausführbar.

Logrotate und Feinjustierung

Danach legt das Skript eine leere Logdatei für Zeyple an. Vorausschauende Admins werden hier gleich auch eine passende Konfiguration für Zeyple im Verzeichnis »/etc/logrotate.d« anlegen. Der folgende Block hilft dabei, Zeyple als Contentfilter auf Port 10026 (Zeile 44, der Port ist in »/etc/zeyple/zeyple.conf« einstellbar) in der Postfix-Datei »master.cf« einzubauen, gleich danach folgt der passende Eintrag in » main.cf« .

Bis hierhin folgt das Installationsskript weitgehend der Installationsbeschreibung des Zeyple-Autors Cédric Félizard. Der empfiehlt, die Weiterleitung der internen zur externen E-Mail-Adresse über die Aliases-Datenbank von Postfix zu bewerkstelligen. Allerdings stellte sich im Test heraus, dass in der vorliegenden Konstellation Postfix dann nicht das »To:« -Feld, sondern das »X-Envelope:« -Feld des E-Mail-Headers für die externe E-Mail-Adresse verwendet, weshalb viele E-Mails das System dann doch noch unverschlüsselt verlassen (siehe auch das Manual von Postfix [7]).

Ein wenig Nachhilfe für Postfix

Abhilfe schaffen hier die Skriptzeilen ab 60. Mit ihnen weist der Code der internen Adresse die externe in der »recipient_canonical« -Datenbank von Postfix zu, hasht die Datenbank erneut (Zeile 66) und teilt ihre Existenz Postfix in der Konfigurationsdatei »master.cf« (Zeilen 67 bis 70) mit.

Jetzt nur noch die neue Konfiguration von Postfix laden (Zeile 72) – schon sind Installation und Konfiguration beendet und der Server verschlüsselt die ausgehenden Mails automatisch. Ab sofort sollten alle System-E-Mails, die ansonsten an Root des Mailsystems geschickt werden, verschlüsselt an der angegebenen externen E-Mail-Adresse ankommen.

Testen lässt sich das mit »date | mail -s test Interne_E-Mail-Adresse_des_Systemadministrators« . Das Verwalten der öffentlichen Schlüssel für Zeyple erledigt der Admin an der Kommandozeile mit GPG und dem Benutzer »zeyple« und der Option »–homedir=/etc/zeyple« .

Zeyple hat noch Schwächen: Anhänge, HTML, Signaturen

Zeyple leistet bereits gute Dienste, ist aber noch lange nicht perfekt: Beispielsweise kann es noch keine E-Mail-Anhänge verschlüsseln und damit also auch keine typischen HTML-E-Mails. Auch könnte ein Angreifer mit Hilfe des auf dem Keyserver zugänglichen öffentlichen Schlüssels gefälschte System-E-Mails an den Systemadministrator schicken. Da hilft nur, die E-Mails zusätzlich zur Verschlüsselung zu signieren. Das aber kann Zeyple bisher nicht leisten.

Ohnehin ist Vorsicht geboten: Alle Server mit nur einem privaten Schlüssel abzusichern ist keine gute Idee, da im Falle einer Kompromittierung dieses Schlüssels gleich alle Systeme mit neuen Schlüsseln zu versorgen sind. Hier bleibt nur, für jedes System ein eigenes Schlüsselpaar zu generieren und dieses im Einzelfall zu widerrufen und auszutauschen. Das aber erzeugt mit zunehmender Anzahl an Servern einiges an organisatorischem Overhead.

Infos

  1. Logdigest: http://sourceforge.net/projects/logdigest/
  2. Logsurfer: http://www.crypt.gen.nz/logsurfer/
  3. Charly Kühnast, “Türspion”: Linux-Magazin 07/10, S. 83: https://www.linux-magazin.de/Ausgaben/2010/07/Tuerspion
  4. Ex-FBI-Mitarbeiter, “Die Geheimdienste speichern jede digitale Kommunikation”:http://www.transcripts.cnn.com/TRANSCRIPTS/1305/01/ebo01.html
  5. Zeyple auf Github.com: https://github.com/infertux/Zeyple
  6. Installationsskript für Zeyple und Postfix: https://www.linux-magazin.de/static/listings/magazin/2013/07/Zeyple
  7. Postfix-Dokumentation zu Address Rewriting: http://www.postfix.org/ADDRESS_REWRITING_README.html

Der Autor

Dr. Harry Knitter http://www.knitter-edv-beratung.de berät und betreut kleine und mittlere Unternehmen rund um Netzwerke und IT-Sicherheit. Dabei setzt er besonders auf Linux. Daneben ist er auch in Hof als EDV-Dozent an der Fachhochschule für Öffentliche Verwaltung und Rechtspflege in Bayern tätig.http://.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben