====== 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]] 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 ===== 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: #!/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 __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: 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: 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