Zum Inhalt springen

Postfix/Authentifizierug: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „Kategorie:(.*):(.*)“ durch „Kategorie:/$1/$2“
K Textersetzung - „ Postfix-“ durch „ Postfix-“
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:


  '''Anmerkung'''  
  '''Anmerkung'''  
  In den neuen Versionen von Postfix wurde die Konfiguration grundlegend verändert!  
  In den neuen Versionen von [[Postfix]] wurde die Konfiguration grundlegend verändert!  
  Das sorgt dafür, dass die Vorgehensweise sich auch grundlegend verändert hat!  
  Das sorgt dafür, dass die Vorgehensweise sich auch grundlegend verändert hat!  


Um einen SMTP-Dienst auch außerhalb des sicheren LANs anbieten zu können, sollte man eine Authentifizierung durch die Clients einfordern, damit man kein ''offenes Relay'' für Spammer o.ä. anbietet.  
Um einen SMTP-Dienst auch außerhalb des sicheren LANs anbieten zu können, sollte man eine Authentifizierung durch die Clients einfordern, damit man kein ''offenes Relay'' für Spammer o. .ä.  anbietet.  
Dafür wird das ''Simple Authentication and Security Layer (SASL)''-Framework verwendet, welches z.B. über das Cyrus-Sasl-Projekt realisiert wird.
Dafür wird das ''Simple Authentication and Security Layer (SASL)''-Framework verwendet, welches beispielsweise über das Cyrus-Sasl-Projekt realisiert wird.


  '''Achtung'''
  '''Achtung'''
Zeile 21: Zeile 21:


Cyrus SASL bietet mehrere Arten, Authentifizierungsdienste bereitzustellen.  
Cyrus SASL bietet mehrere Arten, Authentifizierungsdienste bereitzustellen.  
* Da man z.B. mit ''auxprop'' nicht gegen die normalen Shadow-Passwörter des Linuxsystems authentifizieren kann, wird hier die Einrichtung mit ''saslauthd'' beschrieben.
* Da man beispielsweise mit ''auxprop'' nicht gegen die normalen Shadow-Passwörter des Linuxsystems authentifizieren kann, wird hier die Einrichtung mit ''saslauthd'' beschrieben.
* Zunächst muss die Konfigurationsdatei '''/etc/default/saslauthd''' angepasst [https://wiki.ubuntuusers.de/Postfix/Erweiterte_Konfiguration/#source-3 [3]] und folgendes eingetragen werden:
* Zunächst muss die Konfigurationsdatei '''/etc/default/saslauthd''' angepasst [https://wiki.ubuntuusers.de/Postfix/Erweiterte_Konfiguration/#source-3 [3]] und folgendes eingetragen werden:
  START=yes
  START=yes
Zeile 37: Zeile 37:
   
   
  smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_invalid_hostname, reject_unauth_pipelining, reject_non_fqdn_hostname
  smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_invalid_hostname, reject_unauth_pipelining, reject_non_fqdn_hostname
  # Postfix >= 2.3, ab Edgy  
  # [[Postfix]] >= 2.3, ab Edgy  
  smtpd_sasl_path = smtpd
  smtpd_sasl_path = smtpd
   
   
  broken_sasl_auth_clients = yes
  broken_sasl_auth_clients = yes


Die letzte Zeile ist notwendig, weil sonst ein paar ältere Versionen von Microsoft-Software nicht korrekt funktioniert. Sollte es später beim Anmelden Probleme geben, sollte man die Kommentare <tt> # Postfix >= 2.3</tt> entfernen.
Die letzte Zeile ist notwendig, weil sonst ein paar ältere Versionen von Microsoft-Software nicht korrekt funktioniert. Sollte es später beim Anmelden Probleme geben, sollte man die Kommentare <tt> # [[Postfix]] >= 2.3</tt> entfernen.


=== Gruppenberechtigungen für sasl setzen ===
=== Gruppenberechtigungen für sasl setzen ===
Zeile 49: Zeile 49:


=== Sicherheitseinstellungen anpassen ===
=== Sicherheitseinstellungen anpassen ===
Jetzt könnte eigentlich alles funktionieren, wenn es nicht noch ein Problem gäbe, nämlich die Sicherheitseinstellungen von Postfix. Postfix sperrt nämlich den '''smtpd''' standardmäßig in eine [https://wiki.ubuntuusers.de/chroot/ chroot]-Umgebung, wo er den Sasl-Socket nicht finden kann. Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.
Jetzt könnte eigentlich alles funktionieren, wenn es nicht noch ein Problem gäbe, nämlich die Sicherheitseinstellungen von Postfix. [[Postfix]] sperrt nämlich den '''smtpd''' standardmäßig in eine [https://wiki.ubuntuusers.de/chroot/ chroot]-Umgebung, wo er den Sasl-Socket nicht finden kann. Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.


==== Methode 1: chroot abschalten ====
==== Methode 1: chroot abschalten ====
Das geht am einfachsten und ist wahrscheinlich auch am praktischsten, wenn noch andere Dienste (wie z.B. ein IMAP-Server) den '''saslauthd''' nutzen wollen. Dazu muss einfach nur in der Datei '''/etc/postfix/master.cf''' in der ''smtpd''-Zeile ein '''n''' in die ''chroot''-Spalte eingetragen werden:
Das geht am einfachsten und ist wahrscheinlich auch am praktischsten, wenn noch andere Dienste (wie beispielsweise ein IMAP-Server) den '''saslauthd''' nutzen wollen. Dazu muss einfach nur in der Datei '''/etc/postfix/master.cf''' in der ''smtpd''-Zeile ein '''n''' in die ''chroot''-Spalte eingetragen werden:


  # service type   private unpriv chroot wakeup maxproc command + args
  # service type private unpriv chroot wakeup maxproc command + args
  #               (yes)   (yes)   (yes)   (never) (100)
  #       (yes) (yes) (yes) (never) (100)
  # ==========================================================================  
  # ==========================================================================  
  smtp     inet n       -       n       -       -       smtpd
  smtp   inet n   -   n   -   -   smtpd
  smtps     inet n       -       n       -       -       smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
  smtps   inet n   -   n   -   -   smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes


==== Methode 2: Socket in den chroot legen ====
==== Methode 2: Socket in den chroot legen ====
Da Postfix seinen Prozess nach '''/var/spool/postfix''' ''chrooted'', sucht dieser dann den Saslauthd-Socket in '''/var/spool/postfix/var/run/saslauthd/'''. Man muss also dem saslauthd befehlen, den Socket dort zu eröffnen, indem man in der oben erwähnten Datei /etc/default/saslauthd den Eintrag ändert:
Da [[Postfix]] seinen Prozess nach '''/var/spool/postfix''' ''chrooted'', sucht dieser dann den Saslauthd-Socket in '''/var/spool/postfix/var/run/saslauthd/'''. Man muss also dem saslauthd befehlen, den Socket dort zu eröffnen, indem man in der oben erwähnten Datei /etc/default/saslauthd den Eintrag ändert:


  OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
  OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"


=== Aktivieren ===
=== Aktivieren ===
Abschließend müssen Saslauthd und Postfix noch neu gestartet werden [https://wiki.ubuntuusers.de/Postfix/Erweiterte_Konfiguration/#source-2 [2]]:
Abschließend müssen Saslauthd und [[Postfix]] noch neu gestartet werden [https://wiki.ubuntuusers.de/Postfix/Erweiterte_Konfiguration/#source-2 [2]]:


  sudo /etc/init.d/saslauthd restart
  sudo /etc/init.d/saslauthd restart
Zeile 74: Zeile 74:
Man kann testen, ob alles klappt, indem man mit dem Telnet-Client direkt mit dem Server kommuniziert. Dafür muss man aber erstmal einen String aus den Zugangsdaten zur späteren Verwendung nach [https://de.wikipedia.org/wiki/Base64 base64] konvertieren. Im folgenden Beispiel lautet der Benutzername "test" und das Passwort "testtest" und der String muss genau so (mit doppeltem Namen und \0 als Trennzeichen) eingegeben werden:
Man kann testen, ob alles klappt, indem man mit dem Telnet-Client direkt mit dem Server kommuniziert. Dafür muss man aber erstmal einen String aus den Zugangsdaten zur späteren Verwendung nach [https://de.wikipedia.org/wiki/Base64 base64] konvertieren. Im folgenden Beispiel lautet der Benutzername "test" und das Passwort "testtest" und der String muss genau so (mit doppeltem Namen und \0 als Trennzeichen) eingegeben werden:


  $ perl -MMIME::Base64 -e     'print encode_base64("test\0test\0testtest");'
  $ perl -MMIME::Base64 -e   'print encode_base64("test\0test\0testtest");'
  dGVzdAB0ZXN0AHRlc3R0ZXN0
  dGVzdAB0ZXN0AHRlc3R0ZXN0
  $ telnet dapper-lamp 25
  $ telnet dapper-lamp 25
Zeile 80: Zeile 80:
  Connected to dapper-lamp.otze.
  Connected to dapper-lamp.otze.
  Escape character is '^]'.
  Escape character is '^]'.
  220 dapper-lamp.otze ESMTP Postfix (Ubuntu)
  220 dapper-lamp.otze ESMTP [[Postfix]] (Ubuntu)
  ehlo test
  ehlo test
  250-dapper-lamp.otze
  250-dapper-lamp.otze
Zeile 97: Zeile 97:


== Sender-abhängige Authentifizierung ==
== Sender-abhängige Authentifizierung ==
Mit fortschreitender Verbreitung von spam-bekämpfenden Techniken wie [https://de.wikipedia.org/wiki/Sender%20Policy%20Framework Sender Policy Framework], mit denen verhindert werden soll, dass Emails von anderen Servern versendet werden, als für ihre Domain zuständig sind (Absenderfälschung), kann es leider passieren, dass das normale Versenden über einen [https://wiki.ubuntuusers.de/Postfix/#Authentifizierung-am-Smarthost Smarthost] nicht mehr zuverlässig funktioniert. In diesem Fall muss Postfix die Mails je nach Absender über unterschiedliche SMTP-Server mit individuellen Authentifizierungsdaten verschicken.
Mit fortschreitender Verbreitung von spam-bekämpfenden Techniken wie [https://de.wikipedia.org/wiki/Sender%20Policy%20Framework Sender Policy Framework], mit denen verhindert werden soll, dass Emails von anderen Servern versendet werden, als für ihre Domain zuständig sind (Absenderfälschung), kann es leider passieren, dass das normale Versenden über einen [https://wiki.ubuntuusers.de/Postfix/#Authentifizierung-am-Smarthost Smarthost] nicht mehr zuverlässig funktioniert. In diesem Fall muss [[Postfix]] die Mails je nach Absender über unterschiedliche SMTP-Server mit individuellen Authentifizierungsdaten verschicken.


Der Nachteil gegenüber der Verwendung eines einzelnen Smarthosts ist, dass die Benutzernamen und Passwörter aller Benutzer auf dem Server hinterlegt werden müssen.  
Der Nachteil gegenüber der Verwendung eines einzelnen Smarthosts ist, dass die Benutzernamen und Passwörter aller Benutzer auf dem Server hinterlegt werden müssen.  
Zeile 114: Zeile 114:
  sender_canonical_maps = hash:/etc/postfix/sender_canonical
  sender_canonical_maps = hash:/etc/postfix/sender_canonical


Dann müssen die drei dort referenzierten Postfix-Maps erstellt werden. Ein Beispiel mit drei Benutzern:* '''/etc/postfix/sender_canonical''' (<tt>LokalerName RealeAbsenderAdresse</tt>):
Dann müssen die drei dort referenzierten [[Postfix]]-Maps erstellt werden. Ein Beispiel mit drei Benutzern:* '''/etc/postfix/sender_canonical''' (<tt>LokalerName RealeAbsenderAdresse</tt>):


  erna erna@provider.de
  erna erna@provider.de
Zeile 128: Zeile 128:
  paul@paul.com paul:paulspassword
  paul@paul.com paul:paulspassword


Nun müssen diese Maps noch in das Postfix-Datenbankformat konvertiert werden:  
Nun müssen diese Maps noch in das [[Postfix]]-Datenbankformat konvertiert werden:  


  sudo postmap /etc/postfix/sender_canonical
  sudo postmap /etc/postfix/sender_canonical
Zeile 134: Zeile 134:
  sudo postmap /etc/postfix/sasl_password  
  sudo postmap /etc/postfix/sasl_password  


Und natürlich muss Postfix seine Konfiguration neu einlesen:  
Und natürlich muss [[Postfix]] seine Konfiguration neu einlesen:  


  sudo /etc/init.d/postfix restart
  sudo /etc/init.d/postfix restart




[[Kategorie:/Postfix/Sicherheit]]
[[Kategorie:Postfix/Sicherheit]]

Aktuelle Version vom 4. Juli 2026, 13:11 Uhr

SASL-Authentifizierung als Server

Fehlerhafte Anleitung 
Diese Anleitung ist fehlerhaft. 
Wenn du weißt, wie du sie ausbessern kannst, nimm dir bitte die Zeit und bessere sie aus. 


Anmerkung 
In den neuen Versionen von Postfix wurde die Konfiguration grundlegend verändert! 
Das sorgt dafür, dass die Vorgehensweise sich auch grundlegend verändert hat! 

Um einen SMTP-Dienst auch außerhalb des sicheren LANs anbieten zu können, sollte man eine Authentifizierung durch die Clients einfordern, damit man kein offenes Relay für Spammer o. .ä.  anbietet. Dafür wird das Simple Authentication and Security Layer (SASL)-Framework verwendet, welches beispielsweise über das Cyrus-Sasl-Projekt realisiert wird.

Achtung
Bei dieser Installation werden Benutzerpasswörter im Klartext übertragen. Man sollte also zusehen, für die Verbindung SSL-/TLS-Kryptografie zu verwenden.

Hierfür müssen folgende Pakete installiert werden [1]:

  • sasl2-bin
  • libsasl2-2
  • libsasl2-modules

Cyrus SASL bietet mehrere Arten, Authentifizierungsdienste bereitzustellen.

  • Da man beispielsweise mit auxprop nicht gegen die normalen Shadow-Passwörter des Linuxsystems authentifizieren kann, wird hier die Einrichtung mit saslauthd beschrieben.
  • Zunächst muss die Konfigurationsdatei /etc/default/saslauthd angepasst [3] und folgendes eingetragen werden:
START=yes
MECHANISMS="shadow"

Dann muss eine neue Datei /etc/postfix/sasl/smtpd.conf erstellt werden:

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
saslauthd_path: /var/run/saslauthd/mux

Und die /etc/postfix/main.cf muss natürlich auch noch angepasst werden:

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = 
permit_mynetworks permit_sasl_authenticated reject_unauth_destination

smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_invalid_hostname, reject_unauth_pipelining, reject_non_fqdn_hostname
# Postfix >= 2.3, ab Edgy 
smtpd_sasl_path = smtpd

broken_sasl_auth_clients = yes

Die letzte Zeile ist notwendig, weil sonst ein paar ältere Versionen von Microsoft-Software nicht korrekt funktioniert. Sollte es später beim Anmelden Probleme geben, sollte man die Kommentare # Postfix >= 2.3 entfernen.

Gruppenberechtigungen für sasl setzen

Standardmäßig läuft der sasl Dienst mit eigenen Rechten, auf die postfix keinen Zugriff hat. Daher ist es nötig, den user "postfix" der Gruppe "sasl" hinzuzufügen:

# adduser postfix sasl 

Sicherheitseinstellungen anpassen

Jetzt könnte eigentlich alles funktionieren, wenn es nicht noch ein Problem gäbe, nämlich die Sicherheitseinstellungen von Postfix. Postfix sperrt nämlich den smtpd standardmäßig in eine chroot-Umgebung, wo er den Sasl-Socket nicht finden kann. Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.

Methode 1: chroot abschalten

Das geht am einfachsten und ist wahrscheinlich auch am praktischsten, wenn noch andere Dienste (wie beispielsweise ein IMAP-Server) den saslauthd nutzen wollen. Dazu muss einfach nur in der Datei /etc/postfix/master.cf in der smtpd-Zeile ein n in die chroot-Spalte eingetragen werden:

# service type  private unpriv chroot wakeup maxproc command + args
#        (yes)  (yes)  (yes)  (never) (100)
# ========================================================================== 
smtp   inet n    -    n    -    -    smtpd
smtps   inet n    -    n    -    -    smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

Methode 2: Socket in den chroot legen

Da Postfix seinen Prozess nach /var/spool/postfix chrooted, sucht dieser dann den Saslauthd-Socket in /var/spool/postfix/var/run/saslauthd/. Man muss also dem saslauthd befehlen, den Socket dort zu eröffnen, indem man in der oben erwähnten Datei /etc/default/saslauthd den Eintrag ändert:

OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Aktivieren

Abschließend müssen Saslauthd und Postfix noch neu gestartet werden [2]:

sudo /etc/init.d/saslauthd restart
sudo /etc/init.d/postfix restart 

Testen

Man kann testen, ob alles klappt, indem man mit dem Telnet-Client direkt mit dem Server kommuniziert. Dafür muss man aber erstmal einen String aus den Zugangsdaten zur späteren Verwendung nach base64 konvertieren. Im folgenden Beispiel lautet der Benutzername "test" und das Passwort "testtest" und der String muss genau so (mit doppeltem Namen und \0 als Trennzeichen) eingegeben werden:

$ perl -MMIME::Base64 -e   'print encode_base64("test\0test\0testtest");'
dGVzdAB0ZXN0AHRlc3R0ZXN0
$ telnet dapper-lamp 25
Trying 192.168.4.55...
Connected to dapper-lamp.otze.
Escape character is '^]'.
220 dapper-lamp.otze ESMTP Postfix (Ubuntu)
ehlo test
250-dapper-lamp.otze
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250 8BITMIME
auth plain dGVzdAB0ZXN0AHRlc3R0ZXN0
235 Authentication successful
quit
221 Bye
Connection closed by foreign host.

Sender-abhängige Authentifizierung

Mit fortschreitender Verbreitung von spam-bekämpfenden Techniken wie Sender Policy Framework, mit denen verhindert werden soll, dass Emails von anderen Servern versendet werden, als für ihre Domain zuständig sind (Absenderfälschung), kann es leider passieren, dass das normale Versenden über einen Smarthost nicht mehr zuverlässig funktioniert. In diesem Fall muss Postfix die Mails je nach Absender über unterschiedliche SMTP-Server mit individuellen Authentifizierungsdaten verschicken.

Der Nachteil gegenüber der Verwendung eines einzelnen Smarthosts ist, dass die Benutzernamen und Passwörter aller Benutzer auf dem Server hinterlegt werden müssen.

Hinweis
Diese Konfigurationsmöglichkeit existiert erst ab Postfix 2.3. Benutzer von Ubuntu 6.06 LTS Dapper Drake müssen sich daher aus dem Backports-Repository aktuellere Pakete besorgen. 

Als erstes muss die Datei /etc/postfix/main.cf folgendermaßen ergänzt werden:

smtp_sender_dependent_authentication = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noplaintext noanonymous
smtp_connection_cache_on_demand = no
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_dependent
sender_canonical_maps = hash:/etc/postfix/sender_canonical

Dann müssen die drei dort referenzierten Postfix-Maps erstellt werden. Ein Beispiel mit drei Benutzern:* /etc/postfix/sender_canonical (LokalerName RealeAbsenderAdresse):

erna erna@provider.de
otto otto@otto.de
paul paul@paul.com* /etc/postfix/sender_dependent (Absenderadresse SMTP-Server):
erna@provider.de mail.provider.de
otto@otto.de smtp.provider.com
paul@paul.com smtp.provider.com* /etc/postfix/sasl_password (Absenderadresse Loginname:Passwort):
erna@provider.de erna@provider.de:ernaspassword
otto@otto.de otto:ottospassword
paul@paul.com paul:paulspassword

Nun müssen diese Maps noch in das Postfix-Datenbankformat konvertiert werden:

sudo postmap /etc/postfix/sender_canonical
sudo postmap /etc/postfix/sender_dependent
sudo postmap /etc/postfix/sasl_password 

Und natürlich muss Postfix seine Konfiguration neu einlesen:

sudo /etc/init.d/postfix restart