Postfix

Begriffe:

  • postfix/smtpd - Dies ist der SMTP Daemon, der eingehende Mails bearbeitet und im Postfix intern an die entsprechenden Stellen weiterleitet.

  • postfix/smtp - Dies ist der SMTP Daemon, für die Auslieferung von Mails ins Internet.

TLS

TLS kann seitens Postfix auch im „Wrapper“-Modus angeboten werden, bei dem immer TLS verwendet wird, anstatt STARTTLS-Unterstützung anzukündigen (und anschliessend darauf wartend, dass SMTP-Clients den TLS-Dienst anfordern). Einige alte Clients, insbesondere Outlook [Express], bevorzugen den „Wrapper“-Modus. Falls man unbedingt diesen Dienst unterstützen möchte, aktiviert man einen speziellen Port in der master.cf und gibt -o smtpd_tls_wrappermode=yes (Achtung: kein Leerzeichen um das „=“) als smtpd-Kommandozeilenoption an. Früher wurde Port 465 (smtps) für diese Funktion gewählt.

Besser ist natürlich, Port 587 (SMTP über STARTTLS) zu nutzen. Mit dieser Konfiguration kündigt Postfix STARTTLS-Unterstützung für SMTP-Clients an, verlangt aber nicht, dass die Clients auch TLS-Verschlüsselung verwenden:

/etc/postfix/main.cf
smtpd_tls_security_level = may
smtp_tls_loglevel = 1

smtpd_tls_cert_file = /etc/pki/tls/certs/example.com.pem
smtpd_tls_key_file = /etc/pki/tls/private/example.com.key

DKIM

Sollen ausgehende Mails mit DKIM signiert werden, empfiehlt sich die Verwendung von OpenDKIM.

dnf install opendkim

Ein Keypair kann wir folgt generiert werden:

dnf install opendkim-tools

domain=example.com
mkdir /etc/opendkim/keys/$domain
/usr/sbin/opendkim-genkey -D /etc/opendkim/keys/$domain/ -d $domain -s default
chown -R root:opendkim /etc/opendkim/keys/$domain
chmod 640 /etc/opendkim/keys/$domain/default.private
chmod 644 /etc/opendkim/keys/$domain/default.txt

# test key and config
opendkim-testkey -vvvvv
# ...
# opendkim-testkey: key OK

/etc/opendkim/keys/$domain/default.txt beinhaltet den Public Key, dieser muss als TXT DNS Record veröffentlicht werden.

Im Config File /etc/opendkim.conf sollten folgende Werte angepasst bzw gesetzt werden:

/etc/opendkim.conf
##  Selects operating modes. Valid modes are s (sign) and v (verify). Default is v.
##  Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing
##  messages.
Mode        s

##  Attempt to become the specified user before starting operations.
UserID      opendkim:opendkim

##  Create a socket through which your MTA can communicate.
Socket      inet:8891@localhost

##  Domain(s) whose mail should be signed by this filter. Mail from other domains will
##  be verified rather than being signed. Uncomment and use your domain name.
##  This parameter is not required if a SigningTable is in use.
Domain      example.com

##  Gives the location of a private key to be used for signing ALL messages. This
##  directive is ignored if KeyTable is enabled.
KeyFile     /etc/opendkim/keys/example.com/default.private

##  Identifies a set "internal" hosts whose mail should be signed rather than verified.
InternalHosts       refile:/etc/opendkim/TrustedHosts

In /etc/opendkim/TrustedHosts müssen alle Hosts eingetragen werden, deren Mails signiert werden sollen. Normalerweise ist dies localhost.

/etc/opendkim/TrustedHosts
127.0.0.1
::1

OpenDKIM muss bei Postfix als Milter eingetragen werden, damit alle Mails über OpenDKIM verschickt werden:

/etc/postfix/main.cf
# DKIM
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters

Und am Ende muss der Service gestartet und Postfix neugestartet werden:

systemctl enable --now opendkim.service

systemctl restart postfix.service

Check-Tools

MTA ganz allgemein (SPF, DKIM, DMARC,Spammyness)

nur SPF und DKIM Keys:

Ist der Mail-Server blacklisted?

Microsoft Hotmail

Mails an

  • hotmail.com

  • live.com

  • outlook.com

  • msn.com

werden geblockt?

Logs prüfen:

grep -E '(protection.outlook.com|http://mail.live.com/mail/troubleshooting.aspx|block list' /var/log/maillog

Falls geblockt: Hotmail Blacklist Removal Form ausfüllen.

Falls Mail im Spam landen: SPF, DMARC und DKIM prüfen. Mailserver-Konfiguration durch Senden eines leeren Mails an check-auth@verifier.port25.com und mit Hilfe von http://www.mail-tester.com prüfen.

Diese Policies sind beim Senden an Microsoft-Domains einzuhalten: https://sendersupport.olc.protection.outlook.com/pm/policies.aspx

Mail-Queue

Mails hängen in der Queue? So sieht man, welche (und erhält auch deren ID):

mailq

Wie lauten die Mail-IDs?

postqueue -p

Was steht in den Mails?

postcat -q <ID>

Queue erneut abarbeiten lassen: flush the queue

postqueue -f

Alle Mails aus der Queue entfernen:

postsuper -d ALL

Troubleshooting

Die Datei /root/dead.letter entsteht beim Versenden von E-Mails

Das Datei entsteht, wenn es beim Aufruf des mail-Kommandos einen Fehler gibt - das heisst, in dem Fall kommt die E-Mail gar nicht bis zum Postfix und taucht somit auch nie im /var/log/maillog auf. Meistens ist ein Syntaxfehler beim mail-Aufruf die Ursache. Das passiert leicht, da sich mail je nach OS (und dessen Version) unterschiedlich bedient. In dem Fall empfiehlt es sich, stattdessen sendmail zu verwenden.

Alle Headers von ausgehenden Mails loggen
echo '/.*/   WARN' > /etc/postfix/smtp_header_checks
postmap /etc/postfix/smtp_header_checks
echo 'smtp_header_checks = regexp:/etc/postfix/smtp_header_checks' >> /etc/postfix/main.cf
systemctl restart postfix

tail -f /var/log/maillog | grep 'warning: header'

Built on 2025-10-27