Raspberry Pi als echten Web- und Mailserver einsetzen (German)


Postfach im Griff

Selbst ausgewachsene Aufgaben wie einen Mailserver stemmt der RasPi, wenn Sie die Ressourcen im Blick behalten und beim Setup aufpassen.
Dass sich der Raspberry Pi hervorragend als Server im LAN eignet, ist bekannt. Viele spielen aber mit dem Gedanken, ihm mehr Aufgaben anzuvertrauen, zum Beispiel als Webserver. Sicher erreicht er nicht die Leistung eines modernen Intel-Servers mit 32 Kernen. Für einfache Dienste wie Mailserver und Web host reichen seine Kräfte unter Umständen aus.
Der erste Webserver, war eine SUN Enterprise 220R, ein Monster mit vier Höheneinheiten bei voller Einbautiefe. Auf der Maschine war ein Warnhinweis zu lesen, dass zwei Personen zum Tragen nötig sind. Sie hatte zwei CPUs mit je 360 MHz und 512 MByte RAM, ähnliche Werte wie der RasPi von heute. Der Vergleich hinkt zwar etwas, aber es ist auf jeden Fall einen Versuch wert. Zum Glück benötigen einfache Webdienste nicht so viel CPU und RAM.

Vorüberlegungen

Was unterscheidet einen Home-Server von einem echten Webserver? Die Leistung mal außen vor, dann bleibt nicht mehr so viel übrig. Die bereitgestellten Dienste sollen bei beiden immer zu erreichen sein. Ein Webserver ist im Vergleich zum Server im LAN jedoch vom Internet aus erreichbar, er braucht also eine öffentliche IP-Adresse.
Möchten Sie einen vollwertigen Mailserver betreiben, benötigen Sie zusätzlich einen Reverse-DNS-Eintrag (siehe Kasten "Domain Name System"). Wenn der Rechner diese zwei Bedingungen erfüllt, dann spricht nichts dagegen, durchzustarten. Im Rechenzentrum sind diese beiden Parameter immer erfüllt. Eine öffentliche IP für den Raspberry Pi bekommen Sie dagegen auf anderem Weg: Viele DSL-Provider bieten in ihren Business-Tarifen eine feste IP an.

Domain Name System
DNS steht für Domain Name System. Kurz gesagt: Es übersetzt Namen, die sich Menschen gut merken können, in IP-Adressen. In den meisten Fällen dient dieses System tatsächlich nur zum Auflösen der Namen. Weitaus seltener benötigt ein Rechner oder Dienst die Gegenrichtung, also IP-Adresse nach Name.
Mailserver verwenden diese Reverse DNS Names, um herauszufinden, ob ihr Gegenüber selbst ein Mailserver ist oder nur ein DSL-Anschluss. Ist kein korrekter Eintrag vorhanden, weist der Server Mails von diesen Rechnern ab. Das geschieht, um die Spam-Flut etwas in Grenzen zu halten.


Allerdings empfiehlt es sich, sich vor dem Bestellen einer dieser Business-Lösungen zu erkundigen, ob Sie einen zusätzlichen Grenzrouter benötigen. Falls Sie so etwas noch nie eingerichtet haben, sollten Sie sich im Voraus Hilfe organisieren oder zumindest im Netz recherchieren, wie Sie eine solche Anbindung aufbauen.

Firewall öffnen

Es ist sicher keine gute Idee, jetzt einfach wild in der Firewall-Konfiguration herumzustochern, bis es geht. An dieser Stelle sei vor vermeintlichen Experten-Videos bei einschlägigen Plattformen gewarnt, da sich dort teilweise haarsträubende Anleitungen finden. Es sollte klar sein, dass jede Lücke hier potenzielle Sicherheitslücken schafft.
Als Erstes wählen Sie für den Raspberry Pi eine feste lokale IP-Adresse aus. Sie sollte nach Möglichkeit nicht im DHCP-Pool (siehe Kasten "Dynamische Adressen") des Routers liegen. Falls Sie hier auf Probleme stoßen, lohnt sich ein Blick in die Anleitung des Routers. Die meisten Geräte bieten heute die Möglichkeit, solche festen Adressen zu vergeben. Für das Beispiel kommt die IP-Adresse 192.168.2.160 zum Einsatz.

Dynamische Adressen
DHCP steht für Dynamic Host Configuration Protocol. Es dient dazu, an die Hosts im Netzwerk dynamisch eine Konfiguration bezüglich des Netzwerks zu verteilen. Das vereinfacht die Konfiguration von IP-Netzen erheblich und verhindert falsche Einstellungen am Client-PC. Bevor es das Protokoll gab, galt es, alle Parameter fest in die Rechner einzutragen.
Ein einfaches Beispiel zeigt nun, wie DHCP das Leben leichter macht: Angenommen, das Standard Gateway eines Netzwerks ändert sich, so musste der Administrator früher zu jedem Rechner laufen und die Konfiguration manuell ändern. Heute ändert er den Eintrag im DHCP-Server und alle Clients holen sich die neuen Werte.
Es ist darüber hinaus möglich, mit DHCP einer bestimmten MAC-Adresse immer eine feste IP zu geben. Auf diese Weise realisieren Sie über DHCP eine statische Konfiguration für Server im Netzwerk.
DHCP vermag erheblich mehr als nur IP-Adressen an PCs zu verteilen. Es hilft ebenfalls beim Einsatz von Rechnern ohne Festplatte, denn es verteilt bei Bedarf die Informationen über die Bootimages.

Achten Sie beim Manipulieren der Firewall darauf, dass Sie genau nur die Ports öffnen, die Sie für den Server benötigen. Bei einigen Routern nennt sich der Punkt Port-Weiterleitung. Wie das im Einzelfall geht, beschreibt die Anleitung des Routers. Abbildung 1 zeigt die Konfiguration des Routers im Testsetup.



Ein einfacher Webserver lauscht auf Port 80 und auf Port 443 (HTTPS). Port 25 (SMTP) ist für den Mailserver reserviert. Hier sei noch einmal der Rat gegeben, im Zweifel lieber zu wenige als zu viele Ports zu öffnen. Die Tabelle "Dienste" zeigt eine Auswahl, welche Ports Sie für welche Dienste benötigen. Um eine Übersicht über alle Dienst/Port-Zuordnungen zu bekommen, werfen Sie einen Blick in die Datei /etc/services.

Dienste
Dienst
Port
HTTP
80
HTTPS
443
SMTP
25
IMAP
143
IMAPS
993
SSH
22

Von FTP sei hier abgeraten, da es erstens nur unverschlüsselt Daten überträgt und Sie komplette Bereiche öffnen müssten, um es zu verwenden; SCP/SFTP ist hier die bessere und zeitgemäße Alternative. Telnet kommt aus Sicherheitsgründen nicht infrage. Für den Shell-Zugriff ist SSH besser geeignet.


Raspberry Pi vorbereiten

Für diesen Workshop dient die Debian-basierte Distribution Raspbian als Grundlage. Die aktuelle Version laden Sie entweder aus dem Web oder nehmen die Version von der Heft-DVD. Anschließend entpacken Sie die Daten und schreiben Sie auf eine SD-Karte (Listing 1).
Listing 1
$ unzip 2014-12-24-wheezy-raspbian.zip
$ sudo dd if=2014-12-24-wheezy-raspbian.img of=/dev/sdd

Die SD-Karte stecken Sie in den Raspberry, schließen Monitor und Tastatur an und starten direkt in das Programm raspi-config hinein. Dort erweitern Sie das Dateisystem und ändern das Passwort für den User pi.
In den Advanced Options setzen Sie das GPU-RAM runter auf 16 MByte, suchen bei Bedarf einen neuen Hostnamen aus und schalten SSH ein. Schnell noch sudo apt-get update und sudo apt-get upgrade ausführen und der Raspberry Pi ist bereit für den Einsatz.

Feste IP

Der Raspberry Pi braucht im lokalen Netz eine feste IP-Adresse, damit er über die entsprechenden Firewall-Regeln immer zu erreichen ist. Die Konfiguration legen Sie, wie bei fast allen Linux-Systemen, in der Datei /etc/network/interfaces fest.
Diese editieren Sie nun so, dass Sie den DHCP-Teil für das verwendete Netzwerk-Interface auskommentieren und dafür eine statische IP-Konfiguration eintragen (Listing 2) Im Beispiel heißt die Schnittstelle eth0.
Listing 2
auto lo
iface lo inet loopback
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.2.160
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 192.168.2.1

Nach dem Speichern booten Sie den Rechner einmal neu. Das ist zwar grundsätzlich bei Linux nicht nötig, hat aber den Charme, dass Sie sicher sind, dass alle Dienste die neue Konfiguration des Netzwerks verinnerlicht haben.

Platz schaffen

Bevor Sie mit der Installation des Webservers weitermachen, lohnt es sich, auf dem Dateisystem etwas Ordnung zu schaffen. Jedes nicht benötigte Stück Software auf einem Server ist eine potenzielle Sicherheitslücke und nimmt zusätzlich Platz für die wichtigen Dienste weg. Wenn Sie den Rechner nur für die im Workshop vorgesehenen Dienste nutzen, dürfen Sie einige Pakete getrost entfernen (Listing 3).
Listing 3
sudo apt-get remove x11-common midori lxde python3 python3-minimal
sudo apt-get autoremove
sudo apt-get clean
Die Parameter autoremove und clean weisen Apt an, alle heruntergeladenen Archive und temporären Dateien zu entfernen. Durch diese Entrümpelungsaktion gewinnen Sie in der Regel etwa 1,2 GByte an Plattenplatz und haben die für einen Server unnötige Software entfernt.

Software installieren

Am Ende sollen auf dem Raspberry Pi ein kompletter Webserver, eine Datenbank und ein Mailserver laufen. Ein Punkt, auf den Sie dabei immer achten sollten, ist das IP-Protokoll: Der Raspberry hat von Haus aus nur IPv4 an Bord. Alle Dienste, die Sie installieren, unterstützen aber schon IPv6. Das erzeugt immer wieder Fehler. Diese Tatsache sollten Sie im Hinterkopf behalten, falls beim Start von Diensten Fehler mit dem Netzwerk auftauchen. Dann lohnt es sich zu prüfen, ob der Dienst nicht versucht hat, eine IPv6-Adresse zu binden.
Zuerst installieren Sie die Datenbank. Das ist die einzige Komponente, die bei der Installation eine wichtige Eingabe verlangt. Es handelt sich dabei um das Root-Passwort für die Datenbank, das Sie später brauchen und daher gut verwahren sollten.

Software einrichten

Die MySQL-Datenbank übernimmt primär das Verwalten der Mailkonten, darf aber auch für andere Zwecke zum Einsatz kommen. Das Skript createMailDB.sql legt die Datenbank vmail an, die folgende drei Tabellen enthält:
  • users: Sie enthalten die E-Mail-Adressen des Users mit ihren Passwörtern.
  • domains: Diese Tabelle enthält die Domains, für die sich der Mailserver zuständig fühlt.
  • aliases: Regeln zum Weiterleiten von E-Mails.
Zu guter Letzt legt es einen Benutzer (vmail) an, mit dem Sie später auf die Datenbank zugreifen. Falls Sie für diesen ein eigenes Passwort verwenden möchten, was sehr zu empfehlen ist, ändern Sie vor dem Ausführen des Skripts in der letzten Zeile das Passwort. Listing 4 zeigt, wie Sie die Datenbank installieren und das Skript anwenden.
Listing 4
sudo apt-get install mysql-server
mysql -u root -p < createMailDB.sql


Die Datenbank ist nun vorbereitet, und jetzt ist es an der Zeit, mit der Installation der restlichen Komponenten zu beginnen. Wenn sich das Setup von Postfix meldet, wählen Sie das entsprechende Interface aus und tragen die Maildomäne ein. Das Roundcube-Paket möchte das Passwort für den Root-User der Datenbank. Zusätzlich braucht es noch ein Passwort, um die eigene Konfiguration zu schützen. Listing 5 zeigt, welche Pakete Sie für den Aufbau brauchen.
Listing 5
sudo apt-get install dovecot-common dovecot-imapd dovecot-mysql dovecot-lmtpd postfix postfix-mysql apache2 roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra

Dovecot einrichten

Im Test kam Dovecot als IMAP-Server zum Einsatz, das bedeutet, er verwaltet die Postfächer. Dazu muss die Software wissen, wer ein Postfach auf dem Server hat. Die Benutzer verwalten Sie in diesem Fall via MySQL. Das bedeutet, diese User sind nicht als Benutzer im System angelegt, also quasi nur virtuell vorhanden.
Das vereinfacht die Administration erheblich. Um den im System schon vorhandenen Usern nicht ins Gehege zu kommen, legen Sie eigens für die von Dovecot verwalteten Postkörbe einen neuen User an. Nennen Sie ihn der Einfachheit halber vmail, weil er zum Verwalten der virtuellen Mailbenutzer gedacht ist. Außerdem legen Sie gleich für die Postkörbe ein Verzeichnis mit den passenden Berechtigungen an (Listing 6).
Listing 6
sudo mkdir /var/vmail
sudo useradd vmail
sudo chown -R vmail:vmail /var/vmail
sudo chmod -R 770 /var/vmail/

Nun teilen Sie dem Dovecot-Server mit, wie er an die User-Informationen aus der Datenbank herankommt. Dazu editieren Sie einige Konfigurationsdateien. Starten Sie dabei mit /etc/dovecot/conf.d/10-mail.conf. Diese öffnen Sie mit einem Editor Ihrer Wahl und ändern die Zeilen entsprechend Listing 7. Falls einige Parameter nicht vorhanden sind, fügen Sie diese einfach hinzu. Damit teilen Sie dem Server mit, wo er die Postfächer anlegen soll und mit welchem Betriebssystem-User er auf diese Verzeichnisse Zugriff hat.
Listing 7
mail_home = /var/vmail/%d/%n
mail_location = maildir:~/mail:LAYOUT=fs
mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail

