Raspberry Pi als privater Email Server

Nach den NSA Enthüllungen von Snowden im Sommer 2013, und nachdem mir mein Arbeitgeber ein paar Monate zuvor ein Raspberry Pi geschenkt hatte, kam mir dieser Artikel im c’t 2013, Heft 17, gerade Recht: Briefkästchen, Raspberry Pi als privater LAMP- und IMAP-Server, von Mirko Dölle.

Mein Setup: Mac Mini mit OSX 10.6.8 und Homebrew, ein Apple Airport Router, ein Raspberry Pi, ein 4 GB SD-Karte, ein USB Wireless Dingens, der Nano-WLAN-USB-Stick 150 Mbps von hama.

Alternative: Raspberry Pi: eMail Server installieren, auf YouTube, 21 Minuten.

Debian auf Raspberrry Pi installieren

Der alte USB Kartenleser funktioniert nicht mehr. Ich musste meinen Fotoapparat (!) als SD-Kartenleser verwenden. SD-Karte in den Fotoapparat und Raspbian via Torrent runterladen und entpacken. Das ist Debian für den Raspberry Pi und etwa 2 GB gross. Das schreibt man dann auf die entsprechende Partition. Zuerst mal die richtige Partition finden, unmounten und überschreiben. Vorsicht, die Disks heissen bei dir vielleicht anders.

alex@Pyrobombus:~$ df -h
Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2    74Gi   68Gi  5.6Gi    93%    /
devfs          123Ki  123Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home
/dev/disk1s2   931Gi  904Gi   27Gi    98%    /Volumes/Extern
/dev/disk2s1   1.8Gi  3.8Mi  1.8Gi     1%    /Volumes/OLYMPUS
alex@Pyrobombus:~$ sudo diskutil unmount /dev/disk2s1
alex@Pyrobombus:~$ sudo dd bs=1m if=2013-07-26-wheezy-raspbian.img of=/dev/rdisk2

Die Karte dann in den Raspberry Pi reinschieben und am Strom anstecken. Das Ding bootet, aber es hat keine Tastatur und keinen Bildschirm. Man verbindet den Mac mit dem Pi über das normale Netzwerkkabel und stellt beim Mac ein, dass man das drahtlose Netz gerne mit dem Ethernet teilen will. Das geht über System Preferences → Sharing → Internet Sharing. Dann probiert man sich mit SSH zu verbinden. Die Adresse hat die Form 192.168.2.n wobei n eine Zahl ab 2 ist. Bei mir hat es mit 3 schon funktioniert:

alex@Pyrobombus:~$ ssh pi@192.168.2.3

Benutzername ist pi und Passwort ist raspberry.

Dann startet man sudo raspi-config und setzt die Kiste auf. expand rootfs, configure keyboard, change locale (ich habe de_CH.UTF8 gewählt und en_GB.UTF8 als Default gelassen). Die Zeitzone habe ich auf Europe Zurich gesetzt.

Der erste Schritt ist getan!

Das System auf den neuesten Stand bringen:

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
pi@raspberrypi ~ $ sudo apt-get autoremove

Die erste Anweisung holt sich ein Verzeichnis der aktuelle Pakete, die zweite Anweisung lädt neuere Versionen runter und installiert sie. Die letzte Anweisung sorgt dafür, dass unbenötigte Packete deinstalliert werden.

Vielleicht ist dass folgende Paket schon installiert. Damit wird der Name des Rechners automatisch im Netz bekannt gemacht. Das ist Bonjour für den Raspberry.

pi@raspberrypi ~ $ sudo apt-get install libnss-mdns

Vom Mac aus testen:

alex@Pyrobombus:~$ ssh pi@raspberrypi.local

Ich würde das Passwort des pi Benutzers noch ändern:

pi@raspberrypi ~ $ passwd

Wireless

Den Raspberry Pi wollen wir nicht nur über den Mac ans Netz hängen. Der Raspberry Pi soll direct am Router hängen, also müssen wir das drahtlose Netz zum laufen kriegen. Hier habe ich viele Anleitungen gesehen und viel herumgebastelt. Was schussendlich aber funktioniert hat, ist wicd-curses.

pi@raspberrypi ~ $ apt-get install wicd-curses

In der Liste sucht man sich sein Netzwerk aus und drückt den Pfeil nach rechts.

Bei der statischen IP schreibt man die inet addr rein, die man in der ifconfig Ausgabe findet. Im Moment verwendet Raspberry Pi nämlich DHCP und hat eine dynamische Nummer vom Router zugewiesen bekommen. Diese schreiben wir halt einfach für die Zukunft fest.

pi@raspberrypi ~ $ ifconfig
...
wlan0     Link encap:Ethernet  HWaddr 80:1f:02:8f:91:26  
          inet addr:10.0.1.10  Bcast:10.0.1.255  Mask:255.255.255.0
...

Wir müssen uns beides merken. Die Hardware Adresse (die MAC Adresse) ist das Teil hinter HWaddr: 80:1f:02:8f:91:26. Die IP Nummer ist das Teil hinter inet addr: 10.0.1.10.

Bei DNS domain und Search domain müsst ihr wohl etwas anderes hinein schreiben. Die genauen Werte findest du auf deinem Mac: System Preferences → Network → AirPort → Advanced... → DNS → Search Domains. Ich bin mir allerdings nicht sicher, ob da überhaupt was drinnen stehen muss. Ich habe es halt einfach abgeschrieben.

[X] Use Static IPs                                                              
IP:     10.0.1.10                                                               
Netmask:255.255.255.0                                                           
Gateway:10.0.1.1                                                                
                                                                                
[X] Use Static DNS                      [ ] Use global DNS servers              
DNS domain:   v.cablecom.net                                                    
Search domain:v.cablecom.net                                                    
DNS server 1:        10.0.1.1                                                   
DNS server 2:                                                                   
DNS server 3:                                                                   
                                                                                
[ ] Use DHCP Hostname                                                           
DHCP Hostname: raspberrypi                                                      
                                                                                
[ ] Use these settings for all networks sharing this essid                      
[X] Automatically connect to this network                                       
[X] Use Encryption                                                              
WPA 1/2 (Passphrase)    vvv                                                     
Preshared key: ********                                                         
F10:OK                                  ESC:Cancel                              

Weil F10 vielleicht komische Mac Sachen macht, kann man den Dialog mit ⌘F10 schliessen.

Kurze vi Einführung

Ich editiere Dateien oft mit vi. Ein Beispiel, welches wir bald brauchen werden:

pi@raspberrypi ~ $ sudo vi /etc/modules

