[SOLVED] exim4 und acl

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
TomL

Re: exim4 und acl

Beitrag von TomL » 08.05.2017 10:30:20

scientific hat geschrieben:Nein. Das hat jetzt weniger mit Prüfung zu tun, ob ich mit openssl oder telnet überhaupt ein Email abliefern kann, sondern mehr mit einem Studieren der Debug-Logs. Ich liefere mit openssl oder Thunderbird ein Email und sehe im Log zu, was mein exim macht..Welche Router welche ACL, welche Transports werden wie abgearbeitet.
Wir haben halt unterschiedliche Anforderungen... mich interessieren Logs aus dieser Hinsicht überhaupt nicht. Ich will bei unauthorisierter Verwendung einfach nur ein "denied" als Reaktion des Serves, und wenn das kommt, ist für mich alles ok. Und der Datenweg bei authorisierter Verwendung -oder was Postfix macht- ist mir völlig egal.
Du unterstellst mir dauernd, ich würde den Usernamen und das Passwort, mit dem ich mich auf irgend einem Rechner anmelden kann um Thunderbird oder eine Shell mit telnet starten zu können in meine Überlegungen mit einbeziehen...
Um mit SMTP-Auth ein Email versenden zu können würde zu dieser Email-Adresse der Loginname für SMTP-Auth scientific sein und das Passwort jenes mit dem sich scientific auch per ssh am Mailserver einlogt.
Erkennst Du den Widerspruch in diesen beiden Absätzen... ?... bei Dir ist der Mailuser auch der Linuxuser, der sich per SSH anmelden kann. Das ist ein absolutes NoGo für mich.... egal... abhaken...bei mir ist Mailserver-User != Linuxserver-User. Ein Mailserver-User kann niemals ein Homedir haben, geschweige denn einen SSH-Zugriff erlaubt haben.... selbst dann nicht, wenn die Mailuser als Menschen die gleichen sind, die sich via Samba anmelden. Systemisch betrachtet sind auf meinem Server Mailuser eine eigene völlig rechtelose "Gattung".
Und irgendwie beschleicht mich grad wieder das Gefühl, dass du jetzt überhaupt nicht auf die beiden Ebenen, die Rollen als Server und Client, die ich beschrieben habe, die exim (oder postfix) im Zuge des Sendens einer Email einnehmen muss, eingehst.
Ja, weil das so banal und selbstverständlich ist, dass man das überhaupt nicht weiter erörtern muss.... und mal wieder, weil Du wieder nicht aufmerksam liest oder zuhörst. Du brauchst bloß auf meine Strichgrafik etwas höher zu sehen, dann siehst Du, dass ich die unterschiedlichen Rollen sehr wohl jetzt (!) unterscheide. Vorher allerdings nicht, da fehlte der SMTPD-Auth.

Mir bringts jetzt nichts mehr... ich klinke mich jetzt hier aus... ich bedanke mich auf jeden Fall bei Dir, denn ohne dieses Auseinandersetzen mit der Materie und das ich mich mit Deinen Argumenten beschäftigt habe, hätte ich nicht so viel darüber gelernt. Und niemals hätte ich ohne diese Diskussionen formulieren können, was ich überhaupt will. Jetzt weiss ich das alles und kanns auch umsetzen. Danke!

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: exim4 und acl

Beitrag von scientific » 08.05.2017 11:03:14

TomL hat geschrieben:
scientific hat geschrieben:Nein. Das hat jetzt weniger mit Prüfung zu tun, ob ich mit openssl oder telnet überhaupt ein Email abliefern kann, sondern mehr mit einem Studieren der Debug-Logs. Ich liefere mit openssl oder Thunderbird ein Email und sehe im Log zu, was mein exim macht..Welche Router welche ACL, welche Transports werden wie abgearbeitet.
Wir haben halt unterschiedliche Anforderungen... mich interessieren Logs aus dieser Hinsicht überhaupt nicht. Ich will bei unauthorisierter Verwendung einfach nur ein "denied" als Reaktion des Serves, und wenn das kommt, ist für mich alles ok. Und der Datenweg bei authorisierter Verwendung -oder was Postfix macht- ist mir völlig egal.
Wenn ich einen Server konfiguriere, dann interessieren mir die Logs sehr wohl. Und vor allem die Debug-Logs. Ich will ja wissen, was genau mein Server da macht, wenn ich in der Konfiguration etwas ändere/hinzufüge. Und vor allem, warum da jetzt ein deny oder ein accept kommt...
TomL hat geschrieben:
Du unterstellst mir dauernd, ich würde den Usernamen und das Passwort, mit dem ich mich auf irgend einem Rechner anmelden kann um Thunderbird oder eine Shell mit telnet starten zu können in meine Überlegungen mit einbeziehen...
Um mit SMTP-Auth ein Email versenden zu können würde zu dieser Email-Adresse der Loginname für SMTP-Auth scientific sein und das Passwort jenes mit dem sich scientific auch per ssh am Mailserver einlogt.
Erkennst Du den Widerspruch in diesen beiden Absätzen... ?... bei Dir ist der Mailuser auch der Linuxuser, der sich per SSH anmelden kann. Das ist ein absolutes NoGo für mich.... egal... abhaken...bei mir ist Mailserver-User != Linuxserver-User.
Das stimmt doch nicht... Ich hab die Konfiguration mal so, mal anders gefahren. Ich schreibe nur von der Möglichkeit, woher die Information kommt, wer auf dieser Maschine ein Email empfangen darf resp. kann, und wer nicht.