In der Datei /etc/dovecot/conf.d/10-auth.conf setzen Sie einige Parameter für das Authentifizieren (Listing 8).
Listing 8
# /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
#!include auth-system.conf.ext
Anschließend nehmen Sie noch einige grundlegende Einstellungen an Dovecot vor. Das erledigen Sie in /etc/dovecot/dovecot.conf (Listing 9)
Listing 9
!include_try /usr/share/dovecot/protocols.d/*.protocol
listen = *
base_dir = /var/run/dovecot/
# Greeting message for clients.
login_greeting = Dovecot ready.
!include conf.d/*.conf
!include_try local.conf

Nun definieren Sie einige Sockets, was ermöglicht, dass Postfix und Dovecot miteinander kommunizieren. Die beiden tauschen Login-Informationen und E-Mails über diese Schnittstelle aus (Listing 10).
Listing 10
#/etc/dovecot/conf.d/10-master.conf
service auth {
    unix_listener auth-userdb {
        mode = 0600
        user = vmail
        group = vmail
    }
    # Postfix smtp-auth
    unix_listener /var/spool/postfix/private/auth {
        mode = 0660
        user = postfix
        group = postfix
    }
}
service lmtp {
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
      mode = 0660
      group = postfix
      user = postfix
    }
    user = vmail
}

Damit Dovecot die Möglichkeit hat, sich selbst über E-Mails zu melden, benötigt es noch eine Mailadresse für den Postmaster. Es verhält sich überaus unkooperativ, wenn Sie diese nicht setzen. Zu diesem Zweck verwenden Sie in der Datei /etc/dovecot/conf.d/15-lda.conf den Parameter postmaster_address.

Sichere Verbindungen

Alle in diesem Artikel verwendeten Zertifikate rufen eine Warnung hervor, da sie nicht von einer richtigen Zertifizierungsstelle signiert sind. Zum Ausprobieren ist das aber ein praktikabler Weg. Es gibt zwei Alternativen, mit denen Sie diese Meldung verhindern: Sie arbeiten komplett unverschlüsselt. Das ist nicht zu empfehlen. Oder Sie besorgen sich ein offizielles Zertifikat. Es gibt Anbieter, die für einen bestimmten Zeitraum signierte Zertifikate bereitstellen. So haben Sie die Möglichkeit, zu testen. Meist verfallen diese Zertifikate nach 90 Tagen. Zu Testzwecken reicht es, nach der Installation den Server mit den vorhandenen Zertifikaten zu betreiben (Listing 11), auch wenn man weiß, dass das Fehlermeldungen produziert.
Listing 11
#/etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem
ssl_protocols = !SSLv2 !SSLv3
ssl_cipher_list = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA

In der Datei /etc/dovecot/dovecot-sql.conf.ext teilen Sie Dovecot mit, dass es die Informationen über die User und die Domänen aus der MySQL-Datenbank erhält. Dovecot ist nun vollständig eingerichtet und bereit, die Postfächer zu verwalten.
Listing 12
driver = mysql
connect = host=127.0.0.1 dbname=vmail user=vmail password=vmailpasswort
default_pass_scheme = SHA512-CRYPT
password_query = SELECT username, domain, password FROM users WHERE username = '%n' AND domain = '%d'
#iterate_query = SELECT username, domain FROM users

Postfix einrichten

Postfix ist die Komponente im Mailsystem, die sich um das Zustellen kümmert. Dovecot stellt die Briefkästen bereit; Postfix ist der Postbote. Damit dieser Austausch klappt, bearbeiten Sie die Datei /etc/postfix/main.cf entsprechend (Listing 13). Das beinhaltet auch die Verbindungen zu den Tabellen in der Datenbank, wie den Zugang via SSL.


Listing 13
#/etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
##### TLS parameters ######
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mydestination =
recipient_delimiter =
inet_interfaces = all
myorigin = /etc/mailname
inet_protocols = all
###### SASL Auth ######
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
inet_protocols = ipv4
##### TLS parameters ######
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
###### Use Dovecot LMTP Service to deliver Mails to Dovecot ######
virtual_transport = lmtp:unix:private/dovecot-lmtp
##### Only allow mail transport if client is authenticated or in own network (PHP Scripts, ...) ######
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
###### MySQL Connection ######
virtual_alias_maps = mysql:/etc/postfix/virtual/mysql-aliases.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mysql-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/virtual/mysql-domains.cf
local_recipient_maps = $virtual_mailbox_maps
###### SASL Auth ######
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

Wenn Sie Ihre master.cf mit der Datei von der DVD überschreiben, ist es notwendig, dass Sie den Parameter myhostname= wieder auf den Wert setzen, der zu Ihrem Setup passt. In die Datei /etc/postfix/master.cf fügen Sie die Zeilen aus Listing 14 ein.
Listing 14
submission inet n       -       -       -       -       smtpd -v
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Nachdem Sie alle Einstellungen in main.conf vorgenommen haben, erzeugen Sie die Dateien für den Zugriff auf MySQL. Diese legen Sie am besten in ein separates Verzeichnis, um sie vom Rest der Konfiguration zu trennen.
sudo mkdir /etc/postfix/virtual
sudo chmod 660 /etc/postfix/virtual/

In der Datei /etc/postfix/virtual/mysql-aliases.cf definieren Sie die SQL-Parameter für die Alias-Tabelle (Listing 15). In /etc/postfix/virtual/mysql-maps.cf legen Sie die SQL-Parameter für die Auswahl der Benutzer ab und /etc/postfix/virtual/mysql-domains.cf liefert die Liste der Domains, für die sich Postfix verantwortlich fühlt. Denken Sie daran, dass Sie hier das Passwort für den Benutzer vmail korrekt einsetzen.
Listing 15
user = vmail
password = Passwort
hosts = 127.0.0.1
dbname = vmail
query = SELECT destination FROM aliases WHERE source='%s'

Listing 16
user = vmail
password = Passwort
hosts = 127.0.0.1
dbname = vmail
query = SELECT * FROM users WHERE username='%u' AND domain='%d'

Listing 17
user = vmail
password = Passwort
hosts = 127.0.0.1
dbname = vmail
query = SELECT * FROM domains WHERE domain='%s'

Jetzt kommt der etwas kniffelige Teil: Sie müssen die Mailbenutzer in der Datenbank anlegen. Für die ersten Versuche reicht die Arbeit auf der Konsole. Haben Sie aber viele User zu administrieren, sollten Sie sich eine etwas elegantere Methode suchen, wie Phpmyadmin oder Heidisql.
Als Erstes erstellen Sie einen Passwort-Hash für das Passwort des jeweiligen Benutzers, im Beispiel <§§B>start123<§§B> (Listing 18). Den Hash-Wert merken Sie sich auf geeignete Weise, da Sie ihn später wieder benötigen.
Listing 18
$doveadm pw -s SHA512-CRYPT
Enter new password: start123
Retype new password: start123
{SHA512-CRYPT}$6$Ks1/Ov3KNGamfRpz$ZbuRIJ1pp1.InH9ghV9AOMXh6pd2hMkHM1Vr5vM/BVddYl1SavjUHhSpLFGmNJW8bkvusO0ahPBjwmhTuIGRK0


Jetzt erstellen Sie für die Maildomain, die entsprechenden Einträge in der Datenbank (Listing 19, Zeile 3). In die Tabelle domains tragen wir die Domäne ein, für die sich unser Mailserver zuständig fühlen soll. Es kann durchaus mehr als nur eine sein. Und es braucht nicht die zu sein, in der sich der Server selbst befindet.
In die Tabelle users tragen Sie den Mailuser mit dem erzeugten Hash ein, im Beispiel ist dies der von start123 (Listing 19, Zeile 4). Falls Sie Aliase benötigen – als Adressen, unter denen Sie einen User außerdem erreichen möchten –, tragen Sie diese analog zu Listing 19 in die Tabelle aliases ein.
Listing 19
mysql -u vmail -p
use vmail;
insert into domains (domain) values ('domain.tld');
insert into users (username, domain, password) values ('Benutzer', 'Domain', '$6$Ks1/Ov3KNGamfRpz$ZbuRIJ1pp1.InH9ghV9AOMXh6pd2hMkHM1Vr5vM/BVddYl1SavjUHhSpLFGmNJW8bkvusO0ahPBjwmhTuIGRK0 ');
insert into aliases (source, destination) values ('alias1@ubuntu-server.de', 'benutzer@ubuntu-server.de');

Um alle Änderungen an der Konfiguration anzuwenden, starten Sie jetzt den Mailserver einmal komplett neu. Dabei lohnt sich immer ein Blick in die Log-Datei, um mögliche Fehler in der Konfiguration frühzeitig zu erkennen. Für den Neustart verwenden Sie die folgenden beiden Befehle:
sudo service dovecot restart
sudo service postfix restart

Jetzt bestünde bereits die Möglichkeit, mit einem Mailclient, wie etwa Thunderbird, auf die Postfächer zuzugreifen und Mails zu versenden. Thunderbird beschwert sich zwar, wenn Sie Zertifikate verwenden, für die er keine Verifikation erhält, aber mit einem Klick fügen Sie die Ausnahme hinzu und schaffen das Problem so vorerst aus der Welt.
Der Benutzername setzt sich nach dem Schema Benutzer@Domäne zusammen. Wenn Sie nur den Benutzernamen eingeben, schafft es Dovecot nicht, Sie gegen die Datenbank zu authentifizieren.

Apache

Der Webserver Apache läuft zu diesem Zeitpunkt bereits. Bei Bedarf testen Sie dies mit einem Browser. Tippen Sie die lokale IP des Rechners ein, sollten Sie die Standardseite des Servers sehen. Nun bestünde die Möglichkeit, den Apache mit mehreren virtuellen Hosts zu konfigurieren. Im konkreten Fall ist das aber nicht nötig.
Beim Apache ist der HTTPS-Modus ab Werk noch nicht aktiviert. Das erledigen Sie mit den folgenden Kommandozeilen:
sudo a2enmod  ssl
sudo a2ensite default-ssl
sudo service apache2 restart

Die dritte Zeile startet dabei den Dienst einmal neu, um die Änderungen anzuwenden. Nach dem Neustart sollten Sie wieder die Startseite sehen, wenn Sie per HTTPS auf die lokale IP-Adresse des Rechners zugreifen.

Roundcube

Nun fehlt nur noch der webbasierte Mailclient Roundcube, um das Projekt zu einem erfolgreichen Abschluss zu bringen. Der Einfachheit halber fügen Sie den Inhalt der Datei /etc/roundcube/apache.conf in /etc/apache2/sites-available/default-ssl ein, am besten vor der zweitletzten Zeile </VirtualHost>.
Im Anschluss kommentieren Sie noch die zwei Aliase für Roundcube wieder ein (Listing 20).
Listing 20
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /roundcube /var/lib/roundcube

Jetzt nehmen Sie noch in der Konfigurationsdatei /etc/roundcube/main.inc.php von Roundcube einige Anpassungen vor, um sich mit Roundcube an dem vorhandenen Mailserver anzumelden (Listing 21).
Listing 21
$rcmail_config['default_host'] = 'localhost';
$rcmail_config['default_port'] = 143;
$rcmail_config['imap_auth_type'] = PLAIN;
$rcmail_config['smtp_server'] = 'localhost';
$rcmail_config['smtp_port'] = 25;
$rcmail_config['smtp_auth_type'] = 'PLAIN';

Die Login-Methode PLAIN birgt auf dem lokalen Rechner insofern ein geringeres Risiko, da die unverschlüsselten Passwörter nicht über das Internet übertragen werden. Sie dürfen Roundcube selbst natürlich nicht über eine unverschlüsselte Verbindung bereitstellen, sonst hätten Sie das Problem von Passwörtern im Klartext im Internet.
In Roundcube loggen Sie sich mittels Browser über https://IP-Adresse/roundcube/ ein, wobei Sie für die IP-Adresse die des RasPi einsetzen. Hier bekommen Sie ebenfalls die bekannte Meldung, dass es nicht möglich sei, das Zertifikat zu verifizieren.

Passwort-Plugin

Aktuell steht in der Datenbank nur ein Passwort-Hash für das Passwort start123. Das ist suboptimal. Sie haben zwar die Möglichkeit, mit doveadm pw -s SHA512-CRYPT jederzeit zusätzliche Passwörter zu generieren und in die Datenbank einzufügen. Aber das sind alles Tätigkeiten, die nur der Administrator durchführen darf. Die Benutzer haben keinen Zugriff auf die Datenbank.
Es gibt für Roundcube jedoch ein Plugin zum Ändern der Passwörter. Sie aktivieren es, indem Sie in der Konfigurationsdatei /etc/roundcube/main.inc.php von Roundcube die folgende Zeile eintragen:
$rcmail_config['plugins'] = array('password');
Jetzt nehmen Sie noch einige kleine Änderungen an der Konfiguration der Plugins selbst vor. Dazu kopieren Sie sich eine schon komplett gefüllte Vorlage und editieren sie (Listing 22).
Listing 22
sudo cp /usr/share/roundcube/plugins/password/config.inc.php.dist /etc/roundcube/plugins/password/config.inc.php

Nun machen Sie die Verbindung zur Datenbank bekannt und passen das Passwort im Update-String an (Listing 23). Damit ist die Konfiguration schon abgeschlossen, und Sie haben die Möglichkeit, zu testen, ob es einwandfrei klappt (Abbildung 2).
Listing 23
$rcmail_config['password_db_dsn'] = 'mysql://vmail:Passwort@localhost/vmail';
$rcmail_config['password_query'] = 'update users set password = ENCRYPT(%p,concat("$6$",SUBSTRING(SHA(RAND()),-16))) where username=%l and domain=%d Limit 1';
$rcmail_config['password_crypt_hash'] = 'sha512';


Abbildung 2: Das Passwort-Plugin von Roundcube ermöglicht es Benutzern, ohne erweiterte Rechte das Passwort für einen Mailaccount in der Datenbank zu ändern.

Fazit

Der Raspberry Pi ist durchaus als kleiner Server zu gebrauchen. Ein Mailsystem mit einigen Benutzern läuft gut, eine Webseite mit einfachen PHP-Skripten stellt die Hardware vor keine großen Probleme. Von der Leistung her konkurriert damit der Mini-PC in etwa mit einem kleinen virtuellen Server bei einem Provider.
Bei den Kosten schlägt natürlich der DSL-Tarif mit der festen IP-Adresse zu Buche. Da heißt es schon, genauer hinsehen, ob sich das rechnet. In jedem Fall ist es ein ausgezeichnetes Lernprojekt, das viel über die Mechnismen verrät, die dabei ineinandergreifen. 
Infos
  1. Raspberry Pi: http://www.raspberrypi.org
  2. Downloads: http://www.raspberrypi.org/downloads/
  3. MySQL: http://www.mysql.de
  4. Dovecot: http://www.dovecot.org
  5. Postfix: http://de.postfix.org
  6. Roundcube: http://roundcube.net

Kommentare

Beliebte Posts aus diesem Blog

How can I transform a .jar file to a .bat file?

Ein Kleines Spiel mit Altersabfrage

Zufallszahlen und Verzweigungen in Python