1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Elektropost senden

Postfix empfängt und sendet Nachrichten via SMTP. Sowohl Clients als auch andere Server kommunizieren möglichst verschlüsselt via TLS und verifizieren das Zertifikat via DANE. Benutzer authentifizieren sich via SASL. Eingehende Nachrichten werden vom Rspamd als Ham oder Spam klassifiziert und via LMTP an Dovecot ausgeliefert.

Pakete installieren

Zusätzlich zum Postfix-Paket wird in dieser Konfiguration das LDAP-Modul benötigt.

apt install postfix{,-ldap}

Da Postfix in einer Changeroot-Umgebung läuft, kopieren wir das Wurzelzertifikat dort hinein.

cp /etc/ssl/ca.crt /var/spool/postfix/etc/ssl/

Postfix konfigurieren

Zuerst legen wir fest, für welche Internet-Domäne Postfix überhaupt zuständig ist.

/etc/postfix/main.cf
compatibility_level = 2 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mydomain = illusioni.de myorigin = $mydomain mydestination = $mydomain relayhost =

Für die Verschlüsselung verwendet Postfix die vorhandenen Schlüssel und Zertifikate. Veraltete Protokolle schließen wir explizit aus.

smtpd_use_tls                   = yes
smtpd_tls_key_file              = /etc/letsencrypt/illusioni.de/privkey.pem
smtpd_tls_cert_file             = /etc/letsencrypt/illusioni.de/fullchain.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_protocols             = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_exclude_ciphers       = EXP, MEDIUM, LOW, aNULL, MD5, DES, 3DES, SSLv2

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_protocols              = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

Postfix greif auf Dovecot zurück, um Benutzer zu authentifizieren.

smtpd_sasl_auth_enable          = yes
smtpd_sasl_type                 = dovecot
smtpd_sasl_path                 = private/dovecot-auth

Grundsätzlich nimmt Postfix Nachrichten nur für zwei Konstellationen an: Autorisierte Benutzer dürfen Nachrichten an beliebige Empfänger senden. Fremde Server dürfen Nachrichten nur an lokale Benutzer senden.

smtpd_client_restrictions       = permit_mynetworks,
                                  permit_sasl_authenticated,
                                  reject_unknown_reverse_client_hostname,
                                  reject_unauth_pipelining
smtpd_helo_required             = yes
smtpd_helo_restrictions         = permit_mynetworks,
                                  permit_sasl_authenticated,
                                  reject_invalid_helo_hostname,
                                  reject_non_fqdn_helo_hostname,
                                  reject_unknown_helo_hostname
smtpd_sender_restrictions       = permit_mynetworks,
                                  permit_sasl_authenticated,
                                  reject_unknown_sender_domain,
                                  reject_non_fqdn_sender,
                                  reject_unauth_pipelining
smtpd_recipient_restrictions    = permit_mynetworks,
                                  permit_sasl_authenticated,
                                  reject_unauth_destination,
                                  reject_non_fqdn_recipient,
                                  reject_unknown_recipient_domain
smtpd_data_restrictions         = reject_unauth_pipelining

Eingehende Nachrichten durchlaufen den Spamfilter. Ausgehende Nachrichten erhalten eine DKIM-Signatur.

milter_protocol                 = 6
milter_default_action           = accept
smtpd_milters                   = inet:localhost:11332
non_smtpd_milters               = $smtpd_milters
milter_mail_macros              = i {mail_addr} {client_addr} {client_name} {auth_authen}

Nachrichten an lokale Benutzer werden an Dovecot übergeben.

virtual_mailbox_domains         = ldap:/etc/postfix/domains.ldap
alias_maps                      = ldap:/etc/postfix/aliases.ldap
local_recipient_maps            = ldap:/etc/postfix/recipients.ldap, $alias_maps
recipient_delimiter             = +
mailbox_transport               = lmtp:unix:private/dovecot-lmtp
mailbox_size_limit              = 0
biff                            = no

Benutzer finden

Um festzustellen, ob ein Benutzer tasächlich existiert, sucht Postfix einen Eintrag mit der Empfängeradresse im LDAP-Verzeichnis und liefert den zugehörigen Benutzernamen.

/etc/postfix/recipients.ldap
bind = yes bind_dn = cn=postfix,ou=daemons,dc=illusioni,dc=de bind_pw = Password server_host = ldap://localhost start_tls = yes tls_ca_cert_file = /etc/ssl/ca.crt search_base = ou=users,dc=illusioni,dc=de query_filter = (mail=%s) result_attribute = uid

Mit den gleichen Zugangsdaten aber einer anderen Quelle werden Weiterleitungen aufgelöst.

/etc/postfix/aliases.ldap
bind = yes bind_dn = cn=postfix,ou=daemons,dc=illusioni,dc=de bind_pw = Password server_host = ldap://localhost start_tls = yes tls_ca_cert_file = /etc/ssl/ca.crt search_base = ou=aliases,dc=illusioni,dc=de query_filter = (cn=%s) result_attribute = rfc822MailMember

Wenn der Server mehrere virtuelle Domänen unterstützt

/etc/postfix/domains.ldap
bind = yes bind_dn = cn=postfix,ou=daemons,dc=illusioni,dc=de bind_pw = Password server_host = ldap://localhost start_tls = yes tls_ca_cert_file = /etc/ssl/ca.crt search_base = ou=domains,dc=illusioni,dc=de query_filter = (dc=%s) result_attribute = dc

Versand testen

Zuordnung von Adresse zu Benutzer:

postmap -q phrank@illusioni.de ldap:/etc/postfix/recipients.ldap
phrank

Manueller Verbindungstest mit Verschlüsselung:

echo -n User | base64
echo -n Password | base64
openssl s_client -connect localhost:25 -starttls smtpAUTH LOGIN
334 VXNlcm5hbWU6 Username:
BaSe64Encoded==
334 UGFzc3dvcmQ6 Password:
BaSe64Encoded==

Ober das gesamte System funktioniert, erfährt man, indem man eine Nachricht an check-auth@verifier.port25.com sendet. Als Antwort erhält man einen Bericht, insbesondere ob die DKIM-Signatur akzeptiert wird. Dabei sollte man auch das Systemprotokoll im Auge behalten.

Literatur

  1. Postfix: Configuration Parameters
  2. Postfix: Virtual Domain Hosting Howto
  3. Postfix: TLS Support
  4. RFC 821: Simple Mail Transfer Protocol (SMTP), 1982
  5. RFC 5321: Simple Mail Transfer Protocol (SMTP), 2008