Aber egal... du hast dich jetzt eh ausgeklinkt, und ich hab jetzt offenbar eine Konfiguration hinbekommen, wo es nach meinen Wünschen funktioniert.
Ich muss noch genauer testen, dann setze ich auch den Thread auf gelöst.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

[SOLVED]Re: exim4 und acl

Beitrag von scientific » 08.05.2017 13:40:15

Ich habe jetzt eine Lösung gefunden, die zu funktionieren scheint. Intensivere Tests folgen noch:

Kurze Zusammenfassung:
Bei einer Authentifizierten SMTP-Sitzung wird die Absenderadresse nicht mehr geprüft. TomL hat das mit verschiedenen großen und bekannten Email-Providern auch getestet.
Ich kann mich also bei einem SMTP-Server authentifizieren und dann jede x-beliebige Absenderadresse im Envelope-From-Header eintragen. Das ist zwar kein Sicherheitsproblem, aber es kann schön missbraucht werden um Emails in anderer Namen zu versenden.

Ich habe ein Mailserver-Setup, welches von mehreren Email-Konten bei verschiedenen ISP die Emails einsammelt und pro User in eine Mailbox liefert. Dort sortiert ein Dovecot-IMAP-Server mittels Sievefilter die Emails auf Userwunsch in verschiedene IMAP-Unterordner des einzelnen Users.

Umgekehrt soll es mein Setup ermöglichen, zentral eine Datenbank zu haben, wo verschiedenen Absenderadressen zugehörige SMTP-Server mit entsprechenden Authentifizierungs-Credentials hinterlegt sind. Zusätzlich soll es für jede mögliche Absenderadresse erlaubte smtp-user geben, die diese Email-Adresse verwenden dürfen.
Wenn ein anderer SMTP-User eine dieser Adressen als Envelope-From verwendet, soll die Annahme des Emails verweigert werden. Es soll also nicht wie bei gmx möglich sein, nachdem sich ein SMTP-User authentifiziert hat, dass dieser einen x-beliebigen Absender im Envelope-From-Header verwendet, sondern nur klar definierte "ihm gehörende".

Die Auswahl des Smarthosts samt credentials zur Absenderadresse funktionierte bereits. Das Problem war "nur" Emails abzuweisen die ein authentifizierter SMTP-User mit einer "falschen" Absenderadresse "MAIL FROM:..." geschickt hat.

Dazu ein paar Voraussetzungen:
exim lauscht auf localhost:25 und nimmt Emails auch ohne Authentifizierung entgegen. Sonst können Daemons keine Benachrichtigungen mehr versenden.
exim lauscht auf localhost und an den Netzwerkinterfaces auf Port 587.
Auf diesem Port wird eine TLS-gesicherte Verbindung und SMTP-AUTH zwingend verlangt.
Port 25 nach "außen" wird nicht belauscht.
Der veraltete Port 465 wird nicht bedient.

Code: Alles auswählen

MAIN_LOCAL_INTERFACES = 127.0.0.1.25 : 0.0.0.0.587
TLS wird aktiviert:

Code: Alles auswählen

MAIN_TLS_ENABLE = yes
Die entsprechenden Zertifikate müssen lt. Anleitungen natürlich dazu auch erstellt werden. Ist nicht Thema jetzt.

Die Lösung hier zeigt nur auf, wie die ACL gestaltet werden muss:
Ich habe dazu eine Config-Datei /etc/exim4/conf.d/main/002_localmacros_multiaccount mit folgendem Inhalt angelegt:

Code: Alles auswählen

# Use Multiaccount-Routers and transports, set MULTIACCOUNT
MULTIACCOUNT = true

