Roundcube neben Nextcloud

Roundcube 1.4.3 ganz einfach neben Ihrer bestehenden Nextcloud installieren? Abgesichert mit einem zweiten Faktor (2FA) und der bereits für Nextcloud eingerichteten fail2ban-Software? Zudem carddav für die Integration Ihrer Nextcloud Kontakte nutzen? Kein Problem! Folgen Sie dieser Anleitung und passen dabei bitte einfach die roten Werte entsprechend Ihrer Umgebung an.

Die ausführliche Aktualisierungshistorie finden Sie hier.

Installieren Sie ein php-Modul und sichern die bestehende Nextcloud vHost-Datei:

sudo -s
apt install php-pear unzip -y && service php7.4-fpm restart && service nginx stop
cp /etc/nginx/conf.d/nextcloud.conf /etc/nginx/conf.d/nextcloud.conf.bak

Passen Sie die vHost-Datei /etc/nginx/conf.d/nextcloud.conf an, ergänzen Sie die roten Zeilen:

...
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location ^~ /emails/ {
client_max_body_size 1024M;
proxy_buffering off;
proxy_connect_timeout 3600;
proxy_max_temp_file_size 1024M;
proxy_pass http://127.0.0.1:83;
proxy_redirect off;
proxy_request_buffering off;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
send_timeout 3600;
}
client_max_body_size 10240M;
location / {
...

Erzeugen Sie die neue vHost-Datei für Roundcube:

nano /etc/nginx/conf.d/roundcube.conf:

Kopieren Sie alle nachfolgenden Zeilen hinein:

server {
server_name 127.0.0.1;
listen 127.0.0.1:83 default_server;
include /etc/nginx/proxy.conf;
root /var/www/;
client_max_body_size 1024M;
access_log /var/log/nginx/roundcube.access.log;
error_log /var/log/nginx/roundcube.error.log warn;
charset utf-8;
location ^~ /emails { 
index index.php;
location ~ ^/favicon.ico$ {
root /var/www/emails/skins/default/images;
log_not_found off;
access_log off;
expires max;
}
location ~ ^/emails/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
deny all;
}
location ~ ^/emails/(bin|SQL|config|temp|logs)/ {
deny all;
}
location ~ /emails/\.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
include php_optimization.conf;
fastcgi_index index.php;
try_files $uri =404;
}
location ~ /emails/\.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
}

Überprüfen Sie die Webserverkonfiguration durch:

nginx -t

und starten dann den Webserver neu:

service nginx restart

Wechseln Sie in das Arbeitsverzeichnis und laden die Roundcubesoftware herunter um mit der Installation beginnen zu können (alternativ: Download und Installation Roundcube):

cd /usr/local/src
wget https://github.com/roundcube/roundcubemail/releases/download/1.4.3/roundcubemail-1.4.3-complete.tar.gz
tar xfz roundcubemail-1.4.3-complete.tar.gz &&  mv roundcubemail-1.4.3 emails
mv emails /var/www/ && chown -R www-data:www-data /var/www/

Erzeugen Sie die Roundcubedatenbank:

mysql -h localhost -uroot -p -e "CREATE DATABASE emails CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES on emails.* to nextcloud@localhost; FLUSH privileges"

