OpenWRT als Mailserver mit Dovecot, fetchmail und procmail
Diese Anleitung ist Teil des Projekts OpenWRT als eierlegende Wollmilchsau.
OpenWRT bietet in seinem Repository alle Pakete an die wir benötigen. Das Sieve Plugin wurde nicht für OpenWRT übersetzt insofern kommt hier die altbewährte fetchmail – procmail Chain zum Einsatz. Im Vorfeld sollte man sich darüber im Klaren sein, ob man Dovecot im Maildir- oder im Mbox – Format betreiben möchte. Im folgendem wird eine Installation für Maildir beschrieben, wobei MBOX analog abhandelbar ist.
Als erstes installieren wir einmal alle benötigten Pakete:
opkg install fetchmail dovecot procmail sudo
Ich benötige mindestens 2 Imapkonten, also lege ich mir entsprechend 2 Konten an:
mkdir -p /home/user1 mkdir -p /home/user2
Die User müssen wir händisch im System anlegen, dazu fügen wir für jeden User in die /etc/passwd folgendes ein:
user1:x:1000:100:user1:/home/user:/bin/ash user2:x:1001:100:user2:/home/user:/bin/ash
in der /etc/shadow tragen wir für jeden User zusätzliches folgendes ein
user1:::::7:::
anschließend generieren wir die Passwörter
passwd user1
und passen die Nutzerberechtigungen an
chown user1:user /home/user1
Als nächstes wird die /etc/dovecot.conf unseren Wünschen entsprechend konfiguriert:
## Dovecot configuration file # LAN und Localhost listen = 192.168.69.1 127.0.0.1 disable_plaintext_auth = no log_path = /var/log/dovecot.log # Mein LAN ist sicher da brauche ich kein SSL. # WlAN habe ich in ein eigenes Subnetz gesteckt # und nur Zugriff via FORWARD in das Internet gestattet. # Zugriff von EXTERN erfolgt über OpenVPN. ssl = no # Dies den eigenen Gegebenheiten Anpassen. Ich benutze # hier unterschiedliche Systemuser, somit kann ich # einfacher mehrere IMAP - Accounts pflegen. mail_location = maildir:/home/%n/Maildir # Ich authentifiziere gegen die /etc/passwd.dovecot auth default { mechanisms = plain login passdb passwd-file { args = scheme=plain username_format=%n /etc/passwd.dovecot #deny = yes } userdb passwd-file { args = username_format=%n /etc/passwd.dovecot } }
Bleibt uns noch die /etc/passwd.dovecot zu erstellen. Dovecot nutzt dieses Datei in unserem Fall um zu ermitteln mit welcher UID und GID er in Verzeichnisse schreibt, welches Passwort vergeben wurde und welches das Maildirectory ist.
user1:{PLAIN}passwort1:1000:1000::/home/user1::userdb_mail=maildir:~/Maildir user2:{PLAIN}passwort2:1000:1000::/home/user2::userdb_mail=maildir:~/Maildir
Dovecot unterstützt mehrere sogenannte Password Schemes. Wir vertrauen uns, insofern wird der Einfachheit halber PLAIN genutzt. Dovecot starten und den Zugriff mittels eine beliebigen Imapclients testen:
/etc/init.d/dovecot start /etc/init.d/dovecot enable
Als nächstes sorgen wir dafür, daß procmail die Mails richtig einsortiert. Hierzu erstellen wir in jeden Homedirectory des Users eine .procmailrc die Später auch dazu dienen kann Mails gleich vorzusortieren. Meine .procmailrc ist wesentlich größer, dafür nutze ich in Thunderbird keine Regeln. Als Delivercommand nutzen wir das Dovecot eigene deliver – somit wird das Imapfolder auch immer gleich aktualisiert.
SHELL="/bin/ash" LOGFILE="/home/user1/log/procmail.log" DELIVER="/usr/lib/dovecot/deliver" DROPPRIVS="YES" DEFAULT="/home/user1/Maildir/" MAILDIR="/home/user1/Maildir/" :0 w | $DELIVER
Hier noch mal ein Beispiel für eine Regel um E-Mail von einem Bestimmten Absender in ein Unterverzeichnis einzusortieren
:0 w * ^From.*nagios@okami.de | $DELIVER -m INBOX.nagios
Als letzte Amtshandlung für den Mailempfang richtet sich jeder User fetchmail ein. Aktuell rufe ich das Abholen der E-Mail mittels der Crontab auf. Damit die User dies auch dürfen müssen wir crontab suid verpassen.
chmod +s /usr/bin/crontab #und dann als user1 crontab -e */5 * * * * fetchmail -vf /home/user1/.fetchmailrc
set postmaster root poll <deinserver.de> proto pop3 user 'user1' password 'strenggeheim' is user1 here mda "/usr/bin/procmail -d user1" ssl sslcertck sslcertpath /etc/ssl/certs sslfingerprint "00:00:00:00:00"
Ich hole meine E-Mail via SSL ab. Hierzu sind ein paar Handgriffe mehr nötig, da Zertifikate importiert werden müssen etc. Hier gibt es eine Anleitung wie man dazu normalerweise vorgeht.
Da c_rehash für OpenWRT nicht vorliegt habe ich händisch Abhilfe geschaffen.
opkg install openssl-util
Für jeden abzuholenden Mailserver geht man entsprechend vor:
cd /etc/ssl/certs openssl s_client -connect mailserver.de:995 < /dev/null > temporary.out openssl x509 -outform PEM < temporary.out > mailserver.de.cer HASH=`openssl x509 -hash -noout -in mailserver.de.cer`.0 # create link ln -s mailserver.de.cer $HASH # # fingerprint openssl x509 -fingerprint -md5 -noout -in mailserver.de.cer
Abschließend bleibt die Installation des SMTP Dienst.