.ifdef MULTIACCOUNT
# If MULTIACCOUNT is definded, set MAIN_ACL_CHECK_MAIL to use a special ACL for
# Connections on ports other than 25

MAIN_ACL_CHECK_MAIL = ${if ={25}{$interface_port} \
                     {acl_check_mail} {acl_check_mail_multiaccount} }
.endif
Diese besagt: Wenn eine Connection auf Port 25 eingeht, dann verwende die standardmäßig vorhandene ACL "acl_check_mail". Auf allen anderen Ports verwende "acl_check_mail_multiaccount", die so aussieht und manuell erstellt wird:

Code: Alles auswählen

# conf.d/acl/30_exim-config_check_mail_multiaccount
########################################################################
##  ACL for use with Multiaccounts on Multiple Smarthosts             ##
##  ACL reject Emails with not allowed from for $authenticated_id     ##
########################################################################
acl_check_mail_multiaccount:

  deny
    condition = ${if eq {$interface_port}{587}{true}}
    !encrypted = *
    message = Encrypted Connection required on $interface_port

  deny
    !authenticated = *
    message = Authentication requires before MAIL command on port $interface_port


  deny
    message = User $authenticated_id is not in allowed to send with $sender_address as from-envelope
    !condition = ${if forany{<, ${extract{1}{:}{${lookup{$sender_address}wildlsearch{CONFDIR/client.multismarthost_multiaccount.passwd}{$value}fail}}}}\
                   {match{$item}{$authenticated_id}}{yes}{no}}

  accept

Die Datei CONFDIR/client.multismarthost_multiaccount.passwd hat folgendes Format:

Code: Alles auswählen

from.sender@email.tld:commaseparated,list,of,loginusers:smtp.server:portnumber(integer):user.name:verysecretpassword
Separator ist der ":"
Im zweiten Feld kommt dann eine kommaseparierte Liste aller Usernamen (SMTP-AUTH-Usernamen), welche die From-Adresse aus dem ersten Feld verwenden dürfen.
Das 3. Feld ist der SMTP-Server(Smarthost), und das 4. Feld der zu verwendende Port (momentan noch nicht in Verwendung) über den dieses Email mit dieser Absendeadresse versendet wird.

Nun zur ACL:
das erste "deny" prüft ob die Verbindung auf Port 587 stattfindet und ob die Verbindung verschlüsselt ist. Wenn nein, wird das Email abgewiesen und eine Fehlermeldung dass eine verschlüsselte Verbindung notwendig ist ausgegeben.

Das zweite "deny" prüft, ob sich der User authentifiziert hat. Wenn nein, wird das Email abgewiesen und eine passende Fehlermeldung ausgegeben.

Das dritte deny prüft, ob der angemeldete User ($authenticated_id) die verwendete Absenderadresse verwenden darf.
Schlägt diese Prüfung fehl, gibts eine Fehlermeldung und das Email wird zurückgewiesen.
Wenn diese Prüfung ergibt, dass der User darf, geht das deny zum nächsten "acl-word" weiter.

accept wird erreicht, wenn keine der vorderen deny "anschlägt".

Das Email wird akzeptiert und in die Queue eingereiht.

Bei der Prüfung bekomme ich allerdings bei Openssl nach der Eingabe von RCPT TO:empfänger@isp.example folgende Fehlermeldung:

Code: Alles auswählen

RENEGOTIATING
139637096363200:error:140940F5:SSL routines:ssl3_read_bytes:unexpected record:../ssl/record/rec_layer_s3.c:1490:
Ich bin noch am weiterforschen. Denn ein paar Emails konnte ich so schon korrekt verschicken. Und bei unpassendem Usernamen oder nicht verschlüsselter Verbindung auf Port 587 oder ohne Authentifikation kommen die konfigurierten (in der ACL) Fehlermeldungen, so wie es sein soll.
Passen Absender und User zusammen, kommt nach dem "MAIL FROM:..." auch ein OK zurück.

lg scientific

PS: Die jeweils aktuelle Konfiguration ist unter https://github.com/xundeenergie/exim4-multiaccount zu finden.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [SOLVED] exim4 und acl

Beitrag von scientific » 09.05.2017 09:59:14

@TomL

Ich hab mittels openssl auf Port 587 sowohl gmail als auch gmx getestet.
Ich geb irgendeinen Absender beim Kommando MAIL FROM: an.
Gmail sendet das Mail. Ankommen tut es mit meiner gmail-Adresse im Envelope-From
Gmx verweigert die Annahme mit dem Hinweis, dass die Mailbox nicht existiert.

Also prüfen diese beiden Anbieter sehr wohl, bzw. führen ein rewrite aus.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten