Benutzer-Werkzeuge

Webseiten-Werkzeuge


mailserver

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
mailserver [2025-05-27 21:29:42] – [Mails über seinen Provider versenden] manfredmailserver [2025-05-28 19:26:36] (aktuell) – [Mails über seinen Provider versenden] manfred
Zeile 1: Zeile 1:
 +====== Mailserver ======
 +
 +  * [[::Mail]]
 +  * [[https://thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql/|Mailserver mit Dovecot, Postfix und MySQL auf Ubuntu 14.04 Server einrichten]]
 +  * [[https://shop-static.linupfront.de/chapters/mail-de--5.pdf]]
 +  * **[[https://www.admin-magazin.de/Das-Heft/2017/04/Das-Mailserver-Paket-Mailcow|Das Mailserver-Paket Mailcow]]** - Aus IT-Administrator 04/2017
 +
 +
 +**__MTA__** ([[https://wiki.ubuntuusers.de/Postfix/#Grundkonfiguration|Postfix]]):
 +    Nimmt E-Mails vom Client entgegen und leitet sie an andere Mailserver weiter
 +    Nimmt E-Mails von anderen Servern entgegen und leitet diese E-Mails an den MDA weiter
 +    => Transportaufgaben
 +
 +^ Typ ^ Beschreibung ^ Einsatzszenarien ^
 +^ "Internet Site" | Standard. Mail wird empfangen und verschickt. | Echter Mailserver mit fester IP-Adresse, z.B. Root-Server  |
 +^ "Internet mit Smarthost" | Wie Internet Site, aber Mail wird nicht direkt an den entfernten Server zugestellt, sondern über einen anderen Server (etwa beim ISP) geleitet. | Mailserver mit dynamischer IP-Adresse, die sonst sehr oft als potentielle Spam- oder Virenversender blockiert werden.  |
 +^ "Satellite System" | Keine Mail wird empfangen, alle ausgehende Mail über einen Smarthost (s.o.) verschickt. | Mail durch Admin-Skripte oder Webapplikationen verschicken lassen.  |
 +^ "Local only" | Mail wird lokal auf dem Rechner zugestellt, es wird keine Mail von außen empfangen bzw. nach außen geschickt. | Wie "Satellite System", aber die Mail soll direkt auf demselben System gelesen werden.  |
 +
 +
 +**__MDA__** (Dovecot):
 +    „Einsortierung“ der ankommenden E-Mails in die korrekten Postfächer
 +    => „Logistik“
 +
 +**__IMAP Server__** (Dovecot):
 +    Gibt auf Anfrage den Inhalt der Mailbox zurück
 +    Abgleich der Mailbox über mehrere Geräte hinweg
 +    => Speicher-/Mailboxverwaltung
 +
 +
 +===== Mails über seinen Provider versenden =====
 +
 +[[https://www.dirk-hagedorn.de/?page_id=789|Mailversand mit Postfix]]
 +
 +<code bash Postfix SMTP Relay auf FreeBSD 14.2>
 +cd /usr/ports/mail/postfix
 +make clean
 +make config
 +  >>SASL<< auswählen
 +make install
 +make clean
 +
 +vim /etc/rc.conf
 +  postfix_enable="YES"
 +  sendmail_enable="NONE"
 +
 +vim /etc/periodic.conf
 +  daily_clean_hoststat_enable="NO"
 +  daily_status_mail_rejects_enable="NO"
 +  daily_status_include_submit_mailq="NO"
 +  daily_submit_queuerun="NO"
 +
 +vim /usr/local/etc/postfix/main.cf
 +  mynetworks_style = host
 +  myorigin = example.com
 +  relayhost = [smtp.example.com]:465
 +  sender_canonical_maps = regexp:/usr/local/etc/postfix/sender_canonical
 +  smtp_sasl_auth_enable = yes
 +  smtp_sasl_mechanism_filter = plain, login
 +  smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
 +  #smtp_sasl_security_options = noplaintext, noanonymous
 +  smtp_sasl_security_options = noanonymous
 +  smtp_tls_security_level = secure
 +  smtp_tls_wrappermode = yes
 +
 +touch /usr/local/etc/postfix/sender_canonical
 +chmod 0600 /usr/local/etc/postfix/sender_canonical
 +vim /usr/local/etc/postfix/sender_canonical
 +  /^.*$/ noreply@example.com
 +
 +touch /usr/local/etc/postfix/sasl_passwd
 +chmod 0600 /usr/local/etc/postfix/sasl_passwd
 +vim /usr/local/etc/postfix/sasl_passwd
 +  [smtp.example.com]:465 username:P@ssw0rd
 +
 +postmap /usr/local/etc/postfix/sender_canonical
 +postmap /usr/local/etc/postfix/sasl_passwd
 +
 +service postfix restart
 +
 +# Mail-Queue anzeigen:
 +mailq
 +postqueue -p
 +
 +# Mails aus der Queue löschen:
 +postsuper -d ALL
 +postsuper -d "${QUEUE_ID}"
 +
 +# Test-Mail abschicken (oneliner):
 +printf "From: sender@example.com\nTo: recipient@example.com\nSubject: Test\n\ntest body" | sendmail -t -i
 +
 +# Test-Mail abschicken:
 +cat << "EOF" | sendmail -t -i
 +From: sender@example.com
 +To: recipient@example.com
 +Subject: Test
 +
 +test body
 +EOF
 +</code>
 +
 +
 +===== Sieve =====
 +
 +  * [[https://youtu.be/lJiHjq06ttg?t=992|Ein Sieb für E-Mails (CC2tv Folge 330)]] - Sieve per Thunderbird...
 +
 +
 +===== S/MIME-Mail-Verschlüsselung =====
 +
 +  * [[einzelne_dateien_mit_openssl_verschluesseln#S/MIME-Verschlüsselung (E-Mail-Format)]]
 +  * __[[https://www.heinlein-support.de/blog/security/e-mail-verschluesselung-site-to-site-per-pgp-gpg-smime-oder-ssl-tls/]]__ -> grundsätzliches
 +  * **[[http://www.softed.de/blog/smime-verschlusselung-durch-postfix-filter/]]** -> Anleitung
 +  * [[https://www.ciphermail.com/gateway.html]] -> alternative Möglichkeit
 +
 +
 +==== mit openssl ====
 +
 +E-Mail-Text (Body) mit ''openssl'' verschlüsseln:
 +  > openssl smime -encrypt -des3 -out message_encrypted.txt zertifikat.cer < message.txt
 +
 +so wird auch gleich noch der Header ("From:", "To:" und das "Subject:") mit angebaut und es entsteht eine vollwertige E-Mail, die einen verschlüsselten Body
 +  > openssl smime -encrypt -des3 -out message_encrypted.eml -from absender@domain1.tld -to empfaenger@domain2.tld -subject "Eine geheime Nachricht" zertifikat.cer < message.txt
 +
 +
 +==== mit Content-Filter im Postfix ====
 +
 +Postfix bietet verschiedene Möglichkeiten, externe Content-Filter zu implementieren. Eine relativ einfache Variante ist, das Postfix Kommando "pipe" zu verwenden, und damit ein beliebiges Skript mit den Daten der Email auf der Standardeingabe zu versehen.
 +
 +Angenommen, es existiert ein Skript ''/usr/local/bin/mein_filter.sh'', dass Emails (Header+Body) auf der Standardeingabe akzeptiert und dann - wie auch immer - weiter verarbeitet und zurück in das Mailsystem gibt.
 +
 +Um dieses Skript als Filter zu verwenden, muss zuerst in ''/etc/postfix/master.cf'' ein entsprechender Transport-Mechanismus definiert werden:
 +
 +  > vi /etc/postfix/master.cf
 +  ...
 +  meinfilter unix - n n - 2 pipe
 +      flags=Rq user=filter null_sender=
 +      argv=/usr/local/bin/mein_filter.sh -f ${sender} -- ${recipient}
 +  ...
 +
 +Dadurch existiert ein neuer Transport-Mechanismus mit dem Namen "meinfilter", der bei Verwendung unter dem Benutzeraccount "filter" das Skript ''/usr/local/bin/mein_filter.sh'' aufruft und mit der Email auf der Standardeingabe versorgt.
 +
 +Die Parameter für das Skript ( "''-f ${sender} -////- ${recipient}''") sind so gewählt, dass Sie später 1:1 an das Kommando sendmail übergeben werden können.
 +
 +Zusätzlich wird in der Postfix-Konfiguration für den neuen Transportmechanismus festgelegt, dass er für jeden einzelnen Empfänger einer Email separat aufgerufen werden muss. Das kostet zwar Performance, spart aber etwas Intelligenz im Filter-Skript:
 +  > vi /etc/postfix/main.cf
 +  ...
 +  # meinfilter benötigt alle recipients einzeln
 +  meinfilter_destination_recipient_limit = 1
 +  ...
 +
 +
 +=== Das Filter-Skript ===
 +
 +Das Filter-Skript soll die Email auf der Standard-Eingabe entgegennehmen, verarbeiten (also verschlüsseln) und wieder an den MTA übergeben:
 +<file bash /usr/local/bin/mein_filter.sh>
 +#!/bin/bash
 +
 +WORKDIR="/tmp"
 +SENDMAIL="/usr/sbin/sendmail -G -i"
 +CERTS="/etc/mailcerts"
 +EX_UNAVAILABLE=69
 +SENDER="$2"
 +RECIPIENT="$4"
 +
 +if test -f "$CERTS/$RECIPIENT.crt" ; then
 +
 +        MESSAGEFILE="$WORKDIR/message.$$"
 +
 +        trap "rm -f $MESSAGEFILE; rm -f $MESSAGEFILE.encrypted" 0 1 2 3 15
 +
 +        umask 077
 +
 +        cat > $MESSAGEFILE || { echo Cannot save mail to file; exit $EX_UNAVAILABLE;}
 +
 +        SUBJECT="$(reformail -x "Subject:" < $MESSAGEFILE)"
 +
 +        openssl smime -encrypt -des3 -out $MESSAGEFILE.encrypted -from $SENDER -to $RECIPIENT -subject "$SUBJECT" $CERTS/$RECIPIENT.crt < $MESSAGEFILE || { echo Problem encrypting message; exit $EX_UNAVAILABLE; }
 +
 +        $SENDMAIL "$@" < $MESSAGEFILE.encrypted
 +        exit $?
 +else
 +        cat | $SENDMAIL "$@"
 +        exit $?
 +fi
 +</file>
 +
 +__Falls ein Email-Empfänger mit der Adresse ''benutzername@domain.tld'' verschlüsselte Emails erhalten soll, muss dessen Benutzerzertifikat in das Verzeichnis "/etc/mailcerts" unter dem Dateinamen ''benutzername@domain.tld.crt'' abgelegt werden.__
 +Wird im Skript eine entsprechende Datei gefunden, wird die Email per ''openssl'' verschlüsselt.
 +Ist kein Zertifikat hinterlegt, wird die Email ungefiltert an das sendmail-Kommando übergeben.
 +
 +
 +=== Verschlüsselung aktivieren ===
 +
 +  > vi /etc/postfix/master.cf
 +  ...
 +  smtp inet n - - - - smtpd -o content_filter=meinfilter:dummy
 +  meinfilter unix - n n - 2 pipe
 +    flags=Rq user=filter null_sender=
 +    argv=/usr/local/bin/mein_filter.sh -f ${sender} -- ${recipient}
 +  ...
 +
 +Für genauere Infos siehe "man 5 master".
 +
 +
 +===== Mailserver mit FreeBSD =====
 +
 +  * [[Dovecot + Sieve]]
 +  * [[Dovecot-System-User]]
 +  * [[http://www.iredmail.org/|iRedMail]] - der Mail-Server für alle die es eilig haben und nicht lange konfigurieren wollen
 +    * [[https://www.youtube.com/watch?v=TqAdt2l1aDc|Installation von iRedMail 0.7.4 auf CentOS 5.7]]
 +
 +**Dovecot-Sieve muss vor Postfix installiert werden, sonst wird Dovecot ohne Sieve-Unterstützung als Abhängigkeit automatisch installiert!**
 +
 +  * [[Postfix]]
 +
 +
 +==== SSL-Schlüssel ====
 +
 +Sowohl Dovecot als auch Postfix sollte man ein SSL-Schlüssel/Zertifikat spendieren.
 +  * Dovecot für
 +    * POP3S
 +    * IMAPS
 +  * Postfix für
 +    * TLS
 +
 +Wie das geht, steht hier: [[::EDV:SSL-Schlüssel generieren]]
 +
 +----
 +
 +
 +=== weitere Links ===
 +
 +[[http://blog.al-shami.net/index.php/freebsd-postfix-dovecot-and-active-directory/]]
 +
 +
 +===== Mail (Ubuntu 20.04 LTS) =====
 +
 +Installation:
 +  root@linux:~# apt install mailutils
 +
 +E-Mail-Test:
 +  fritz@linux:~$ echo Test001 | mail -s Test001 fritz@linux.lan
 +  
 +Ob eine E-Mail angekommen ist, kann man an diesen beiden Dateien sehen:
 +  fritz@linux:~$ ls -lha /var/mail/fritz /home/fritz/mbox
 +  -rw------- 1 fritz fritz   0 Dec 28 17:21 /home/fritz/mbox
 +  -rw------- 1 fritz mail  464 Dec 28 17:22 /var/mail/fritz
 +
 +E-Mail lesen:
 +  fritz@linux:~$ mail
 +  "/var/mail/fritz": 1 message 1 new
 +  >N   1 fritz@linux.lan Mon Dec 28 17:22  13/413   Test001
 +  ? 
 +
 +Mit einem Druck auf "[Enter]" öffnen sie die Mail...
 +  Return-Path: <fritz@linux.lan>
 +  X-Original-To: fritz@linux.lan
 +  Delivered-To: fritz@linux.lan
 +  Received: by linux.lan (Postfix, from userid 1001)
 +          id 6BDCA10064B; Mon, 28 Dec 2020 17:22:06 +0100 (CET)
 +  Subject: Test001
 +  To: <fritz@linux.lan>
 +  X-Mailer: mail (GNU Mailutils 3.7)
 +  Message-Id: <20201228162206.6BDCA10064B@linux.lan>
 +  Date: Mon, 28 Dec 2020 17:22:06 +0100 (CET)
 +  From: fritz@linux.lan
 +  
 +  Test001
 +  ?
 +
 +Mit "[Q]" beendet man das Programm:
 +  ? q
 +
 +
 +===== Fehlermeldungen =====
 +
 +bei dieser Meldung im Log, ist das Limit für die maximale Mail-Größe (beim Postfix ''message_size_limit'') anzuheben oder die zu versendende Mail muss verkleinert werden:
 +  ... smtp: Failed: 452 4.3.1 Insufficient system storage
 +
 +oder die Anzahl der Mails in der Warteschlange ist zu groß:
 +  # ls /var/spool/nullmailer/queue/* | wc -l
 +  bash: /bin/ls: Die Argumentliste ist zu lang
 +  0
 +  
 +  # for i in /var/spool/nullmailer/queue/* ; do ls ${i} ; done | wc -l
 +  63538
 +