Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c7:dovecot_2 [24.07.2014 13:12. ] – [LMTP-Einlieferungstests] django | centos:mail_c7:dovecot_2 [22.07.2019 14:41. ] (aktuell) – django | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Dovecot, Anbindung an einen Frontend-Mailserver (Postfix-SMTP-Server) ====== | ====== Dovecot, Anbindung an einen Frontend-Mailserver (Postfix-SMTP-Server) ====== | ||
+ | {{: | ||
+ | ====== 1. LMTP ====== | ||
In der Regel werden wir hinter unserem eigentlichen **SMTP**-Mailserver ein Backend System, eben unser Dovecot-Server, | In der Regel werden wir hinter unserem eigentlichen **SMTP**-Mailserver ein Backend System, eben unser Dovecot-Server, | ||
- | Egal ob nun unsere beiden Mailserverkomponenten auf getrennten Hosts oder auf einem Host laufen, der Konfigurationsaufwand ist dabei fast identisch. | + | Egal ob nun unsere beiden Mailserverkomponenten auf getrennten Hosts oder auf einem Host laufen, der Konfigurationsaufwand |
- | ===== Dovecot ===== | + | ===== Dovecot |
==== Konfiguration ==== | ==== Konfiguration ==== | ||
Zur Anbindung des **MUA**((**M**ail **U**ser **A**gent)) **Dovecot** an unseren **MTA**((**M**ail **T**ransport **A**gent)) **Postfix** nutzen wir das Protokoll **LMTP**. | Zur Anbindung des **MUA**((**M**ail **U**ser **A**gent)) **Dovecot** an unseren **MTA**((**M**ail **T**ransport **A**gent)) **Postfix** nutzen wir das Protokoll **LMTP**. | ||
Zeile 97: | Zeile 99: | ||
Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public**, dies entspricht in unserem Beispiel das Netzwerk-Interface **eth0** mit der IP **10.0.0.70** an. Als Source-IP geben wir die IP-Adresse unseres Postfix-Servers also die **10.0.0.80** an. Genug der Vorrede, mit nachfolgendem Befehl wird diese restriktive Regel angelegt. | Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public**, dies entspricht in unserem Beispiel das Netzwerk-Interface **eth0** mit der IP **10.0.0.70** an. Als Source-IP geben wir die IP-Adresse unseres Postfix-Servers also die **10.0.0.80** an. Genug der Vorrede, mit nachfolgendem Befehl wird diese restriktive Regel angelegt. | ||
- | # firewall-cmd --permanent --zone=public --add-rich-rule=" | + | # firewall-cmd --permanent --zone=public --add-rich-rule=" |
Zum Aktivieren brauchen wir nun nur einen reload des Firewall-Daemon vornehmen. | Zum Aktivieren brauchen wir nun nur einen reload des Firewall-Daemon vornehmen. | ||
Zeile 108: | Zeile 110: | ||
Chain IN_public_allow (1 references) | Chain IN_public_allow (1 references) | ||
pkts bytes target | pkts bytes target | ||
- | | + | |
... | ... | ||
Zeile 136: | Zeile 138: | ||
| | ||
- | ===== Postfix ===== | + | ===== Postfix |
Da unser Mailserver nicht nur für die Hauptdomäne **// | Da unser Mailserver nicht nur für die Hauptdomäne **// | ||
Zeile 305: | Zeile 307: | ||
=== automatische Pflege === | === automatische Pflege === | ||
- | <WRAP round important> | + | <WRAP round important> |
# tail -f / | # tail -f / | ||
< | < | ||
Zeile 345: | Zeile 347: | ||
===== LMTP-Einlieferungstests ===== | ===== LMTP-Einlieferungstests ===== | ||
Da nun alle Konfigurationen erfolgreich abgeschlossen sind, können wir uns nunmehr an den finalen Test unserer **LMTP**-Konfiguration wagen. | Da nun alle Konfigurationen erfolgreich abgeschlossen sind, können wir uns nunmehr an den finalen Test unserer **LMTP**-Konfiguration wagen. | ||
- | Auch hier verwenden wir den gewohnten Test via **telnet** von berechtigten SMTP-Host aus. Die Eingaben am testenden Client sind in der Farbe < | + | Auch hier verwenden wir den gewohnten Test via **telnet** von berechtigten SMTP-Host aus. Die Eingaben am testenden Client sind in der Farbe < |
< | < | ||
Zeile 352: | Zeile 354: | ||
Connected to 10.0.0.70. | Connected to 10.0.0.70. | ||
Escape character is ' | Escape character is ' | ||
- | <font style=" | + | <font style=" |
<font style=" | <font style=" | ||
- | <font style=" | + | <font style=" |
- | 250-8BITMIME | + | 250-8BITMIME |
- | 250-ENHANCEDSTATUSCODES | + | 250-ENHANCEDSTATUSCODES |
- | 250 PIPELINING</ | + | 250 PIPELINING</ |
<font style=" | <font style=" | ||
- | <font style=" | + | <font style=" |
<font style=" | <font style=" | ||
- | <font style=" | + | <font style=" |
<font style=" | <font style=" | ||
- | <font style=" | + | <font style=" |
<font style=" | <font style=" | ||
To: michael@nausch.org | To: michael@nausch.org | ||
Zeile 369: | Zeile 371: | ||
Date: 2014-07-23 23:42 | Date: 2014-07-23 23:42 | ||
- | Ahoi, | + | Ahoi, |
- | das ist eine Testmail, eingeliefert via telnet imap-server auf Port 24 | + | das ist eine Testmail, eingeliefert via telnet imap-server auf Port 24 |
| | ||
.</ | .</ | ||
- | <font style=" | + | <font style=" |
<font style=" | <font style=" | ||
- | <font style=" | + | <font style=" |
<font style=" | <font style=" | ||
</ | </ | ||
Zeile 441: | Zeile 443: | ||
Date: 2014-07-23 23:42 | Date: 2014-07-23 23:42 | ||
- | Ahoi, | + | Ahoi, |
- | das ist eine Testmail, eingeliefert via telnet imap-server auf Port 24 | + | das ist eine Testmail, eingeliefert via telnet imap-server auf Port 24 |
| | ||
</ | </ | ||
+ | |||
+ | |||
+ | ====== 2. SASL ====== | ||
+ | Damit unsere Mailbox-Inhaber auch von extern aus Ihre eMails bei unserem Postfix-Mailserver abliefern können, benötigen wir einen Mechanismus, | ||
+ | |||
+ | ===== Dovecot ===== | ||
+ | ==== Konfiguration ==== | ||
+ | Die Konfiguration auf Seiten des Dovecot-Servers ist denkbar einfach, ist die grundlegende Konfiguration ja schon in der Datei // | ||
+ | # vim / | ||
+ | |||
+ | <code bash>... | ||
+ | |||
+ | service auth { | ||
+ | # auth_socket_path points to this userdb socket by default. It's typically | ||
+ | # used by dovecot-lda, | ||
+ | # full permissions to this socket are able to get a list of all usernames and | ||
+ | # get the results of everyone' | ||
+ | # | ||
+ | # The default 0666 mode allows anyone to connect to the socket, but the | ||
+ | # userdb lookups will succeed only if the userdb returns an " | ||
+ | # matches the caller process' | ||
+ | # socket' | ||
+ | # | ||
+ | # To give the caller full permissions to lookup all users, set the mode to | ||
+ | # something else than 0666 and Dovecot lets the kernel enforce the | ||
+ | # permissions (e.g. 0777 allows everyone full permissions). | ||
+ | unix_listener auth-userdb { | ||
+ | #mode = 0666 | ||
+ | #user = | ||
+ | #group = | ||
+ | } | ||
+ | |||
+ | # Postfix smtp-auth | ||
+ | # | ||
+ | # mode = 0666 | ||
+ | #} | ||
+ | |||
+ | # Auth process is run as this user. | ||
+ | #user = $default_internal_user | ||
+ | |||
+ | # Django : 2014-05-23 | ||
+ | # default: unset | ||
+ | # Authentifizierungsport 3659 für Postfix Frontend-Mailserver definiert | ||
+ | inet_listener { | ||
+ | | ||
+ | port = 3659 | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Zum Aktivieren unserer Einstellungsänderungen führen wir einen **Reload** unseres Dovecot-Daemon durch. | ||
+ | # systemctl reload dovecot | ||
+ | |||
+ | Fragen wir nun die offenen Ports von Dovecot ab, finden wir auch unseren SASL-Port **3569**. | ||
+ | # netstat -tulpen | grep dovecot | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== Paketfilter / Firewall ==== | ||
+ | Damit nun nicht jeder fremde Host sich mit dem **SASL**-Port verbinden kann, regeln wir den Zugriff über eine Firewall-Regel so, dass __**nur**__ der vorgeschaltete **MTA** Postfix-Mailserver sich mit unserem **Dovecot-Server** auf Port **3569** verbinden kann. | ||
+ | |||
+ | Unter **CentOS 7** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbiundungen kurz getrennt werden. Sondern unsere Änderungen können **// | ||
+ | |||
+ | In unserem Konfigurationsbeispiel hat unser Postfix-Server die IP-Adresse 10.0.0.80 und unser Dovecot-Server die 10.0.0.70. Wir brauchen also eine Firewall-Definition, | ||
+ | |||
+ | Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public**, dies entspricht in unserem Beispiel das Netzwerk-Interface **eth0** mit der IP **10.0.0.70** an. Als Source-IP geben wir die IP-Adresse unseres Postfix-Servers also die **10.0.0.80** an. Genug der Vorrede, mit nachfolgendem Befehl wird diese restriktive Regel angelegt. | ||
+ | # firewall-cmd --permanent --zone=public --add-rich-rule=" | ||
+ | |||
+ | Zum Aktivieren brauchen wir nun nur einen reload des Firewall-Daemon vornehmen. | ||
+ | # firewall-cmd --reload | ||
+ | |||
+ | Fragen wir nun den Regelsatz unserer **iptables**-basieten Firewall ab, finden wir in der Chain **IN_public_allow** unsere aktive Regel. | ||
+ | # iptables -nvL IN_public_allow | ||
+ | |||
+ | < | ||
+ | pkts bytes target | ||
+ | 0 0 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | </ | ||
+ | ===== Postfix ===== | ||
+ | Auch der Konfigurationsaufwand auf Seiten von Postfix hält sich in überschaubaren Grenzen. | ||
+ | ==== Konfiguration ==== | ||
+ | Zum Aktivieren der SASL-Autentifikation gegen unseren Dovecot-Server tragen wir die folgenden Zeilen in der Postfix-konfigurationsdatei // | ||
+ | # vim / | ||
+ | <code bash>... | ||
+ | |||
+ | # Django : 2012-10-09 | ||
+ | # SMTP-Auth (SASL) | ||
+ | # Enable SASL authentication in the Postfix SMTP server. By default, the Postfix SMTP server | ||
+ | # does not use authentication. | ||
+ | smtpd_sasl_auth_enable = yes | ||
+ | # The SASL plug-in type that the Postfix SMTP server should use for authentication. The available | ||
+ | # types are and dovecot. | ||
+ | smtpd_sasl_type = dovecot | ||
+ | # Implementation-specific information that the Postfix SMTP server passes through to the SASL | ||
+ | # plug-in implementation that is selected with smtpd_sasl_type. Typically this specifies the | ||
+ | # name of a configuration file or rendezvous point. | ||
+ | smtpd_sasl_path = inet: | ||
+ | # Postfix SMTP server SASL security options; as of Postfix 2.3 the list of available features | ||
+ | # depends on the SASL server implementation that is selected with smtpd_sasl_type. The following | ||
+ | # security features are defined for the cyrus server SASL implementation: | ||
+ | # Restrict what authentication mechanisms the Postfix SMTP server will offer to the client. | ||
+ | # The list of available authentication mechanisms is system dependent. Specify zero or more of | ||
+ | # the following: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # Only allow methods that support forward secrecy (Dovecot only). | ||
+ | # | ||
+ | # Only allow methods that provide mutual authentication | ||
+ | # (not available with Cyrus SASL version 1). | ||
+ | # | ||
+ | # By default, the Postfix SMTP server accepts plaintext passwords but not anonymous logins. | ||
+ | # | ||
+ | # Warning: it appears that clients try authentication methods in the order as advertised by the | ||
+ | # server (e.g., PLAIN ANONYMOUS CRAM-MD5) which means that if you disable plaintext passwords, | ||
+ | # clients will log in anonymously, | ||
+ | # disable plaintext logins, disable anonymous logins too. Postfix treats anonymous login as no | ||
+ | # authentication. | ||
+ | smtpd_sasl_security_options = noanonymous | ||
+ | # The name of the Postfix SMTP server' | ||
+ | # By default, the local authentication realm name is the null string. | ||
+ | smtpd_sasl_local_domain = $mydomain | ||
+ | # The SASL authentication security options that the Postfix SMTP server uses for TLS encrypted | ||
+ | # SMTP sessions. | ||
+ | smtpd_sasl_tls_security_options = $smtpd_sasl_security_options | ||
+ | # Enable inter-operability with remote SMTP clients that implement an obsolete version of the | ||
+ | # AUTH command (RFC 4954). Examples of such clients are MicroSoft Outlook Express version 4 | ||
+ | # and MicroSoft Exchange version 5.0. | ||
+ | broken_sasl_auth_clients = yes | ||
+ | |||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Ein Restart unseres Postfix-Servers aktiviert unsere Konfigurationsanpassungen. | ||
+ | # systemctl restart postfix | ||
+ | |||
+ | |||
+ | ===== SASL-Anmeldetest ===== | ||
+ | Melden wir uns nun via **telnet** auf Port **25** bei unserem Postfix-Server an werden uns nach Eingabe des **EHLO** die Authentifizierungsmöglichkeiten (gegen unseren Dovecot-SASL-Port 3569) angezeigt. | ||
+ | |||
+ | Bei Test vsind die Eingaben am testenden Client in der Farbe < | ||
+ | |||
+ | Wir bauen also eine Verbindung zu unserem Postfix-Server zum **SMTP** **25** auf und setzen dann den Befehl **EHLO** ab, damit uns der SMTP-server seine Authentifizierungsoptionen anzeigt. | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | Connected to 10.0.0.80. | ||
+ | Escape character is ' | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | 250-PIPELINING | ||
+ | 250-SIZE 52428800 | ||
+ | 250-ETRN | ||
+ | 250-STARTTLS | ||
+ | 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 | ||
+ | 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 | ||
+ | 250-ENHANCEDSTATUSCODES | ||
+ | 250 8BITMIME</ | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | Melden wir uns nun über unseren Mailclient an, typischerweise passiert das jeweils vor dem Versand von ausgehenden Nachrichten, | ||
+ | # less / | ||
+ | |||
+ | Aug 10 10:56:29 vml000080 postfix/ | ||
+ | |||
+ | Auf seiten unseres Dovecot-Servers passiert natürlich wesentlich mehr, da ja dort die Authentifizierungsanfrage des Postfix-Servers angenommen und bearbeitet wird. Im Detail bedeutet dies, dass der Dovecot-Server eine **passdb-Anfrage** gegen unsere MySQL-Datenbank macht und das Ergebnis **OK** an den postfix-Frontend-Server zurückmeldet. | ||
+ | # less / | ||
+ | |||
+ | <code bash>Aug 10 10:56:29 vml000070 dovecot: auth: Debug: auth client connected (pid=0) | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth: Debug: client in: AUTH# | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth: Debug: client passdb out: CONT# | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth: Debug: client in: CONT# | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth: Debug: client passdb out: CONT# | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth: Debug: client in: CONT# | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth: Debug: sql(michael@nausch.org, | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth-worker(6830): | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth-worker(6830): | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth-worker(6830): | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth-worker(6830): | ||
+ | Aug 10 10:56:29 vml000070 dovecot: auth: Debug: client passdb out: OK# | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
====== Links ====== | ====== Links ====== | ||
Zeile 452: | Zeile 669: | ||
* **[[http:// | * **[[http:// | ||
- | ~~DISCUSSION~~ | + | |
- | ~~AUTOTWEET: | + |