====== 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