Postfix: Wie verwende ich eine einfache Datei für die SASL-Authentifizierung?

8

Ich möchte Postfix auf einem Debian VPS ausführen, um E-Mails von meiner Anwendung aus zu senden. Die Anwendung (die auf anderen VPS ausgeführt wird) stellt über SMTP eine Verbindung zu Postfix her. Postfix muss eingehende E-Mails nicht verarbeiten. Es geht nur darum, die ausgehenden Nachrichten zu senden.

Um zu verhindern, dass es sich um ein offenes Relay handelt, sollte die SASL-Authentifizierung verwendet werden. Ich möchte jedoch nicht Dovecot oder MySQL für die SASL-Authentifizierung ausführen.

Wie kann ich die SASL-Authentifizierung mithilfe einer einfachen Datei (mit Benutzernamen und Kennwörtern) einrichten?

Ich habe bereits eine ähnliche Frage gefunden ; Dort wurden jedoch keine zufriedenstellenden Antworten gegeben.

Jonathan
quelle
Verwenden Sie eine Firewall, um nur die IP-Adressen des anderen VPS zu verbinden. Darüber hinaus können Sie die Variable mynetworks in main.cf festlegen, um Postfix darauf aufmerksam zu machen, auch wenn die Firewall ausfällt. Wenn Sie SASL wirklich möchten, lesen Sie die mit postfix gelieferte SASL_README und richten Sie SASL so ein, dass / etc / sasldb als "Datenbank" verwendet wird. Sollte sofort funktionieren. saslpasswd fügt die Datei hinzu / entfernt / ändert sie.
AndreasM

Antworten:

14

Postfix unterstützt derzeit nur zwei SASL-Authentifizierungsmethoden. Eines davon ist Dovecot, das Sie nicht wollen. Der andere ist Cyrus, der ungefähr so ​​nah an dem ist, was Sie wollen, ohne Postfix neu zu schreiben. Es wird zwar ein separater Authentifizierungsdämon ( saslauthd) ausgeführt, die Authentifizierungsdatei kann jedoch leicht bearbeitet und aktualisiert werden.

Die Grundlagen zur Verwendung von Cyrus SASL finden Sie auf der Postfix-Dokumentationsseite. Hier finden Sie eine kurze Beschreibung. Bitte schauen Sie auf den Link, wenn etwas in irgendeiner Weise verwirrend ist!

Beginnen Sie mit der Installation von Cyrus SASL mit dem Plugin sasldb. (Die Vorgehensweise bleibt dem Leser als Übung überlassen. Vermutlich befindet sich in dem von Ihrer Unix-Marke verwendeten Paketsystem ein Paket.) Da die Kommunikation zwischen Postfix und SASL über einen Unix-Domain-Socket erfolgt, möchten Sie dies möglicherweise Fügen Sie der SASL-Gruppe Postfix hinzu, und stellen Sie sicher, dass diese Gruppe über Lese- und Ausführungsberechtigungen für das Verzeichnis verfügt /var/run/saslauthd.

Konfigurieren Sie SASL

Konfigurieren Sie SASL für die Verwendung von sasldb, indem Sie /etc/sasl2/smtpd.conf bearbeiten:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM

Das sasldb-Plugin bedeutet, dass sasl eine Berkeley DB-Datei für Benutzernamen und Passwörter verwendet. Sie fügen Benutzer mit dem Befehl hinzu saslpasswd2:

$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):

Beachten Sie, dass Sie eine Domain zusammen mit dem Benutzernamen angeben und der Benutzer bei der Authentifizierung "[email protected]" und nicht nur "username" verwenden muss.

Sie können überprüfen, welche Benutzer eingegeben wurden, indem Sie ausführen sasldblistusers2.

Starten Sie saslauthd und überprüfen Sie, ob die Authentifizierung funktioniert

testsaslauthd -u [email protected] -p password

Konfigurieren Sie Postfix

Sobald dies erledigt ist, weisen Sie Postfix an, SASL zu verwenden, und Cyrus mitzuteilen, dass es sich um SMTP handelt, das authentifiziert wird, indem Sie /etc/postfix/main.cf bearbeiten, um es zu enthalten

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Laden Sie dann Postfix neu, und Sie sollten eingestellt sein.

Jenny D.
quelle
Vielen Dank für Ihre ausführliche Antwort! Ich habe alle Schritte befolgt und alles scheint gut zu funktionieren. sasldblistusers2Gibt die Liste der Benutzer, die ich hinzugefügt habe, korrekt aus. Bei der Aufführung testsaslauthderhalte ich jedoch folgendes Ergebnis : 0: NO "authentication failed". Haben Sie eine Idee, wie ich das beheben könnte? Dies ist von meinem /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan
Das bedeutet, dass saslauthd versucht, PAM anstelle von sasldb zu verwenden. Über welche Befehlszeile wurde es gestartet?
Jenny D
Ich habe testsaslauthd verwendet (wie in Ihrer ursprünglichen Antwort beschrieben) und auch versucht -s smtpd, daran anzuhängen . Wenn ich gesetzt MECHANISMS="sasldb"in /etc/default/saslauthdund Neustart saslauthd, erhalte ich das gleiche Ergebnis von testsaslauthd. Das Authentifizierungsprotokoll zeigt eine andere Nachricht:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
Jonathan
2
Hm, testsaslauthd arbeitet , wenn ich den Benutzernamen und Domänenteil separat angeben, wie folgt aus : testsaslauthd -u username -r example.com -p XXXRenditen 0: OK "Success.". Jetzt werde ich prüfen, ob Postfix dies umgehen kann ...
Jonathan
Wenn Sie verwenden, werden -s smtpdSie dafür sorgen, dass PAM anstelle von sasldb verwendet wird. Tun Sie das also nicht ...
Jenny D,
1

Um zu verhindern, dass es sich um ein offenes Relay handelt, sollte die SASL-Authentifizierung verwendet werden.

SASL ist nur eine von zahlreichen Möglichkeiten, dies zu verhindern. Eine andere Möglichkeit wäre, die IP-Adressen, die Sie auf den anderen VPS verwenden, auf die Whitelist zu setzen oder TLS-Client-Zertifikate zu verlangen (dies kann als der sicherste Weg bezeichnet werden).

Richten Sie einfach eine signierende Zertifizierungsstelle auf dem Postfix-Computer ein und signieren Sie ein Zertifikat pro VPS, das Sie per E-Mail senden möchten.
Fordern Sie dann eine vollständige Überprüfung des Client-Zertifikats für alle gesendeten E-Mails an. Deaktivieren Sie alle anderen Übermittlungsmethoden.

Was Sie fragen, ist nicht möglich, da Postfix SASL nicht direkt unterstützt.

adaptr
quelle
1

Nur ein paar Dinge klären,

Erstellen eines Kontos in sasldb:

% saslpasswd2 -c -u fqdn username

Testen der Authentifizierung:

% testsaslauthd -u username -p password

(Hinweis: Dem Benutzernamen folgt nicht der fqdn)

Ich möchte auch hinzufügen, dass ein Root-Konto erstellt wird

% saslpasswd2 -c -u example.com root

lässt Sie nicht authentifizieren,

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

Dies ist jedoch kein Fehler. Es ist nur ein Sicherheitsmerkmal.

Saurabh
quelle
0

Wenn Sie eingehende E-Mails nicht bearbeiten müssen, kümmern Sie sich nicht um die Authentifizierung. Blockieren Sie einfach eingehenden Datenverkehr mit einer Firewall und / oder beschränken Sie ihn nur auf localhost.

 inet_interfaces = 127.0.0.1

Kein offenes Relay-Problem mehr, und Sie vermeiden es, Dinge für Anwendungen zu komplizieren, die E-Mails über Postfix senden müssen.

mc0e
quelle
Danke für die Antwort. Die Anwendung wird auf anderen VPS ausgeführt, sodass Postfix die E-Mail von anderen Hosts als localhost empfängt.
Jonathan
Können Sie die IPs der erwarteten Verbindungen definieren und entweder in der Postfix-Konfiguration oder in einer Firewall-Konfiguration auflisten? Zum Beispiel könnten sie alle in einem einzigen Netzblock oder in einem Satz von IPs oder Blöcken sein, die klein genug sind, um sie einfach aufzulisten. Alternativ können Sie ein privates Netzwerk zwischen Ihren virtuellen Hosts verwenden.
mc0e