Dies ist eine alte Version des Dokuments!
Postfix ist ein SMTP Server. Siehe auch Dovecot. Von Haus aus nutzt Postfix die vorhandenen Systembenutzer als Email accounts.
postqueue -p // list queue postqueue -f // flush queue postsuper -d <message-id> // delete specific mail postsuper -d ALL // delete all
Die „System email“ ist der Domain name (z.B zarat.ml).
apt-get install postfix
Postfix läuft nun bereits im Hintergrund. Die meisste Konfiguration liegt im Verzeichnis /etc/postfix
.
Um nur bekannte Empfänger zu erlauben fügt man in die Datei /etc/postfix/main.cf
folgendes ein.
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
Um nur bekannte Absender zu erlauben fügt man folgendes ein.
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
WICHTIG Mann kann an die restrictions
eigene Scripte anhängen!
Um Postfix mitzuteilen welche Verzeichnisstruktur (in diesem Fall das am weitesten verbreitete Maildir) man für Mail Postfächer verwenden will fügt man in der Datei /etc/postfix/main.cf
folgendes ein.
home_mailbox = MailDir/ mailbox_command =
Nun kann man bereits Dovecot installieren um die Mailstruktur anzulegen.
Nicht vergessen!
Nachdem man SpamAssassin installiert hat kann man dieses in Postfix integrieren
Die Datei /etc/postfix/master.cf
bearbeiten. Die Zeile
smtp inet n - y - - smtpd
kopieren und gleich darunter einfügen. Das y
in der 5. Spalte durch ein -
ersetzen und in der darauf folgenden Zeile 4 Leerzeichen voranstellen und die Zeile -o content_filter=spamassassin
einfügen. Am Ende sollte es so aussehen.
smtp inet n - y - - smtpd smtp inet n - - - - smtpd -o content_filter=spamassassin
Damit wird Spam aber nur erkannt, die Mails in die entsprechenden Ordner zu verschieben muss Dovecot. Siehe auch Sieve
In der Datei /etc/postfix/main.cf
fügt man folgendes ein.
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes
Wenn man noch kein Zertifikat hat kann man mit Certbot eines erstellen. Um Postfix mitzuteilen das neue Zertifikat zu verwenden bearbeitet man in der Datei /etc/postfix/main.cf
die Einträge. Siehe uch Dovecot #Verschlüsselung.
# # Vorsicht bei der Unterscheidung zwischen # # smtp -> ausgehender traffic # smtpd -> einkommender traffic # smtpd_tls_cert_file = /etc/letsencrypt/live/zarat.ml/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/zarat.ml/privkey.pem smtp_use_tls = yes
Um das ganze zu vereinfachen nutzt man STARTTLS dann muss man die Ports für smtps und imaps nicht extra konfigurieren sondern das ganze läuft dann auf den normalen Ports 25 und 143.
Um auch den einkommenden Verkehr zu verschlüsseln fügt man der Datei /etc/postfix/main.cf
folgendes ein
smtpd_use_tls = yes # zeige tls info in email header smtpd_tls_received_header = yes
Mit dem sender policy framework Wikipedia kann man verhindern das fremde Mails im Namen des eigenen Servers senden können. Dazu muss man einen DNS Eintrag vom Typ TXT erstellen.
v=spf1 mx ~all
Installation über das apt tool.
apt install postfix-policyd-spf-python
Gleich zu Beginn wird in der Datei /etc/postfix/master.cf
wird folgendes hinzugefügt.
policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf
In der Datei /etc/postfix/main.cf
wird in die Zeile vor den recipient_restrictions
folgendes eingefügt
policyd-spf_time_limit = 3600
Ausserdem wird an den Eintrag smtpd_recipient_restrictions
selbst das Argument
check_policy_service unix:private/policyd-spf
angehängt.
DKIM (DomainKeys Identified Mail) ist eine Methode, die eindeutig feststellen kann, dass eine Mail von einem ganz bestimmten Mailserver gesendet wurde. Dies wird realisiert, indem auf dem eigenen Mailserver ein Schlüsselpaar generiert wird und der öffentliche Schlüssel der Domain per DNS Eintrag beigefügt wird.
DKIM Signer
apt install opendkim opendkim-tools
Nun fügen wir den Benutzer postfix
der Gruppe opendkim
hinzu.
gpasswd -a postfix opendkim
Nun bearbeitet man die Datei /etc/opendkim.conf
- hier kann man alles löschen und neu schreiben.
# This is a basic configuration that can easily be adapted to suit a standard # installation. For more advanced options, see opendkim.conf(5) and/or # /usr/share/doc/opendkim/examples/opendkim.conf.sample. # Log to syslog Syslog yes # Required to use local socket with MTAs that access the socket as a non- # privileged user (e.g. Postfix) UMask 002 # Sign for example.com with key in /etc/dkimkeys/dkim.key using # selector '2007' (e.g. 2007._domainkey.example.com) #Domain example.com #KeyFile /etc/dkimkeys/dkim.key #Selector 2007 # Commonly-used options; the commented-out versions show the defaults. Canonicalization simple Mode sv SubDomains no AutoRestart yes AutoRestartRate 10/1M Background yes DNSTimeout 5 SignatureAlgorithm rsa-sha256 # Socket smtp://localhost # # ## Socket socketspec # ## # ## Names the socket where this filter should listen for milter connections # ## from the MTA. Required. Should be in one of these forms: # ## # ## inet:port@address to listen on a specific interface # ## inet:port to listen on all interfaces # ## local:/path/to/socket to listen on a UNIX domain socket # #Socket inet:8892@localhost Socket local:/var/spool/postfix/opendkim/opendkim.sock ## PidFile filename ### default (none) ### ### Name of the file where the filter should write its pid before beginning ### normal operations. # PidFile /var/run/opendkim/opendkim.pid # Always oversign From (sign using actual From and a null From to prevent # malicious signatures header fields (From and/or others) between the signer # and the verifier. From is oversigned by default in the Debian pacakge # because it is often the identity key used by reputation systems and thus # somewhat security sensitive. OversignHeaders From ## ResolverConfiguration filename ## default (none) ## ## Specifies a configuration file to be passed to the Unbound library that ## performs DNS queries applying the DNSSEC protocol. See the Unbound ## documentation at http://unbound.net for the expected content of this file. ## The results of using this and the TrustAnchorFile setting at the same ## time are undefined. ## In Debian, /etc/unbound/unbound.conf is shipped as part of the Suggested ## unbound package # ResolverConfiguration /etc/unbound/unbound.conf ## TrustAnchorFile filename ## default (none) ## ## Specifies a file from which trust anchor data should be read when doing ## DNS queries and applying the DNSSEC protocol. See the Unbound documentation ## at http://unbound.net for the expected format of this file. TrustAnchorFile /usr/share/dns/root.key ## Userid userid ### default (none) ### ### Change to user "userid" before starting normal operation? May include ### a group ID as well, separated from the userid by a colon. # UserID opendkim # Map domains in From addresses to keys used to sign messages KeyTable refile:/etc/opendkim/key.table SigningTable refile:/etc/opendkim/signing.table # Hosts to ignore when verifying signatures ExternalIgnoreList /etc/opendkim/trusted.hosts # A set of internal hosts whose mail should be signed InternalHosts /etc/opendkim/trusted.hosts
Jetzt muss man folgende Verzeichnisstruktur anlegen
/etc/opendkim/ /etc/opendkim/keys
Nicht vergessen!
chown -R opendkim:opendkim /etc/opendkim chmod go-rw /etc/opendkim/keys
Jetzt wird die Datei /etc/opendkim/signing.table
angelegt
*@zarat.ml defaul._domainkey.zarat.ml
Jetzt wird die Datei /etc/opendkim/key.table
angelegt
default._domainkey.zarat.ml zarat.ml:default:/etc/opendkim/keys/zarat.ml/default.private
Jetzt wird die Datei /etc/opendkim/trusted.hosts
angelegt
127.0.0.1 localhost *.zarat.ml
Für DKIM verwendet man nicht den Serverkey - man muss einen eigenen erstellen. Dazu erstellt man das Verzeichnis /etc/opendkim/keys/zarat.ml
. Den Key erzeugt man mit
opendkim-genkey -b 2048 -d zarat.ml -D /etc/opendkim/keys/zarat.ml -s default -v
Nicht vergessen!
chown opendkim:opendkim /etc/opendkim/ chown opendkim:opendkim /etc/opendkim/keys/zarat.ml/default.private
Wir haben einen DNS TXT Eintrag zu setzen, dieser wurde beim genereren des Schlüssels in der Datei /etc/opendkim/keys/zarat.ml/default.txt
gespeichert. Leerzeichen und „
entfernen!
Man erstellt einen TXT Eintrag mit dem Namen default._domainkey
und als Inhalt den generierten Key. Es sollten 3 Attribute sein
Jetzt erstellt man das Verzeichnis /var/spool/postfix/opendkim
und setzt die entsprechenden Berechtigungen.
mkdir /var/spool/postfix/opendkim chown opendkim:postfix /var/spool/postfix/opendkim
In der Datei /etc/default/opendkim
den Eintrag SOCKET
bearbeiten.
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
und am Ende folgendes einfügen (falls nicht vorhanden)
USER=opendkim GROUP=opendkim PIDFILE=$RUNDIR/$NAME.pid EXTRAAFTER=
Nnu mss noch die Postfix Konfiguration unter /etc/postfix/main.cf
bearbeitet werden.
milter_default_action = accept milter_protocol = 6 smtpd_milters = local:/opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters
Die Services neu starten und zum testen kann man das Programm opendkim-testkey
nutzen.
opendkim-testkey -d zarat.ml -s default -vvv
Domain-based Message Authentication, Reporting and Conformance Wikipedia
Wichtig!
Man erstellt einen DNS TXT Record mit dem Namen _DMARK.zarat.ml
und folgendem Inhalt erstellen. (Es können auch 2 verschiedene Mailadressen sein, dorthin werden Security reports gesendet)
v=DMARC1; p = none; rua = mailto:postmaster@zarat.ml; ruf = mailto:manuel@zarat.ml; fo = 1;
Aliases bedeuten die Mailkonten werden auf die UNIX Konten des Systems gemapt. Aliases werden in die Datei
/etc/postfix/aliases
eingetragen.
mylongusername@domain.local username@domain.local
Danach muss man
postalias /etc/postfix/aliases newaliases
aufrufen. Alternativ können Sie die Datei ~/.forward erstellen, z.B. /root/.forward für root. Geben Sie den Benutzer an, an den Root-Mails weitergeleitet werden sollen, z.B benutzer@lokalhost.
Um Mails nur an lokale Systembenutzer (die sich in /etc/passwd befinden) zuzustellen, aktualisieren Sie
/etc/postfix/main.cf
und kommentieren Sie die folgenden Zeilen aus, ändern Sie sie oder fügen Sie sie hinzu. ToDo
myhostname = zarat.ml smtpd_banner = $myhostname SMTP (Postfix) mydomain = zarat.ml mydestination = $myhostname, localhost.$mydomain, localhost inet_interfaces = $myhostname, localhost mynetworks_style = host default_transport = error: outside mail is not deliverable
Virtual Mail sind Mailkonten, die keinem Benutzerkonto aus
/etc/passwd
zugeordnet sind. Todo Siehe https://wiki.archlinux.org/title/Virtual_user_mail_system_with_Postfix,_Dovecot_and_Roundcube und https://wiki.dovecot.org/VirtualUsers