Im vi gibt es zwei Modi: “insert mode” und “command mode”. Wenn man eine Datei editiert, ist man im Kommando Modus. Mit den Pfeilen navigiert man zu dem Ort, wo man etwas einfügen will.

i: “insert mode” starten

a: “append” ist fast das selbe

A: “append” am Ende der Zeile

Dann schreibt man soviel man will und am Ende verwendet man ESC um in den Kommando Modus zurück zu finden.

/: vorwärts suchen

dd: Zeile löschen

dw: Wort löschen

x: Charakter löschen ; ~:w: “write” um die Datei zu speichern ; ~:q: “quit” um vi zu beenden ; ~:wq: “write and quit” um die Datei zu speichern und vi zu beenden ; ~:q!: “quit!” um vi zu beenden ohne die veränderte Datei zu speichern

Mail Server

Wir verwenden Dovecot. Um es installieren zu können, muss das IPv6 Modul anscheinend immer geladen sein.

pi@raspberrypi ~ $ modprobe ipv6
pi@raspberrypi ~ $ apt-get install dovecot-imapd

IPv6 immer laden: man trägt es in ##/etc/modules## ein.

pi@raspberrypi ~ $ cat /etc/modules
1. /etc/modules: kernel modules to load at boot time.
1.
1. This file contains the names of kernel modules that should be loaded
1. at boot time, one per line. Lines beginning with "#" are ignored.
1. Parameters can be specified after the module name.

ipv6

Leider gibt es immer wieder komische Fehler bei Dovecot.

pi@raspberrypi ~ $ sudo doveadm log errors

Deswegen habe ich in einer Konfigurationsdatei noch eine Änderung gemacht:

pi@raspberrypi ~ $ sudo vi /etc/dovecot/conf.d/10-mail.conf 

Wichtig ist diese Einstellung:

mail_privileged_group = mail

Zudem möchte ich die Mails in einer seltsamen Mischung von mbox Format und maildir Format ablegen:

mail_location =mbox:~/mail:LAYOUT=maildir++:INBOX=/var/mail/%u:CONTROL=~/mail/control:INDEX=~/mail/indexes

User anlegen

Ich will schlussendlich Mails für Alex und Claudia hier empfangen und zwischenlagern. So lege ich die Benutzer an und ändere ihr Passwort:

pi@raspberrypi ~ $ useradd -m alex
pi@raspberrypi ~ $ passwd alex
pi@raspberrypi ~ $ useradd -m claudia
pi@raspberrypi ~ $ passwd claudia

Eventuell muss man für diese Benutzer noch die richtigen Verzeichnisse anlegen. Für jeden also:

pi@raspberrypi ~ $ sudo su alex
alex@raspberrypi /home/pi $ cd
alex@raspberrypi ~ $ mkdir mail
alex@raspberrypi ~ $ mkdir mail/control
alex@raspberrypi ~ $ mkdir mail/indexes
alex@raspberrypi ~ $ exit
exit
pi@raspberrypi ~ $ 

Dovecot wird seine Dateien hier nun ablegen. Das kann man später dann mal so prüfen:

pi@raspberrypi ~ $ sudo ls -a /home/alex/mail
.  ..  control	.Deleted Messages  dovecot.mailbox.log	.INBOX	indexes
pi@raspberrypi ~ $ sudo ls -a /home/alex/mail/control
.  ..  dovecot-uidvalidity  dovecot-uidvalidity.522f96e9  .subscriptions
pi@raspberrypi ~ $ sudo ls -a /home/alex/mail/indexes
.  ..  .Deleted Messages  .INBOX

Mails holen

Das passiert mit fetchmail.

pi@raspberrypi ~ $ apt-get install fetchmail

Nun kann jeder Benutzer selber entscheiden, wie er seine Mails bekommt. Dies wird in die ~/.fetchmailrc Datei geschrieben. Hier beispielsweise mein Setup für alex@gnu.org:

pi@raspberrypi ~ $ sudo su alex
alex@raspberrypi /home/pi $ cd
alex@raspberrypi ~ $ cat .fetchmailrc
poll fencepost.gnu.org
  protocol apop
  user alex
  pass '*mein Passwort*'
  ssl
  mda '/usr/lib/dovecot/dovecot-lda'

poll imap.gmail.com
  protocol imap
  user kensanata
  pass '*mein App-spezifisches Passwort*'
  ssl

Das kann man nun austesten. -v steht für “verbose output”. Obige Einstellung mit dem Mail Delivery Agent (MDA) wird so wohl mangels Berechtigungen noch nicht funktionieren. Hierzu beim Thema Spam mehr. Erst mal schauen ob es ohne MDA Angabe geht.

alex@raspberrypi ~ $ fetchmail -v imap.gmail.com

Bist du zufrieden, kannst du nun alle paar Minuten deine Mails abholen gehen. Hierfür wird von jedem Benutzer ein cronjob eingerichtet.

alex@raspberrypi ~ $ EDITOR=vi crontab -e

Mit EDITOR=vi wird verhindert, dass der normale Editor verwendet wird. Das dürfte nano oder sonst so etwas sein.

Hier wollen wir eine Zeile hinzu fügen. Bei mir (und hier sieht man auch gleich, wie man sich den crontab auch anzeigen lassen kann):

alex@raspberrypi ~ $ crontab -l
...
1. m h  dom mon dow   command
*/10 * *   *   *     /usr/bin/fetchmail -s

So werden alle zehn Minuten meine Mails geholt. -s steht für “silent”. Jegliche Ausgabe, welche von einem cronjob produziert wird, wird uns nämlich zugesendet.

Spam Filter

Der GMail Spam Filter ist wirklich ausgezeichnet. Gibt es eine Alternative? Mein Email Provider verwendet offensichtlich SpamAssassin. Der fügt den vermuteten Spam Emails die Kopfzeile X-Spam-Flag: YES hinzu. Danach kann man filtern, wenn man Pigeonhole installiert:

pi@raspberrypi ~ $ sudo apt-get install dovecot-sieve

Nun muss man das noch anschalten:

pi@raspberrypi ~ $ sudo vi /etc/dovecot/conf.d/15-lda.conf

Und am Ende der Datei mail_plugins auskommentieren und sieve hinzufügen (im vi geht es mit G ans Ende der Datei):

protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}

Und dann muss man wahrscheinlich die Konfigurationsdateien neu laden:

pi@raspberrypi ~ $ sudo doveadm reload

Der Server sucht nach Filtern in der Datei ~/.dovecot.sieve. Dort sollte für meinen Fall also drinnen stehen:

alex@raspberrypi ~ $ cat .dovecot.sieve 
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
	fileinto "Junk";
}