Rufen Sie Roundcube in Ihrem Browser auf (https://your.dedyn.io/emails/installer/) und führen alle Installationsschritte durch. Im Anschluß an die Installation wird das „installer“-Verzeichnis /var/www/emails/installer aus Sicherheitsgründen gelöscht und der Webserver neu gestartet:

rm -R /var/www/emails/installer && service nginx restart

Wenn Sie PGP für die Mailverschlüsselung und Mailentschlüsselung nutzen wollen, so sind weitere Schritte notwendig:

sudo -u www-data mkdir -p /var/www/emails/KEYS
sudo -u www-data cp /var/www/emails/plugins/enigma/config.inc.php.dist /var/www/emails/plugins/enigma/config.inc.php

Passen Sie die enigma-Konfiguration an:

sudo -u www-data vi /var/www/emails/plugins/enigma/config.inc.php

Setzen SIe den Wert für das homedir auf KEYS

$config['enigma_pgp_homedir'] = "KEYS";

Roundcube ist nun vollständig unter /var/www/emails installiert, so dass wir das System härten können.

cd /var/www/emails/plugins

Laden Sie die Zwei-Faktor-App (TOTP) von github herunter:

git clone https://github.com/alexandregz/twofactor_gauthenticator.git

Melden Sie sich von Roundcube ab und bearbeiten die Konfiguration um TOTP zu aktivieren:

sudo -u www-data vi ../config/config.inc.php

Fügen Sie twofactor_gauthenticator in das Plugins-Array hinzu:

$config['plugins'] = array('enigma', 'twofactor_gauthenticator', 'markasjunk', 'newmail_notifier', 'zipdownload');

Melden Sie sich in Roundcube anund aktivieren den zweiten Faktor:

Sie können ein neues Secret generieren oder aber auch das bestehende Secret Ihrer Nextcloud verwenden. Nach der Validierung des Codes können Sie sich nun mit Ihren Benutzerdaten und dem zweiten Faktor anmelden:

Melden Sie sich erneut von Roundcube ab und richten nun fail2ban ein:

cd /var/www/emails/plugins

Laden Sie das fail2ban-plugin herunter und entpacken es dann:

wget https://github.com/mattrude/rc-plugin-fail2ban/archive/1.3.zip
unzip 1.3 && rm 1.3.zip

Benennen Sie das Plugin um und setzen die korrekten Berechtigungen:

mv rc-plugin-fail2ban-1.3 fail2ban && chown -R www-data:www-data /var/www/emails

Erstellen Sie nun die fail2ban-Konfigurationen für Roundcube:

nano /etc/fail2ban/jail.d/roundcube.local

Kopieren Sie alle Zeilen in diese Datei:

[roundcube]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = roundcube
maxretry = 5
bantime = 1800
findtime = 36000
logpath = /var/www/emails/logs/errors.log

Erstellen Sie nun die Filterdatei:

nano /etc/fail2ban/filter.d/roundcube.conf

Kopieren Sie alle Zeilen hinein:

[Definition]
failregex = IMAP Error: Login failed for .* from <HOST>
ignoreregex =

Melden Sie sich von Roundcube ab und aktivieren fail2ban in der Konfigurationsdatei:

sudo -u www-data nano ../config/config.inc.php

Fügen Sie fail2ban‚ in das plugins-Array hinzu:

$config['plugins'] = array('enigma', 'fail2ban', 'twofactor_gauthenticator', 'markasjunk', 'newmail_notifier', 'zipdownload');

Erstellen Sie die Logdatei und starten dann fail2ban neu:

sudo -u www-data touch /var/www/emails/logs/errors.log && service fail2ban restart

Überprüfen Sie nun die erweiterte fail2ban-Überwachung:

fail2ban-client status nextcloud && fail2ban-client status roundcube

Melden Sie sich bewußt falsch an und überprüfen dann die fail2ban-Statistik erneut:

fail2ban-client status nextcloud && fail2ban-client status roundcube

Wenn Sie den fehlerhaften Anmeldeversuch protokolliert finden, dann funktioniert fail2ban wie erwünscht. Nun aktivieren wir noch die Nextcloud-Kontakte in Roundcube mittels des carddav-Plugins. Melden Sie sich von Roundcube ab und arbeiten die nächsten Zeilen ab:

mkdir -p /var/www/emails/plugins/carddav
cd /var/www/emails/plugins/carddav/
wget https://github.com/blind-coder/rcmcarddav/releases/download/v3.0.1/carddav-3.0.1.tar.bz2
tar -xjf carddav-3.0.1.tar.bz2 -C /var/www/emails/plugins
rm -f carddav-3.0.1.tar.bz2
cp -p /var/www/emails/plugins/carddav/config.inc.php.dist /var/www/emails/plugins/carddav/config.inc.php
chown -R www-data:www-data /var/www/

Laden Sie alle benötigten Dateien nach:

curl -sS https://getcomposer.org/installer | php
php7.4 composer.phar update && php7.4 composer.phar install

Bearbeiten Sie die carddav-Konfigurationsdatei, indem Sie die roten Werte setzen und die führenden ‚//‘ (sofern vorhanden) an den drei Zeilen entfernen:

chown -R www-data:www-data /var/www/
sudo -u www-data vi config.inc.php
...
$prefs['_GLOBAL']['hide_preferences'] = false;
...
$prefs['_GLOBAL']['pwstore_scheme'] = 'encrypted';
...
$prefs['_GLOBAL']['suppress_version_warning'] = false;
...

Speichern Sie die Änderungen und fügen dann abschließend das carddav-Plugin zur Roundcube-Konffiguration hinzu:

sudo -u www-data vi ../../config/config.inc.php

Fügen Sie ‚carddav‚ hinzu:

$config['plugins'] = array('carddav', 'enigma', 'fail2ban', 'twofactor_gauthenticator', 'markasjunk', 'newmail_notifier', 'zipdownload');

Speichern Sie die Datei und melden sich erneut bei Roundcube an. Konfigurieren Sie das Plugin gemäß ihrer Nextcloud – die carddav-URL sieht bspw. wie folgt aus:

https://YOUR.DEDYN.IO/remote.php/dav/addressbooks/users/YourUser/contacts/

Die Installation der Roundcube-Anwendung wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß mit Ihren Emails und Daten in Ihrer privaten Cloud, erweitert um Roundcube. Über eine Spende würden sich meine Frau, meine Zwillinge und ich sehr freuen!

© Carsten Rieger IT-Services

Carsten Rieger

Carsten Rieger ist ein angestellter Senior IT-Systemengineer und zudem auch als Kleinunternehmer (Freelancer) aktiv. Er arbeitet seit mehr als 15 Jahren im Linux- und Microsoftumfeld, ist ein Open Source Enthusiast und hoch motiviert, Linux Installationen und Troubleshooting durchzuführen. Dabei arbeitet er vorrangig mit Debian und Ubuntu Linux, Nginx und Apache Webservern, MariaDB/MySQL/PostgreSQL, PHP, Cloud Infrastrukturen (bspw. Nextcloud) und auch vielen anderen Open Source Projekten (bspw. Roundcube). Zudem engagiert er sich ehrenamtlich für die Dr. Michael & Angela Jacobi Stiftung - und das schon seit mehr als 7 Jahren.