home-harmening:sicherheit:email_versand

Dies ist eine alte Version des Dokuments!


Der Server sollte in der Lage sein Emails bei bestimmen Vorkommnissen
zum Beispiel einem Virusfund dem Administrator zu melden.

Ich möchte hier keinen kompletten Email Server aufsetzen. Stattdessen soll der Emailserver nur lokale Email entgegennehmen und über einen externen
SMTP Server versenden.

Postfix Installation

Als Email Server verwende ich Postfix.

apt install postfix ca-certificates libsasl2-modules


Bei der Serverauswahl bitte den „internet“ Server auswählen.

Postfix Konfigurieren

Wir benötigen zwei Dateien
die main.cf als Hauptkonfigurationsdatei von Postfix und die sasl_passwd Datei für unseren Benutzernamen und das Passwort des SMTP Servers.

nano /etc/postfix/main.cf
# Allgemeine Postfix-Konfiguration
myhostname = servername.mydomain.de
mydomain = mydomain.de
myorigin = /etc/mailname
inet_interfaces = loopback-only
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
 
# Relaying über den Strato SMTP-Server
relayhost = [smtp.strato.de]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
 
# Erhöhte Timeout-Werte
smtp_connect_timeout = 60s
smtp_helo_timeout = 60s
smtp_send_xforward_command = no
 
# Verhindert das Akzeptieren von eingehenden E-Mails
smtpd_banner = $myhostname ESMTP Postfix
smtpd_tls_security_level = none
smtpd_sasl_auth_enable = no
smtpd_recipient_restrictions = reject
 
# Weiterleitung von Nachrichten, die keine lokalen Empfänger haben
local_recipient_maps = 
 
# Weitere Einstellungen für Sicherheit und Performance
mynetworks = 127.0.0.0/8
relay_domains =
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname


ParameterWertErklärung
myhostnameservername.mydomain.deDer Hostname des Servers. Dies
sollte dem Domainnamen deines
Servers entsprechen.
mydomainmydomain.deDer Domainname, unter dem der Server
erreichbar ist.
myorigin/etc/mailnameDer Ursprung der E-Mails, wenn sie
gesendet werden. Normalerweise der
Domainname des Servers.
inet_interfacesloopback-onlyPostfix hört nur auf der lokalen
Netzwerk-Schnittstelle (127.0.0.1).
Dies bedeutet, dass der Server
keine eingehenden E-Mails akzeptiert.
inet_protocolsipv4Postfix wird nur das IPv4-Protokoll
verwenden. Verhindert, dass der Server
IPv6 verwendet, wenn es nicht
benötigt wird.
mydestination$myhostname, localhost.$mydomain, localhostBestimmt, welche Domains als Ziel
für eingehende E-Mails akzeptiert
werden. Da `inet_interfaces =
loopback-only`, sind keine
externen Ziele erlaubt.
relayhost[smtp.strato.de]:587Der Strato SMTP-Server, über den
E-Mails gesendet werden. Der Port
587 ist für verschlüsseltes SMTP
(TLS).
smtp_sasl_auth_enableyesAktiviert die SASL-Authentifizierung
für den ausgehenden SMTP-Verkehr,
um sich beim Strato-Server anzumelden.
smtp_sasl_password_mapshash:/etc/postfix/sasl_passwdGibt den Speicherort der Datei an,
die die SMTP-Authentifizierungsdaten
enthält (Benutzername und Passwort).
smtp_sasl_security_optionsnoanonymousVerhindert anonyme Authentifizierung
und stellt sicher, dass eine
ordnungsgemäße Benutzeridentifikation
erfolgt.
smtp_tls_security_levelmayTLS (Transport Layer Security) wird
verwendet, wenn der SMTP-Server es
unterstützt, ist aber nicht
zwingend erforderlich.
smtp_tls_loglevel1Setzt das Log-Level für TLS-Verbindungen.
Wert 1 zeigt grundlegende TLS-Fehler
an.
smtp_tls_CAfile/etc/ssl/certs/ca-certificates.crtDer Pfad zu den Zertifikaten von
vertrauenswürdigen Zertifizierungsstellen,
um TLS-Verbindungen abzusichern.
smtp_connect_timeout60sLegt die maximale Zeit fest, die Postfix
wartet, um eine Verbindung zum SMTP-Server
herzustellen, bevor ein Timeout
erfolgt.
smtp_helo_timeout60sLegt den Timeout-Wert für den `HELO`-Befehl
fest, der zu Beginn der SMTP-Verbindung
gesendet wird.
smtp_send_xforward_commandnoVerhindert das Senden des `XFORWARD`-Befehls,
um unnötige Informationen zu vermeiden.
smtpd_banner$myhostname ESMTP PostfixDefiniert das Banner, das der Server
anzeigt, wenn er sich mit einem anderen
SMTP-Server verbindet.
smtpd_tls_security_levelnoneDeaktiviert TLS für eingehende
Verbindungen (da der Server keine
E-Mails von außen empfängt).
smtpd_sasl_auth_enablenoDeaktiviert SASL-Authentifizierung für
eingehende Verbindungen (da keine
externen E-Mails empfangen werden).
smtpd_recipient_restrictionsrejectVerhindert das Akzeptieren von
eingehenden E-Mails, indem alle
Empfängeranfragen abgelehnt werden.
local_recipient_mapsKeine lokalen Empfänger, da der Server
keine E-Mails empfängt.
mynetworks127.0.0.0/8Beschränkt den Zugang zum Server nur
auf die lokale Maschine (127.0.0.1).
relay_domainsLeere Einstellung, da der Server
keine externen E-Mails empfangen
kann.
smtpd_helo_requiredyesErfordert, dass der SMTP-Client beim
Verbinden einen gültigen `HELO`-Befehl
sendet.
smtpd_helo_restrictionsreject_invalid_helo_hostnameVerweigert Verbindungen mit ungültigen
`HELO`-Hostnamen, um Missbrauch
zu verhindern.


Jetz muss die Passwortdatei /etc/postfix/sasl_passwd erstellt werden.

nano /etc/postfix/sasl_passwd
[smtp.strato.de]:587 deinBenutzername:deinPasswort
postmap /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd*


Test

Zunächst müssen wir prüfen ob wir den SMTP Server von Strato erreichen. Dies kann mit netcat erfolgen.

nc -vz smtp.strato.de 587
 
Connection to smtp.strato.de (81.169.145.133) 587 port [tcp/submission] succeeded!


Eine Testmail kann mit dem Paket mail-utils versendet werden.

echo -e "Subject: Test\n\nDies ist eine Testmail." | sendmail -v deinemail@zieladresse.de