Mehr Beispiele gibt es auf dem Dovecot Wiki.

Warum funktioniert das? Das funktioniert, weil wir in der Konfiguration für Fetchmail einen Mail Delivery Agent (MDA) angegeben haben – und zwar dovecot-lda. Dieses Programm berücksichtigt nicht nur unsere Sieve Regeln, es führt auch die Dovecot Indexe nach.

Leider bleibt noch ein Problem: dovecot-lda hat nicht die nötigen Rechte, um Mails im Mailsystem rum zu schieben! Falls man dieses Problem hat, sieht es so aus:

alex@raspberrypi ~ $ fetchmail
1 message for alex at fencepost.gnu.org (4871 octets).
fetchmail: MDA returned nonzero status 75
reading message alex@fencepost.gnu.org:1 of 1 (4871 octets) not flushed

Die Lösung? Jetzt wird es mühsam. Der Anleitung auf dem Wiki habe ich nicht folgen können. Das hat einfach nicht funktioniert.

Folgende Lösung reisst sicherlich ein grosses Loch in die Sicherheit vom System. Allerdings: In meinem Fall haben ja nur meine Frau und ich Zugriff auf den Rechner und der Rechner dient nur dazu, Mail zu holen und zu speichern. Deswegen will ich es wagen. Gerne würde ich die “richtige” Lösung kennen!

pi@raspberrypi ~ $ ls -l /usr/lib/dovecot/dovecot-lda
-rwxr-xr-x 1 root root 17896 Feb 10  2013 /usr/lib/dovecot/dovecot-lda
pi@raspberrypi ~ $ sudo chgrp mail /usr/lib/dovecot/dovecot-lda
pi@raspberrypi ~ $ sudo usermod -a -G mail alex
pi@raspberrypi ~ $ sudo usermod -a -G mail claudia

Wenn du eine bessere Lösung weist, bin ich dir für jeden Tipp dankbar.

Falls du weitere Probleme hast, hier noch ein paar Tipps für die Spurensuche.

Probleme beim Sieve werden hier aufgeführt:

alex@raspberrypi ~ $ cat .dovecot.sieve.log 

Und natürlich sieht man noch eine Ausgabe im /var/log/syslog bzw /var/log/mail.log. Hier mit einem Test Mail, wo ich die Spam-Kopfzeile gleich selber hinein geschrieben habe:

pi@raspberrypi ~ $ tail /var/log/mail.log
...
Oct  4 13:55:23 raspberrypi dovecot: lda(alex): sieve: msgid=<m27gdt2la7.fsf@gnu.org>: stored mail into mailbox 'Junk'

Erfolg!

Von aussen zugänglich: Dynamic DNS

Ist man im eigenen, drahtlosen Netz, kann man nun schon problemlos Mails lesen. Als IMAP Server kann man raspberrypi.local angeben, Benutzer alex, Passwort wie gesetzt; Mails sendet man wie bisher via SMTP über den bestehenden SMPT host. Das machen wir nicht über den Raspberry Pi, weil es uns nicht mehr Sicherheit sondern nur mehr Aufwand beschehrt.

Was muss ich aber tun, damit der Raspberry Pi von aussen zugänglich ist?

Hierfür brauche ich ein Dynamic DNS setup. In meinem Fall habe ich beschlossen, mail.alexschroeder.ch zu verwenden. Die Domäne alexschroeder.ch habe ich schon. Der Hosting Provider hat schon ein Setup, welches mir die Kontrolle des Eintrages erlaubt.

In der Anleitung des Hosting Providers habe ich den entscheidenden Hinweis bekommen: Im Verzeichnis ~/.dnsupdate seien zwei Dateien für mich abgelegt.

alex@mirabel:~$ ls .dnsupdate/
Kalex.+157+53225.key  Kalex.+157+53225.private

Diese beiden Dateien brauche ich bei mir. Und dann brauche ich noch ein Script, welches den Update macht:

pi@raspberrypi ~ $ mkdir .dnsupdate
pi@raspberrypi ~ $ scp alex@epfarms.org:.dnsupdate/* .dnsupdate/
pi@raspberrypi ~ $ mkdir bin
pi@raspberrypi ~ $ vi bin/update-ip

Der Inhalt des Skripts muss natürlich angepasst werden. icanhazip.com ist einer der vielen Websites, welche einem die eigene IP Adresse (also die Adresse des Routers, also des Apple AirPort) anzeigt.

pi@raspberrypi ~ $ cat bin/update-ip 
#!/bin/sh
IPADDR=`wget -qO - icanhazip.com`
echo "update delete mail.alexschroeder.ch. A" > ~/.dnsupdate/nsupdate
echo "update add mail.alexschroeder.ch. 21600 IN A $IPADDR" >> ~/.dnsupdate/nsupdate
echo "" >> ~/.dnsupdate/nsupdate
nsupdate -k /home/pi/.dnsupdate/Kalex.+157+53225.key /home/pi/.dnsupdate/nsupdate

Das Skript mache ich noch ausführbar:

pi@raspberrypi ~ $ chmod +x bin/update-ip

Zum Inhalt des Skriptes. Ich generiere mir eine Liste von Befehlen in ~/.dnsupdate/nsupdate, welche ich mit dem nsupdate Kommando am Ende ausführe. Dies löscht die bestehende IP Nummer für mail.alexschroeder.ch und legt sie neu an. Hierbei verwende ich die IP Nummer, welcher ich gerade eben herausgefunden habe.

Ich kann das auch von Hand überprüfen:

pi@raspberrypi ~ $ bin/update-ip
pi@raspberrypi ~ $ cat ~/.dnsupdate/nsupdate 
update delete mail.alexschroeder.ch. A
update add mail.alexschroeder.ch. 21600 IN A 178.83.163.103

pi@raspberrypi ~ $

Selbst die Leerzeile am Ende stimmt.

Ob es funktioniert hat, kann ich ebenfalls herausfinden:

pi@raspberrypi ~ $ dig mail.alexschroeder.ch
...
;; ANSWER SECTION:
mail.alexschroeder.ch.	21415	IN	A	178.83.163.103
...

Super Sache! Jetzt fehlt nur noch eins: der Email Client findet die IP Nummer meines Routers und muss von diesem noch an den Raspberry Pi weiter geleitet werden. Das nennt man port mapping und wird beim Apple AirPort mit dem AirPort Dienstprogramm konfiguriert: Base station auswählen → Manual → Advanced → Port Mapping → + klicken. Es handelt sich um einen IMAP Server und entsprechend muss der TCP Port 993 (also mit Zugriff per SSL) auf die IP Nummer des Raspberry Pi umgeleitet werden. In meinem Beispiel ganz oben, dort wo es um die statische IP Nummer im drahtlosen Netz ging, war das die Nummer 10.0.1.10.

Im Normalfall verwendet man im Heimnetz DHCP, um IP Nummern dynamisch zu verteilen. Wenn man also hier aufhört, kann es passieren, dass der DHCP Server im Router immer wieder mal die Nummer 10.0.1.10 vergibt, obwohl unser Raspberry Pi diese Nummer fix verwendet. Dann kriegt man ab und zu die Fehlermeldung, dass ein anderer Computer im Netz die gleiche IP Nummer verwendet. Normalerweise ist das kein schlimmes Problem, weil die Nummer ja dynamisch vergeben wird. Der Computer ist dann einfach kurze Zeit offline und kriegt dann wieder eine neue IP Nummer. Aber besser ist natürlich, diese Konflikte zu vermeiden. Deswegen muss man eine Ausnahme definieren. Im AirPort Dienstprogramm ist das beispielsweise im Reiter Network → DHCP Reservations → + klicken. Die beiden Werte haben wir uns oben abgeschrieben, als wir auf dem Raspberry Pi ifconfig ausgeführt haben:

Description: Rapsberry Pi
  Reserve Address By: MAC Address
  MAC Address: 80:1f:02:8f:91:26
  IPv4 Address: 10.0.1.10

Nun kann ich meinen Email Client umkonfigurieren, so dass ich meine Mails statt bei raspberrypi.local bei mail.alexschroeder.ch abhole. Der DNS Server von alexschroeder.ch (ns1.epfarms.net) leitet das an die IP Nummer meines Routers weiter, der Router leitet das an den Raspberry Pi weiter, und so kann der Email Client die Mails vom Raspberry Pi lesen.

Das funktioniert natürlich nur, wenn man schon einen Domänenname hat und Subdomänen selber ändern darf. Ansonsten muss man sich beispielsweise bei afraid.org etwas organisieren.

Grundsätzlich gilt, dass man bei hohem Datenaufkommen die Mails vom Server in eigene, lokale Ordner verschieben sollte. So was muss man sich halt angewöhnen. Oder eine fette SD Karte kaufen.

SD Karte: Lebenszeit

Mal schauen wie lange die Karte hält. Auf StackExchange sah ich auf alle Fälle schon die Frage, die mich ebenfalls beschäftigt: How can I extend the life of my SD card? Ich habe das so verstanden: Die Karten verteilen die Schreiblast selbstständig auf alle Sektoren und im Normalfall reicht die Karte viele Jahre. Da sich die Technologie sowieso alle paar Jahre ändert, lohnt es sich nicht, darüber nachzudenken.

Probleme mit der ursprünglichen Anleitung

In meinem .fetchmailrc hatte ich für jede Mailbox noch die Anweisung mda 'formail -c >> ~/mail/.INBOX' stehen. Das war im c’t Artikel so angegeben. Das Problem war, dass Mail zwar empfangen wird, aber nicht angezeigt wird. Das lag vermutlich daran, dass die Indexe nicht nachgeführt wurden:

alex@raspberrypi ~ $ mail -s test kensanata@gmail.com
nochmal
.
EOT
alex@raspberrypi ~ $ fetchmail
fetchmail: No mail for alex at fencepost.gnu.org
8 messages (7 seen) for kensanata at imap.gmail.com.
reading message kensanata@gmail-imap.l.google.com:8 of 8 (1662 header octets) (9 body octets) flushed
alex@raspberrypi ~ $ ls -l mail/.INBOX mail/indexes/.INBOX/dovecot.index.*
-rw------- 1 alex alex 254220 Sep 16 06:48 mail/.INBOX
-rw------- 1 alex alex  21504 Sep 16 06:37 mail/indexes/.INBOX/dovecot.index.cache
-rw------- 1 alex alex   3720 Sep 16 06:37 mail/indexes/.INBOX/dovecot.index.log

Wie man sieht, wurde der Index nicht nachgeführt. Das hat im ursprünglichen Artikel wahrscheinlich funktioniert, weil bei der Dovecot mail_location Einstellung die Anweisung für die Indexe fehlte. Das hat bei mir im Dovecot Fehlerprotokol zu Problemen geführt: das entsprechende Verzeichnis fehlte. Ohne Indexe hat aber das Setup im Artikel wahrscheinlich funktioniert: neue Mail wurde sofort erkannt. Meine Lösung: Die neue Mail wird entweder via Dovecots dovecot-mda geliefert (damit ich Spam filtern kann), oder sie kommt in den normalen Mail Spool (wenn ich nichts angebe), also nach /var/mail/alex. Von dort holt Dovecot die Mails und speichert sie in mail/.INBOX, und führt den Index nach.

Mit meiner Anleitung sollte dieses Problem nicht mehr bestehen.

Ein weiteres Problem waren hunderte von Mails von Cron, welche mich darauf hinwiesen, dass es beim DNS Update einen Fehler gegeben habe. Das erste Mail kam vom nsupdate Befehl, dann kamen weitere sechs von fetchmail. Ich vermute, dies lag daran, dass meine Rechner ab und zu nicht zu finden waren. Deswegen habe ich das nun wie folgt implementiert:

#!/bin/sh
IPADDR=`wget -qO - icanhazip.com`
if [ -n "$IPADDR" ]; then
  echo "update delete mail.alexschroeder.ch. A" > ~/.dnsupdate/nsupdate
  echo "update add mail.alexschroeder.ch. 21600 IN A $IPADDR" >> ~/.dnsupdate/nsupdate
  echo >> ~/.dnsupdate/nsupdate
  nsupdate -k /home/pi/.dnsupdate/Kalex.+157+53225.key /home/pi/.dnsupdate/nsupdate
fi
if test $((`date +%s` - `date -r ~/.dnsupdate/nsupdate +%s`)) -gt $((6 * 60 * 60)); then
  echo No IP number for 6h
fi

Falls ich also eine IP Nummer bekomme, dann schreibe ich das Kommando und führe es aus. Falls das Kommando mehrere Stunden lang nicht geschrieben wurde, gebe ich eine Warnung aus, welche automatisch ein Mail generiert, welches ich aber erst bekommen werde, wenn die Verbindung wieder hergestellt wird. Damit will ich nur vermeiden, dass ich tagelang keine Ahnung habe, dass es immer wieder zu längeren Ausfällen kommt. Desweiteren habe ich mir einen eigenen Service geschrieben, der mir meine IP Nummer liefert, und zu guter Letzt habe ich noch eine weiter Fehlermeldung eingebaut:

#!/bin/sh
IPADDR=`wget -qO - https://alexschroeder.ch/ip`
if [ -n "$IPADDR" ]; then
  echo "update delete mail.alexschroeder.ch. A" > ~/.dnsupdate/nsupdate
  echo "update add mail.alexschroeder.ch. 21600 IN A $IPADDR" >> ~/.dnsupdate/nsupdate
  echo >> ~/.dnsupdate/nsupdate
  if ! nsupdate -k /home/pi/.dnsupdate/Kalex.+157+53225.key /home/pi/.dnsupdate/nsupdate; then
    echo nsupdate fail:
    cat ~/.dnsupdate/nsupdate
  fi
fi
if test $((`date +%s` - `date -r ~/.dnsupdate/nsupdate +%s`)) -gt $((6 * 60 * 60)); then
  echo No IP number for 6h
fi

Comments

Alex - nice work! Thanks for taking the time to write it up.

– charlie 2013-10-12 09:58 UTC


Gute Anleitung, bin ebenfalls gerade daran etwas in die Richtung zu bauen, aber: der NSA schlägt man damit kein Schnippchen, denn die Mails liegen immernoch bei Google & Co bis sie abgerufen werden.

Was müsste man tun, damit die Mails direkt auf den Raspberry ankommen? MX Record der Domain per Script oben auf die IP deines Raspberry ändern, aber wie müsst der Raspberry konfiguriert sein?

Grüße

ML

– Meister Longus 2013-11-07 08:28 UTC


Mein aktuelles Setup für Email, die nicht via Google kommt: Ich habe einen Server im Internet, mit fixer IP Nummer und allem was dazu gehört. Dort ist exim4 installiert und so konfiguriert, dass er Mails für meine Domänen annimmt. Bei meinem DNS Provider (Gandi) verwende ich ein Zonefile, welches ein MX Record für meinen Server im Internet hat, und von dem hole ich alle 10 Minuten meine Mail via Raspberry Pi. Ich traue mich im Moment noch nicht, den Raspberry Pi direkt anzugeben. Da hat es immer noch zu viele Unwägbarkeiten.

  1. Ich hatte eine Weile lang immer wieder einen Systemabsturz auf dem Raspberry Pi. Einfach nicht mehr zu erreichen. Im Moment habe ich das so “gelöst”, dass der Raspberry Pi via cronjob in den frühen Morgenstunden neu gebootet wird. Ziemlich unelegant, würde ich sagen.
  2. Ich rufe jede Stunde ein Script auf (mittlerweile verwende ich nicht mehr die Lösung mit nsupdate; Gandi unterstützt nur ein XMLRPC Protokoll, so dass ich ein entsprechendes Script von einem anderen Benutzer verwende). Dieses Script liefert mir auch immer wieder Fehler. Update ging nicht aus was weiss ich für Gründen. MX Records verdoppeln sich. Das ist mir zu riskant.

Sobald ich Zeit habe, um daheim mal längere Mails zu beantworten, bewege ich alle Mails vom Raspberry Pi auf meine lokale Maschine. Wer weiss, wie sicher der Raspberry Pi wirklich ist. Alle Mail liegt also ein paar Minuten auf meinem Server im Internet, und ein paar Tage auf dem Raspberry Pi, bevor sie in der Offline Welt verschwinden.

AlexSchroeder 2013-11-07 09:43 UTC


Hallo Alex,
hab deinen Artikel voller Freude gefunden und wollte gerade anfangen die Installation umzusetzen. Doch leider fehlt bei dir genau der Part, den ich im ct Artikel schlecht beschrieben finden: Die EXIM4 Installation! Was fehlt den funktional bei dir wenn du kein EXIM4 installiert hast? Sendest du deine Mails direkt per smtp über einen publik Mail Server? Dann hast du die versendeten Mails auch nicht im IMAP Ordner “gesendet”, oder?
Mfg Bernd

– 2013-11-29 16:04 UTC


Ist das überhaupt möglich, gar kein Mail auf einem GNU/Linux System? Wenn ein cronjob fehlschlägt, probiert das System beispielsweise eine Mail zu verschicken. Zumindest lokal sollte Mail also funktionieren, meiner Meinung nach.

Meine Mails sende ich direkt via SMTP an einen öffentlichen Mail Server. Mein Mail Client (zB. das iPhone) speichert eine Kopie dieser Mail im IMAP Ordner “Sent Mail” – und Dovecot richtet alles korrekt ein, damit das auch funktioniert. Hierfür wird EXIM4 also nicht benötigt.

AlexSchroeder 2013-11-29 16:54 UTC


Mit cron-apt meldet sich das System, wenn es Upgrades zu installieren gibt.

AlexSchroeder 2014-01-09 23:51 UTC


Wer ein anderes Tutorial sucht, wird vielleicht in der englischen Serie auf Ars Technica fündig. Erster Artikel: How to run your own e-mail server with your own domain, part 1. Heute habe ich auf alle Fälle probiert, auf meinem “richtigen” Rechner (also nicht auf dem Raspberry Pi) den Exim4 richtig zum laufen zu kriegen, so dass wir über den Mail verschicken können, aber es will einfach nicht klappen. TLS geht nicht, oder die selbst-signierten Zertifikate sind nicht gültig, und wie kann man Authentifizierung erzwingen. Eine mühsames, mühsames Geschäft. Zum Brechen.

AlexSchroeder 2014-02-19


Und mit dem vi muss man sich nun wahrlich nicht abquälen, der ist was für Masochisten. Der Raspberry hat natürlich den erheblich besseren “nano” an Bord! Außerdem ist noch ein kleiner Dreckfuhler dort versteckt, denn es soll sicher “Kurze Einführung...” heisen beim vi, oder?

Thema SD Karte: Das Problem ist wenn man Class 10 Karten verwendet und den RasPi übertaktet. Das sollte man mit Class 10 Karten nicht machen sondern immer Class 4 Karten dafür verwenden. Der Dateizugriff ist etwas langsamer aber man kann gefahrlos übertakten Eine Class 4 Karte sollte also problemlos halten.

Woe wärs noch jetzt mit einem Webmailer um die Mails mit dem Browser abzuholen ?? Squirrel Mail und Roundcube sind da ja die Klassiker.

– wwinzig 2014-02-26 12:03 UTC


Als Emacs User finde ich vi natürlich sehr gewöhnungsbedürftig, aber nano finde ich noch schlimmer...

Webmailer finde ich halt noch mal ein Risiko mehr – und für mich völlig unnötig, da ich Mails mit der Mail Applikation auf meinem Telefon lese und nicht über einen Web Browser.

AlexSchroeder 2014-02-26 12:31 UTC


Nach DSA-2896-1 openssl -- security update zum Thema Heartbleed den Anleitungen auf dem Debian Wiki (zu einer früheren Sicherheitslücke) folgen.

sudo apt-get update
sudo apt-get upgrade
sudo rm /etc/dovecot/dovecot.pem /etc/dovecot/private/dovecot.pem
sudo dpkg-reconfigure dovecot-core
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server

Etwas nachdenken muss man bei den privaten Schlüsseln in ~/.ssh – falls welche vorhanden sind. Falls man diese Schlüssel neu generiert, muss man die hinterlegten Schlüssel auf Savannah, GitHub, und so weiter natürlich ebenfalls erneuern.

ssh-keygen

– AlexSchroeder 2014-04-09 12:23 UTC


Beim Austauschen aller Schlüssel und dem Ändern aller Passwörter ist mir aufgefallen, dass ein Schritt in meiner Kette nicht mehr funktioniert. Im Artikel selber schrieb ich, dass im ~/.fetchmailrc von meinem Benutzer zwei hosts abgefragt werden. In Tat und Wahrheit hat es aber noch einen dritten Eintrag, wo ich Mail von einem selber eingerichteten Server hole!

poll psithyrus
  protocol imap
  user alex
  pass '*secret*'
  ssl sslcertck
  sslcertfile .ssh/psithyrus.pem

Hier ist relevant, dass ich auf dem Psithyrus Rechner ja den Schlüssel gelöscht habe. Also muss ich den wieder zu mir kopieren: von psithyrus:/etc/dovecot/dovecot.pem nach raspberrypi:.ssh/psithyrus.pem – und das Passwort musste ich natürlich auch anpassen.

– AlexSchroeder 2014-04-09 20:29 UTC


Den YouTube Video zum Thema fand ich auch gut. Blog Post gibt es auch dazu.

– Alex Schroeder 2014-09-11 20:43 UTC


Hi and many thanks for the walk-through to configure a private email server. You were mentioning difficulties with dovecot-lda. Alternatively, for the purpose of filtering similarly to what sieve does in your configuration, it may be possible to remain with procmail as MTA for fetchmail but use a procmailrc such as follows:

1. file: /etc/procmailrc
1. system-wide settings for procmail
SHELL="/bin/bash"
SENDMAIL=/usr/sbin/sendmail
SENDMAILFLAGS="-oi"
LOGFILE="/var/log/procmail.log"
DELIVER="/usr/lib/dovecot/deliver"
DROPPRIVS=yes
1. fallback:
DEFAULT="$HOME/mail/"
MAILDIR="$HOME/mail/"
0 w
* ^X-Spam-Status: Yes
| $DELIVER -m Junk
:0 w
* ^X-GMX-Antispam: [1-9]+
| $DELIVER -m Junk
:0 w
* ^X-GMX-Antivirus: [1-9]+
| $DELIVER -m Junk
:0 w
* ^X-Spam-Level: \*+
| $DELIVER -m Junk
:0 w
* ^X-Spam-Flag: Yes
| $DELIVER -m Junk
:0 w
| $DELIVER

(It may be possible to simplify this further. Not sure about the values set by GMX for the X-GMX- headers, could not find their documentation.)

– Ralf 2014-11-09 17:37 UTC


Many years ago I had a very elaborate procmail setup. Good times! :)

– Alex Schroeder 2014-11-09 18:48 UTC


Oh, and I realized that the remaining articles of the Ars Technica series went live ages ago:

Taking e-mail back, part 2: Arming your server with Postfix and Dovecot, Taking e-mail back, part 3: Fortifying your box against spammers, Taking e-mail back, part 4: The finale, with webmail & everything after.

– Alex Schroeder 2014-11-09 18:54 UTC


Hi,

ich bin mit der Anleitung der ct, ergänzt um um den Pfad für Index(e), in ein Problem gerannt bei dem Dovecot offenbar die Daten nicht sauber gelesen hat. Nachdem ich (vergeblich) das Thema “Daten im NFS” (hatte sie ursprünglich auf den NAS gelegt) beackert habe, bin ich auf Deine Anleitung gestossen.

Habe dann mda /usr/lib/dovecot/dovecot-lda benutzt. Bin nicht sicher ob das Nachführen der Indexe jetzt klappt, könnte aber sein.

Zumindest tauchen keine errors mehr im logfile auf:) Damit hättest Du meiner lange Suche schon mal ein mögliches Ende bereitet, ich weiss gar nicht mehr wie lange ich an dem System jetzt schon bastele!

Das Problem das ich jetzt habe ist:

Mit der “alten” Lösung habe ich in den .fetchmailrc der einzelnen User die gewünschten Mailboxverzeichnisse mit formail direkt in die “Mailboxen” (.INBOX, .SENT etc) sortieren lassen.

Mit der dovecot-lda-Lösung kann ich a) kein Verzeichnis beim Provider angeben, dann wird nur .INBOX abgeholt oder b) Verzeichnisse (zusätzlich wie der alten Lösung) angeben, dann wird aber trotzdem alles in .INBOX abgelegt. Wenig spassig;)

Wie hast Du das denn gelöst mit den Verzeichnissen?

Zum einen brauche ich .SENT weil die clients direkt über den smtp des Providers gehen (ok zur Not könnte ich sicher auch die Einsatzfähigkeit des exim vorziehen), zum anderen besteht immer noch die Möglichkeit daß jemand direkt im Webmail des Providers arbeitet. Und im Moment werden noch beide Lösungen (imap beim Provider und raspberry) parallel benutzt - das will ich erst ändern wenn der Raspberry 100% läuft. Im Moment würde ich halt gerne die unterschiedlichen Verzeichnisse abfragen. Wenn das geht. Ohne daß das alles in .INBOX landet.

Achja, und für einen speziellen Absender wird auf dem Server auch noch gleich sortiert in ein Verzeichnis.

Muss ich das alles irgendwie über den Sieve basteln? Mit dem hatte ich noch nie zu tun und eigentlich wollte ich an Filter und Spam erst rangehen wenn der Rest läuft... Quasi die Kür nach der Pflicht...

Danke,
Michael.

– Michael 2015-03-31 22:34 UTC


Ach, wargs, vergiss die Frage... -m und dann den Folder angeben ist die Lösung... Ich habe heute einfach schon zu lange gebastelt:(

So wie es aussieht - das wird sich erst in den nächsten Tagen zeigen - ist Deine Lösung die Mails nicht mit formail zu verteilen genau die Richtige. Danke, Danke!

Jetzt kann ich wahrscheinlich daran gehen die Daten wieder auf NFS zu schieben von wo ich sie geholt habe weil ich dachte da kämen die defekten Mails her^^

– Michael 2015-03-31 22:42 UTC


Hah, viel Glück!

Bei mir läuft der Raspberry Pi inzwischen nicht mehr als vollwertiger Mail Server. Die Mails kommen an, alle Benutzer haben eine ~/.forward Datei, welche die Mails an Google weiter leiten. Mein Problem: Bei all den Sicherheitsdiskussionen zum Thema SSH, Zertifizierung und so weiter stelle ich fest, wie wenig sattelfest ich bin. Und dann muss ich abwägen:

  1. Wenn meine Sicherheitsinfrastruktur gut ist, bin ich gegen Schnüffler und Verbrecher geschützt.
  2. Wenn meine Sicherheitsinfrastruktur schlecht ist, bin ich gegen niemanden geschützt.
  3. Wenn ich meine Mails bei Google habe, bin ich auf alle Fälle gegen Verbrecher geschützt.

Falls ich zwischen #1 und #2 mangels Know How nicht unterscheiden kann, scheint mir #3 die beste Alternative.

– Alex Schroeder 2015-04-01 08:29 UTC


@Alex: Deine Überlegungen finde ich sehr gut, gerade wenn man solche Lösungen auf günstigen vHost installiert. Mir scheint allerdings die Lösung 3 dann doch etwas übertrieben, da Google und die NSA nicht evtl. Deine Mails lesen, sondern es definitiv tun. Da empfehle ich lieber Dienste wie posteo https://posteo.de/de da werden die Daten auf Wunsch komplett verschlüsselt gespeichert. Die einzige Lücke ist, wenn jemand Dein Passwort herausbekommt, was ein Server-Anbieter natürlich immer tun kann. Das ganze für 1€/Monat.

– niels 2015-04-27 05:14 UTC


Vielleicht ist das ja die richtige Lösung. Ich habe von Posteo noch nie gehört und sehe keinen Anlass, denen wirklich zu trauen. Bei Google kenne ich wenigstens ein paar Mitarbeiter, die sehr integer wirken. Aber ich gebe zu, Über Posteo liest sich sehr positiv.

– Alex Schroeder 2015-04-27 05:57 UTC


Alternativ geht auch Mailbox.org (https://mailbox.org/) dahinter steckte eine Firma die schon seid Jahren sich mit Linux beschäftigt. Ich denke beide sind vertrauenswürdig, denn es ist relativ blöd so einen Aufwand zu treiben, wenn man eigentlich doch an die Daten ran will. Aber das muss natürlich jeder selber wissen. Weil ein paar Leute bei Google integer wirken auf die gesamte Mail-Manschaft zu schließen + dem Wissen, dass sie Daten lesen und auch rausgeben müssen, finde ich da schon gewagter.

– niels 2015-05-17 18:50 UTC


Hallo, sehr interessante Diskussion. Ich habe mir einen Pi zugelegt, um damit Smart Home-Themen zu realisieren (vor allem kabelgebundene Temperaturmessung). Mein Mailserver läuft auf einem Synology NAS hinter einer dynamischen IP, holt die Mails vom gleichnamigen Mailkonto auf Strato ab und versendet über das Strato-Relais. Per IMAP greife ich dann problemlos von diversen Clients (iphone, android, Lubuntu, Mac) auf den Server zuhause zu. Die Mails liegen nur ein paar Minuten bei Strato und werden auf dem NAS regelmäßig automatisch auf ein zweites NAS gebackuped. Ich weiß nicht, ob das interessant ist, wollte es hier aber anmerken. Durch die Software von Synology entfällt vieles von der aufwändigen Mailserverkonfiguration. Inwieweit das unsicher sein könnte kann ich allerdings nicht einschätzen.

– Ben 2015-10-11 05:05 UTC


Heute habe ich im c't einen äusserst positiven Artikel zu Posteo gelesen.

– Alex Schroeder 2015-11-02 12:14 UTC


Ich habe gerade mein Modem gewechselt und habe damit auch einen neuen Router erhalten.

Local IP 192.168.0.199
Local start port 993 Local end port 993 External start port 993 External end port 993 Protocol TCP
Enabled On
alex@Megabombus:~$ raspberrypi 
Warning: Permanently added the RSA host key for IP address '192.168.0.199' to the list of known hosts.
pi@raspberrypi.local's password: 
Linux raspberrypi 4.1.13+ #826 PREEMPT Fri Nov 13 20:13:22 GMT 2015 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No mail.
Last login: Sun Jun 26 07:18:43 2016
pi@raspberrypi ~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:81:a6:af  
          inet addr:192.168.0.199  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::ba27:ebff:fe81:a6af/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:922 errors:0 dropped:0 overruns:0 frame:0
          TX packets:739 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:155632 (151.9 KiB)  TX bytes:95488 (93.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:60 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:5744 (5.6 KiB)  TX bytes:5744 (5.6 KiB)

pi@raspberrypi ~ $ bin/update-ip

Nun muss ich nur noch schauen, ob ich auch Email versenden und empfangen kann. :)

(Mehr Info auch hier: Kallobombus Mail.)

– Alex Schroeder 2016-06-27 20:20 UTC


Zwei weitere Probleme:

  1. Mein neues Modem erlaubt mir kein Port Forwarding auf den Port 25. Wie mühsam. Im Moment leite ich den externen Port 587 auf den internen Port 25, wo Exim die SMTP Verbindungen entgegennimmt.
  2. How to upgrade a Wheezy image to Jessie

Ich habe leider so viele Änderungen an den Dovecot, Spam-Assassin, DKIM und sonstigen Konfigurationsdateien gemacht, dass ich beschlossen habe, überall die Kopie der Maintainer zu übernehmen und für Debian Jessie wieder von vorne zu beginnen.

Erster Test:

Kann ich mir selber eine Mail schreiben?

pi@raspberrypi ~ $ mail pi
Subject: test
local delivery
.
EOT
pi@raspberrypi ~ $ mail
No mail for pi

Tönt nach einem Problem.

pi@raspberrypi ~ $ sudo doveadm log errors
pi@raspberrypi ~ $ sudo tail /var/log/exim4/mainlog
pi@raspberrypi ~ $ sudo tail /var/log/exim4/rejectlog

Keine Hinweise. Mist!

Mal schauen:

pi@raspberrypi ~ $ sudo less /var/log/mail.log
...
Jul  7 19:41:33 raspberrypi postfix/pickup[31950]: 5E4E3175: uid=1000 from=<pi>
Jul  7 19:41:33 raspberrypi postfix/cleanup[1892]: warning: connect to Milter service inet:localhost:12301: Connection refused
Jul  7 19:41:33 raspberrypi postfix/cleanup[1892]: 5E4E3175: message-id=<20160707174133.5E4E3175@mail.alexschroeder.ch>
Jul  7 19:41:33 raspberrypi postfix/qmgr[31951]: 5E4E3175: from=<pi@alexschroeder.ch>, size=477, nrcpt=1 (queue active)
Jul  7 19:41:33 raspberrypi postfix/cleanup[1892]: 8551F3D: message-id=<20160707174133.5E4E3175@mail.alexschroeder.ch>
Jul  7 19:41:33 raspberrypi postfix/qmgr[31951]: 8551F3D: from=<pi@alexschroeder.ch>, size=611, nrcpt=1 (queue active)
Jul  7 19:41:33 raspberrypi postfix/local[1894]: 5E4E3175: to=<pi@alexschroeder.ch>, orig_to=<pi>, relay=local, delay=0.27, delays=0.16/0.07/0/0.04, dsn=2.0.0, status=sent (forwarded as 8551F3D)
Jul  7 19:41:33 raspberrypi postfix/qmgr[31951]: 5E4E3175: removed
Jul  7 19:41:33 raspberrypi dovecot: lmtp(1897): Connect from local
Jul  7 19:41:33 raspberrypi dovecot: lmtp(1897, alex): 4Oe4LU2UfldpBwAAE+zmiA: msgid=<20160707174133.5E4E3175@mail.alexschroeder.ch>: saved mail to INBOX
Jul  7 19:41:33 raspberrypi postfix/lmtp[1896]: 8551F3D: to=<alex@alexschroeder.ch>, orig_to=<pi>, relay=mail.alexschroeder.ch[private/dovecot-lmtp], delay=0.42, delays=0.02/0.02/0.18/0.2, dsn=2.0.0, status=sent (250 2.0.0 <alex@alexschroeder.ch> 4Oe4LU2UfldpBwAAE+zmiA Saved)
Jul  7 19:41:33 raspberrypi dovecot: lmtp(1897): Disconnect from local: Successful quit
Jul  7 19:41:33 raspberrypi postfix/qmgr[31951]: 8551F3D: removed
...

Cool, die Mail wurde also irgendwo abgespeichert. Bloss wo? Ich rate mal, /var/mail/alex und prüfe das Ende der Datei:

pi@raspberrypi ~ $ sudo tail -n 27 /var/mail/alex 
From pi@alexschroeder.ch  Thu Jul 07 19:41:33 2016
Return-Path: <pi@alexschroeder.ch>
Delivered-To: <alex@alexschroeder.ch>
Received: from mail.alexschroeder.ch
	by mail.alexschroeder.ch (Dovecot) with LMTP id 4Oe4LU2UfldpBwAAE+zmiA
	for <alex@alexschroeder.ch>; Thu, 07 Jul 2016 19:41:33 +0200
Received: by mail.alexschroeder.ch (Postfix)
	id 8551F3D; Thu,  7 Jul 2016 19:41:33 +0200 (CEST)
Delivered-To: pi@alexschroeder.ch
Received: by mail.alexschroeder.ch (Postfix, from userid 1000)
	id 5E4E3175; Thu,  7 Jul 2016 19:41:33 +0200 (CEST)
Date: Thu, 07 Jul 2016 19:41:33 +0200
To: pi@alexschroeder.ch
Subject: test
User-Agent: Heirloom mailx 12.5 6/20/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20160707174133.5E4E3175@mail.alexschroeder.ch>
From: pi@alexschroeder.ch
X-UID: 14343
Status: 
X-Keywords:                                                                        
Content-Length: 15

local delivery

OK, das Allerwichtigste funktioniert also.

Im Moment funktioniert der Mail Zugriff von aussen allerdings nicht. Das heisst IMAP, das heisst Dovecot, das heist Port 993 prüfen, SSL prüfen, Benutzer authorisierung prüfen, und Ordnerstruktur prüfen. Im /etc/dovecot/conf.d/ hat es ziemlich viele Dateien mit der Endung .ucf-dist und .ucf-old. Die muss ich mir mal anschauen.

Mittels egrep filtere ich alle Leerzeilen und alle reinen Kommentarzeilen raus, damit ich klarer sehe, was denn überhaupt eingestellt wird.

pi@raspberrypi /etc/dovecot/conf.d $ egrep -v '^( *#|$)' 10-auth.conf
disable_plaintext_auth = yes
auth_username_format = %Ln
auth_mechanisms = plain
!include auth-system.conf.ext

Sieht vernünftig aus?

pi@raspberrypi /etc/dovecot/conf.d $ egrep -v '^( *#|$)' 10-mail.conf
mail_location = mbox:~/mail:LAYOUT=maildir++:INBOX=/var/mail/%u:CONTROL=~/mail/control:INDEX=~/mail/indexes
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail

Das mit der mail_location bleibt ein Mist, bin ich einverstanden. Aber so weiss ich wenigstens, dass die INBOX die Datei /var/mail/pi ist. Und dort habe ich ja meine Test Mail gefunden. Also sieht das auch vernünftig aus.

Bei 10-ssl.conf gab es Änderungen, die nicht so vernünftig aussehen. Also schnell sudo vi 10-ssl.conf angeworfen, so dass das Resultat dann so aussieht:

pi@raspberrypi /etc/dovecot/conf.d $ egrep -v '^( *#|$)' 10-ssl.conf
ssl = required
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem

Also habe ich ssl zwingend gemacht und die schon früher mal generierten .pem Dateien auskommentiert...

Mit 20-lmtp.conf bin ich auch nicht zufrieden. Da ist sieve rausgefallen. Also wieder editieren bis es wie folgt aussieht:

pi@raspberrypi /etc/dovecot/conf.d $ egrep -v '^( *#|$)' 20-lmtp.conf
protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

Konfiguration neu laden mit sudo doveadm reload und dann wieder versucht, Mail mit meinem iPhone zu lesen...

Und es hat geklappt!

pi@alexschroeder.ch
test
local delivery

Yay!

– Alex Schroeder 2016-07-07


Please make sure you contribute only your own work, or work licensed under the GNU Free Documentation License. Note: in order to facilitate peer review and fight vandalism, we will store your IP number for a number of days. See Privacy Policy for more information. See Info for text formatting rules. You can edit the comment page if you need to fix typos. You can subscribe to new comments by email without leaving a comment.

To save this page you must answer this question:

Please say HELLO.