[postfix-users] Erweiterte Konfiguration
Guten werte Mailinglisten Benutzer,
ich habe letztendlich zwei relativ einfache Fragen, diesen geht allerdings eine recht lange Erklärung voraus, um die Rahmenbedingungen erschöpfend zu erleutern. Also bitte ich vorab um Entschuldigung für die leicht romanartigen Züge meines Beitrags
Ich bin derzeit damit befasst ein kleines Mailsystem auf meiner Ubuntu-Box einzurichten. Die Box ist im Web unter der beispielhaften Domain "example.de", mit wechselnder IP, zu erreichen. Die erklärten ziele sind dabei: 1. Bereitstellung eines IMAP-Postfachs für verschiedene Nutzer, z.B. Füruser1@example.de (umgesetzt mit Dovecot) 2. Einsammeln der Mails aus verschiedenen Externen Postfächern pro Benutzer (z.b. Von user1myfirstidentity@web.de,mysecondidentity@googlemail.com; umgesetzt mittels Dovecot PostLoginScript und getmail) 3. Versenden von Mails über die Externen Postfächer (z.B. User1 kann über die Box als Absendermyfirstidentity@web.de verwenden, was dazu führt, dass die Mail über User1s Mailaccount bei Web.de geleitet wird; umzusetzen mit Postfix) (4.) Versand von @example.de Mails an externe Accounts soll nicht umgesetzt werden (z.b. Vonuser1@example.de anuser@de.postfix.org), dazu fehlt mir mindestens eine statische IP 5. Erzwungene Verschlüsselung der Verbindungen eines Benutzers zum den Komponenten des Mailsystems (dank verbreiteter Unterstützung von TLS in allen Komponenten ein Leichtes)
Das so beschriebene Setup ist natürlich problemfrei umzusetzen. Jetzt folgt aber der schwierige Teil, nämlich die Randbedingungen zu den oben genannten Zielen: 1.a) Asymmetrische Verschlüsselung (PGP) aller Mails im Postfach des Benutzers 2.a) Pro Benutzer symmetrisch verschlüsselte Speicherung der Zugangsdaten zu den Externen Postfächern bzw. SMTP Servern 3.a) siehe 2.a) 5.a) die von den Benutzern zum Mailsystem übertragenen Anmeldedaten müssen in Klartext, oder mindestens in vorhersehbarer Form (bekannte Digest-Methode) vorliegen
Diese Randbedingungen sollen es den Administratoren (ich bin nicht allein, und ich will auch nicht "aus Versehen" die Daten der Nutzer sehen können) und vor allem eventuellen Einbrechern erschweren die Mail- beziehungsweise Zugangsdaten der einzelnen Benutzer einzusehen. Ich schreibe "erschweren", da am Ende ein super user mindestens die Zugangsdaten lesen können wird, dazu aber in den Prozess der Mailzustellung eingreifen muss. Mir ist kein Ansatz eingefallen, die Daten meiner Benutzer noch stärker zu sichern, leider.
Randbedingung 1.a) wird von Dovecot mit pro Benutzer verwalteten PGP Schlüsseln, beim einsortieren der Mails, umgesetzt werden (Evaluierung steht noch aus, zu förderst muss das Relaying an externe SMTP Server funktionieren).
Randbedingung 2.a) basiert erneut auf Dovecot. Dovecot ermöglicht es über Prefetch-Queries das Klartextpasswort der sich gerade angemeldeten Benutzer kurz vorzuhalten und eine über die "Post Login Script" Funktionalität ausgelöste Aktion auszuführen. Somit ist es mir möglich, bei der Anmeldung eines Benutzers, seine mit seinem Box-Passwort verschlüsselten Zugangsdaten zu den externen Postfächern zu holen und zu entschlüsseln, und damit getmail zu füttern. Getmail stellt dann die Mails der externen Postfächer dem Benutzer zu (hier ist ein Ansatzpunkt für einen Einbrecher mit super user Rechten, da dieser das Post Login Script manipulieren kann, oder aber die Nutzerdaten aus dem getmail Prozess auszulesen vermag). Das ganze ist transparent für den Benutzer und funktioniert wunderbar (transparent in dem Sinne, dass der Benutzer eh erst sieht, dass er neue Mails hat, wenn es sich anmeldet, und nicht bemerkt [von einer k leine Verzögerung abgesehen], dass die Mails erst in diesem Moment eingesammelt werden).
Nun folgen die eigentliche Probleme.
3. Ist mit Postfix und dessen sender_based_relay_maps sowie sender_restrictions pro Benutzer (ein Benutzer darf nur @example.de und seine externen Adressen als Absender angeben) sehr schön umzusetzen.
Die Schwierigkeit liegt bei der Randbedingung 3.a). Ich benötige eine Möglichkeit, im Kontext des Sendens einer Mail über Postfix an das Klartextpasswort des Benutzer heranzukommen, um damit das Ergebnis des sender_based_relay Lookups zu modifizieren (Entschlüsselung der gespeicherten Daten entsprechend 2.a)).
Frage 1: Gibt es ist Postfix eine Möglichkeit das Ergebnis des sender_based_relay Lookups mit dem Klartextpasswort aus der SMTP Anmeldung zu vermischen?
Beim sender_based_relay-ing ergibt sich, in meiner Installation, ein weiteres Problem. Sollte der Postfix die Mail nicht sofort zum Zielserver (beispielsweise dem SMTP vom Web.de) zustellen können, wird er dies später erneut versuchen. Dazu benötigt er dann "später" die Zugangsdaten des Benutzers zum externen Server, befindet sich aber nicht mehr im Kontext der Anmeldung des Benutzers, und hat somit auch nicht mehr dessen Klartextpasswort zur Verfügung. Der Schlüssel, der für die Entschlüsselung der Zugangsdaten benötigt wird, muss bis zum erfolgreichen Zustellen (oder zum letztendlichen Aufgeben der Zustellung) der Mail vorgehalten werden. (Alternativ könnte die Mail in diesem Moment abgelehnt werden.)
Darum Frage 2: ist es möglich, Postfix spezielle Informationen in den Envelope einer sich in der "ausgehenden" Queue befindlichen Mail zu schreiben, und diese beim Zustellungsversuch zur Manipulation der Relay-Lookups zu verwenden? Mit Envelope meine ich an dieser Stelle den Satz an Verwaltungsdaten, den Postfix für die Zustellung einer Mail verwendet, und der in keinem Fall jemals in einer Mail auftaucht, weder bei erfolgreicher Zustellung noch bei Bounce noch bei Benachrichtigung des Postmasters über unzustellbare Mails.
(An dieser Stelle sei angemerkt, dass dann das Klartextpasswort des Benutzers, oder besser eine Ableitung davon, temporär auf der Festplatte gespeichert würde, was es einem Angreifer mit super user Rechten ermöglichte, dies zu lesen.)
Sind jemandem von Ihnen Ansätze bekannt, die zugrunde liegenden Probleme von Frage 1 und Frage 2 zu lösen?
Erneut muss ich mich entschuldigen, dass dieser Beitrag recht lang ist, jedoch denke ich, dass dies durch die Komplexität des entstehenden Systems bedingt ist. Ich hoffen meine Ausführungen ermöglichen eine Einordnung und bestenfalls positive Beantwortung meiner Fragen.
Haben Sie vorab schon vielen Dank für die Beschäftigung mit meinen Fragen.
Mit freundlichen Grüszen, Mathias Reineke
Am 25.06.2013 08:42, schrieb Mathias Reineke:
Das so beschriebene Setup ist natürlich problemfrei umzusetzen. Jetzt folgt aber der schwierige Teil, nämlich die Randbedingungen zu den oben genannten Zielen: 1.a) Asymmetrische Verschlüsselung (PGP) aller Mails im Postfach des Benutzers
teste evtl mal
http://code.google.com/p/gpg-mailgate/
Best Regards MfG Robert Schetterer
teste evt mal http://code.google.com/p/gpg-mailgate/
Vielen Dank für den Link, das sollte die Einrichtung der asymmetrischen Verschlüsselung erleichtern.
Mit freundlichen Grüszen, Mathias Reineke
Am 25.06.2013 08:42, schrieb Mathias Reineke:
Ich bin derzeit damit befasst ein kleines Mailsystem auf meiner Ubuntu-Box einzurichten. Die Box ist im Web unter der beispielhaften Domain "example.de", mit wechselnder IP, zu erreichen. Die erklärten ziele sind dabei:
- Bereitstellung eines IMAP-Postfachs für verschiedene Nutzer, z.B. Für user1@example.de (umgesetzt mit Dovecot)
kein problem
- Einsammeln der Mails aus verschiedenen Externen Postfächern pro Benutzer (z.b. Von user1 myfirstidentity@web.de, mysecondidentity@googlemail.com; umgesetzt mittels Dovecot PostLoginScript und getmail)
getmail kein problem wozu PostLoginScript ?
http://sys4.de/de/blog/2013/04/12/abholdienst-fur-mail/
- Versenden von Mails über die Externen Postfächer (z.B. User1 kann über die Box als Absender myfirstidentity@web.de verwenden, was dazu führt, dass die Mail über User1s Mailaccount bei Web.de geleitet wird; umzusetzen mit Postfix)
geht auch
(4.) Versand von @example.de Mails an externe Accounts soll nicht umgesetzt werden (z.b. Von user1@example.de an user@de.postfix.org), dazu fehlt mir mindestens eine statische IP
also ein root server kostet nun heut zu Tage nicht wirklich viel
- Erzwungene Verschlüsselung der Verbindungen eines Benutzers zum den Komponenten des Mailsystems (dank verbreiteter Unterstützung von TLS in allen Komponenten ein Leichtes)
Verbindungs Sicherheit sollte einfach sein, allerdings muss dein Gegenüber es auch unterstuetzen, sonst gehts nicht , das gilt fuer alle Protokolle, zb wenn du per getmail was abholen willst under andere Server halt nun mal kein tls anbietet ,gehts halt nicht
http://sys4.de/de/blog/2013/03/27/uebermittlungssicherheit-mit-mailservern-p...
im weitesten Sinne willst du ein mailrelay im Mischbetrieb auch als Imapserver auf einer dynip betreiben ,moeglichst sicher, und von mehreren adminstrierbar, alles "gewuenschte" wirst du dabei wohl nicht voellig umsetzen koennen du kannst zum administrieren webmin nutzen mit eigenen scripten, oder als editor für tabellen
Empfehlen wuerde ich aber einfach einen root server zu mieten, und die Sache moeglichst nicht zu verkomplizieren.
Best Regards MfG Robert Schetterer
- Einsammeln der Mails aus verschiedenen Externen Postfächern pro Benutzer (z.b. Von user1 myfirstidentity at web.de, mysecondidentity at googlemail.com; umgesetzt mittels Dovecot PostLoginScript und getmail)
getmail kein problem wozu PostLoginScript ?
Ihr Blog-Eintrag zum Thema Mail-Abholdienst hatte mich bereits inspiriert und auf getmail aufmerksam gemacht.
Das PostLoginScript erfüllt für mich zwei Aufgaben: 1. Ereignisgesteurtes Einsammeln der Mails. Die Mails werden immer dann abgerufen, wenn sich ein Benutzer für sie interessiert, was sich serverseitig als Login des Benutzers bemerkbar macht. Ich ziehe eregnisgesteuerte Aktionen zeitgesteuerten vor, da diese ressourcenschonender sind. Es wird immer nur dann etwas getan, wenn etwas getan werden soll/muss.
2. Um niemandem Zugriff auf die Zugangsdaten der externen Postfächer des Benutzers gewähren möchte, sollen diese verschlüsselt werden. Da die Verschlüsselten Daten auch wieder entschlüsselt werden müssen (getmail muss sich ja am externen Postfach authentifizieren) muss das Passwort (kurzzeitig) bekannt sein. Es ist nun aber sinnfrei, die Daten mit einen auf dem Server gespeicherten Passwort zu verschlüsseln, da ja dann ein Einbrecher die Daten wieder entschlüsseln kann. Deshalb verwende ich für die Verschlüsselung das Passwort des Benutzers. Somit ist nur dieser in der Lagen die Zugangsdaten zu entschlüsseln.
Ich benutze nun das PostLoginScript, um das Passwort des Benutzers, mit dem er sich gerade am Dovecot authentifiziert hat, um die verschlüsselten Daten zu entschlüsseln.
Dieser Ansatz erscheint mir durchaus sinnvoll. Allerdings besteht das Problem, dass ich nicht weiss, wie ein ähnliches Verfahren mit Postfix umzusetzen ist. Darum dieser Beitrag.
(4.) Versand von @example.de Mails an externe Accounts soll nicht umgesetzt werden (z.b. Von user1 at example.de an user at de.postfix.org), dazu fehlt mir mindestens eine statische IP
also ein root server kostet nun heut zu Tage nicht wirklich viel
Auf lange Sicht wird es wohl auf einen Root Server hinauslaufen, aber im Moment ist es eine recht günstige Variante, den Server in meinen eigenen vier Wänden zu betreiben (2 Kern HT ATom Prozessor, 4 Gig Ram: kostet mich etwa 30€ im Jahr). Und, ich habe damit die absolute Datenhoheit.
- Erzwungene Verschlüsselung der Verbindungen eines Benutzers zum den Komponenten des Mailsystems (dank verbreiteter Unterstützung von TLS in allen Komponenten ein Leichtes)
Verbindungs Sicherheit sollte einfach sein, allerdings muss dein Gegenüber es auch unterstuetzen, sonst gehts nicht , das gilt fuer alle Protokolle, zb wenn du per getmail was abholen willst under andere Server halt nun mal kein tls anbietet ,gehts halt nicht
http://sys4.de/de/blog/2013/03/27/uebermittlungssicherheit-mit-mailservern-p...
Dem muss ich leider voll zustimmen. Meinen Benutzen "zwinge ich Transportverschlüsselung auf" (Postfix: smtpd_tls_security_level = encrypt, Dovecut: ssl = required). Wenn der Client das nicht kann, tuts mir leid; aber das ist zum Glück kein Problem mehr. Wie es sich mit den externen Postfächern verhält, ist dann im einzelnen zu klären, aber im Moment fällt mir kein größerer Anbieter ein, der keine Transportverschlüsselung anbietet.
im weitesten Sinne willst du ein mailrelay im Mischbetrieb auch als Imapserver auf einer dynip betreiben ,moeglichst sicher, und von mehreren adminstrierbar, alles "gewuenschte" wirst du dabei wohl nicht voellig umsetzen koennen
Damit haben Sie den Nagel auf den Kopf getroffen
du kannst zum administrieren webmin nutzen mit eigenen scripten, oder als editor für tabellen
Diese Variante habe ich auch schon bedacht, jedoch erscheint es mir im Moment noch am angenehmsten, ein Terminal zu bemühen. Es mag archaisch klingen, aber ich bin ein Freund des Terminals und der Textdatei basierten Konfiguration
Empfehlen wuerde ich aber einfach einen root server zu mieten, und die Sache moeglichst nicht zu verkomplizieren.
Auch dem Stimme ich zu: KISS.
Allerdings ist meine "Paranoia", was Daten anderer Menschen in meinem Einflussbereich angeht, relativ ausgeprägt was i.A. zu leider komplexeren Systemen führt.
Mit freundlichen Grüszen, Mathias Reineke
Am 26.06.2013 09:13, schrieb Mathias Reineke:
Das PostLoginScript erfüllt für mich zwei Aufgaben:
- Ereignisgesteurtes Einsammeln der Mails. Die Mails werden immer dann
abgerufen, wenn sich ein Benutzer für sie interessiert, was sich serverseitig als Login des Benutzers bemerkbar macht. Ich ziehe eregnisgesteuerte Aktionen zeitgesteuerten vor, da diese ressourcenschonender sind. Es wird immer nur dann etwas getan, wenn etwas getan werden soll/muss.
- Um niemandem Zugriff auf die Zugangsdaten der externen Postfächer des
Benutzers gewähren möchte, sollen diese verschlüsselt werden. Da die Verschlüsselten Daten auch wieder entschlüsselt werden müssen (getmail muss sich ja am externen Postfach authentifizieren) muss das Passwort (kurzzeitig) bekannt sein. Es ist nun aber sinnfrei, die Daten mit einen auf dem Server gespeicherten Passwort zu verschlüsseln, da ja dann ein Einbrecher die Daten wieder entschlüsseln kann. Deshalb verwende ich für die Verschlüsselung das Passwort des Benutzers. Somit ist nur dieser in der Lagen die Zugangsdaten zu entschlüsseln.
Ich benutze nun das PostLoginScript, um das Passwort des Benutzers, mit dem er sich gerade am Dovecot authentifiziert hat, um die verschlüsselten Daten zu entschlüsseln.
also wenn ich das richtig verstehe willst du ein getmail bei zb imap/pop3 login per PostLoginScripting ausloesen, also wenn du da nicht genuegend script "Magie" einbaust wird das ein Overkill fuer den Server, denn im Prinzip kann sich ein pop3/imap client ja "beliebig" oft einloggen pro "Zeiteinheit", ich wuerde von so einer Loesung eher abraten, dovecot kann ja auch imap/pop3 proxy waere das evtl nicht einfacher ?
http://wiki2.dovecot.org/PostLoginScripting
Best Regards MfG Robert Schetterer
Am 26.06.2013 09:13, schrieb Mathias Reineke:
Diese Variante habe ich auch schon bedacht, jedoch erscheint es mir im Moment noch am angenehmsten, ein Terminal zu bemühen. Es mag archaisch klingen, aber ich bin ein Freund des Terminals und der Textdatei basierten Konfiguration
wenn alle Beteiligten "Terminal" koennen, dann ist das natuerlich das Beste
Best Regards MfG Robert Schetterer
participants (2)
-
Mathias Reineke
-
Robert Schetterer