Roundcube webmail

19 maggio 2024 by Roberto Puzzanghera 4 commenti

19 maggio 2024: vulnerabilità nella webmail Roundcube. E' sufficiente aggiornare Roundcube all'ultima versione.


Roundcube è una webmail avanzata con una bella interfaccia grafica.

Changelog

  • Sep 7, 2024
    RC update to v. 1.6.9
  • May 19, 2024
    RC update to v. 1.6.7 (security fix)
  • Sep 28, 2022
    RC upgraded to v. 1.6.6
    -new $config['imap_host'] variable
    -all my SMTP config options were stripped from my configuration file and I had to restore them
  • Gen 3, 2021
    disabled the SMTP authentication when sending messages via RC. SMTP port changed to 25.

Leggere qui https://github.com/roundcube/roundcubemail/blob/master/CHANGELOG.md per maggiori informazioni.

Aggiornamento 

Il processo di aggiornamento è veramente semplice, notevolmente migliorato rispetto al passato. E' sufficiente decomprimere il pacchetto in una cartella temporanea, rinominare il vecchio Roundcube da sovrascrivere e lanciare lo script per l'aggiornamento dalla linea di comando come segue. Nella mia installazione la posizione della cartella di Roundcube è /var/www/roundcube

RC_NEW=1.6.9
RC_OLD=1.6.8

cd /var/www
wget https://github.com/roundcube/roundcubemail/releases/download/${RC_NEW}/roundcubemail-${RC_NEW}-complete.tar.gz
tar xzf roundcubemail-${RC_NEW}-complete.tar.gz
# spostiamo la cartella di RC appena creata in una directory temporanea, da cui lanceremo lo script per l'aggiornamento
mv roundcubemail-${RC_NEW} rc-temp
# rimuoviamo il link simbolico
rm roundcube
# spostiamo la vecchia installazione. Questa cartella verrà sovrascritta durante il processo di upgrade
mv roundcubemail-${RC_OLD} roundcubemail-${RC_NEW}
# ripristiniamo il link simbolico
ln -s roundcubemail-${RC_NEW} roundcube
# pronti per il lancio..
./rc-temp/bin/installto.sh /var/www/roundcube/

Seguire le istruzioni. Questo processo richiede che i comandi php e rsync siano nel PATH.

Ora è possibile cancellare la cartella temporanea usata in precedenza:

cd ..
rm -r rc-temp roundcubemail-${RC_OLD}

Dalla versione 1.4 sono state aggiunte alcune nuove impostazioni per quanto riguarda SMTP, quindi è necessario dare uno sguardo alla configurazione più sotto.

Problemi

L'installazione dei vari plugin è ora centralizzata nella repository https://plugins.roundcube.net/ e il processo di aggiornamento è gestito da composer, che deve aggiornato per primo quando si migra da una versione precedente. Infatti ho ricevuto questo messaggio di avviso quando ho lanciato l'aggiornamento dei plugin:

# sudo -u apache php composer.phar update --no-dev
Warning: This development build of composer is over 30 days old. It is recommended to update it by running "composer.phar self-update" to get the latest version

Sfortunatamente la versione di composer che era installata non era compatibile con php-7.2, quindi ho dovuto scaricarlo e aggiornarlo manualmente andando a sostituire il file composer.phar file. E dal momento che composer deve essere lanciato da apache, è necessario fare in modo che apache possa sovrascrivere questo file per i futuri auto-aggiornamenti (nel mio caso era un file con privilegi root:apache):

chmod g+w composer.phar

Nel corso dei miei tentativi di aggiornamento dalla linea di comando, mi è risultato chiaro che la cartella /srv dovesse avere i privilegi di scrittura da parte dell'utente apache, dal momento che esso cerca di creare una sotto cartella "httpd", pertanto:

chown -R apache /srv/

Per evitare altri errori ricordarsi di assegnare privilegi di scrittura ad apache nelle cartelle "plugins" e "vendor" e anche ai file composer.lock e composer.phar:

chown -R vendor plugins composer.lock composer.phar
crypt_gpg caused me problems because of broken links that I solved in this way:

cd vendor/bin
rm crypt-gpg-pinentry
ln -s ../pear/crypt_gpg/scripts/crypt-gpg-pinentry crypt-gpg-pinentry

Un'altra richiesta rispetto al passato è che php necessita del supporto ldap al fine di gestire gli aggiornamenti via composer, compilandolo in questo modo:

--with-ldap

Prerequisiti

Prima di iniziare si vedano i prerequisiti di installazione qui.

Di seguito mostrerò come installare roundcube in un ambiente Linux/Apache/MySQL/PHP + qmail.

Configurazione di php

Questa è una configurazione di php minimale che soddisfa tutti i prerequisiti di Rouncube di cui sopra nel mio virtual server Slackware:

./configure \
        --with-libdir=lib64 \
        --with-mysqli=/usr/bin/mysql_config \
        --with-pdo-mysql=/usr \
        --disable-mysqlnd \
        --with-mcrypt \
        --enable-gd \
        --enable-mbstring \
        --with-zip \
        --with-zlib \
        --with-bz2 \
        --enable-sockets \
        --with-openssl \
        --enable-intl \
        --with-ldap

Notare che una estensione addizionale raccomandata è intl, che è già inclusa e abilitata in PHP-5.3 e successivi, e che a sua volta richiede le ICU headers and libraries.

Installazione di Roundcube

Scaricare la tarball da http://roundcube.net/download, scompattare e settare i privilegi per la cartella come segue:

cd /var/www
tar xzf roundcubemail-x.x.x.tar.gz
ln -s roundcubemail-x.x.x roundcube
cd roundcube
chown -R root.apache .
chmod -R o-rx .
chmod g+w logs temp

Creare l'utente mysql e il database; assegnare a tale utente privilegi limitati:

# mysql -u root -p

CREATE USER 'roundcube'@'[yout-IP]' IDENTIFIED BY '***';
GRANT USAGE ON * . * TO 'roundcube'@'[your-IP]' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

CREATE DATABASE IF NOT EXISTS `roundcube` ;
GRANT ALL PRIVILEGES ON `roundcube` . * TO 'roundcube'@'[your-IP]';

[your-IP] rappresenta qui l'IP del server httpd. Se esso coincide con il server MySQL si può usare '127.0.0.1' naturalmente. E' stato fatto presente da qualcuno nei commenti che quando si usa 'localhost' si genera un segfault in php-7.4.33 lanciando il programma /install

Ora puntare il browser su http://url-to-roundcube/installer/ e seguire le istruzioni. Io ho lasciato le impostazioni predefinite ad eccezione dell'interfaccia per mysql di php (selezionare mysqli se disponibile nel vostro httpd server). Non dimenticare di copiare i parametri del database e di impostare l'indirizzo IP del server IMAP. Impostare username_domain al vostro dominio di defalut per evitare di loggarsi digitando anche la parte dopo la @ del vostro indirizzo email.

Copiare il file default.inc.php in config.inc.php nella cartella config. Impostare poi i privilegi per mettere in sicurezza Roundcube:

cd config
chown root.apache *
chmod o-r *

Se tutti i test sono andati bene rimuovere la cartella installer come raccomandato e disabilitare l'installazione nel file di configurazione:

$config['enable_installer'] = false;

Suggerisco di abilitare queste opzioni; la prima abilita la creazione delle cartelle di default (Posta inviata, Cestino, Spam etc.) la prima volta che vi loggate:

// Name your service. This is displayed on the login screen and in the window title
$config['product_name'] = 'My Organization Name - Webmail';

// Log successful/failed logins to /userlogins or to syslog (important to activate fail2ban later)
$config['log_logins'] = true;
// Automatically add this domain to user names for login
$config['username_domain'] = 'yourdomain.net';
// default setting if preview pane is enabled
$config['preview_pane'] = true;
// declaring the auth type speeds up the imap connection with 0.5 version!!
$config['imap_auth_type'] = NULL;

// ----------------------------------
// SMTP
// ----------------------------------
// SMTP server host (for sending mails).
// Enter hostname with prefix tls:// to use STARTTLS, or use
// prefix ssl:// to use the deprecated SSL over SMTP (aka SMTPS)
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['smtp_host'] = 'tls://domain.tld';
$config['smtp_auth_type'] = 'LOGIN';

// enforce connections over https
// with this option enabled, all non-secure connections will be redirected.
// set the port for the ssl connection as value of this option if it differs from the default 443
$config['force_https'] = true;
// this key is used to encrypt the users imap password which is stored
// in the session record (and the client cookie if remember password is enabled).
// please provide a string of exactly 24 chars.
$config['des_key'] = '123456789123456789123456';
// Absolute path to a local mime.types mapping table file.
// This is used to derive mime-types from the filename extension or vice versa.
// Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system,
// download it from http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
$config['mime_types'] = '/absolute/path/to/apache/conf/mime.types';
// path to imagemagick identify binary
$config['im_identify_path'] = '/usr/local/bin/identify';
// path to imagemagick convert binary
$config['im_convert_path'] = '/usr/local/bin/convert';
// use this format for date display (date or strftime format)
$config['date_format'] = 'd-m-Y';
// automatically create the above listed default folders on first login
$config['create_default_folders'] = true;
// If true all folders will be checked for recent messages
$config['check_all_folders'] = true;

// the new 'elastic' theme is the default in 1.4.1 version
$config['skin'] = 'elastic'

// Automatically register user in Roundcube database on successful (IMAP) logon. 
// Set to false if only registered users should be allowed to the webmail. 
// Note: If disabled you have to create records in Roundcube users table by yourself. 
// Note: Roundcube does not manage/create users on a mail server. 
$config['auto_create_user'] = true;

Notare che stiamo utilizzando la porta 587 per fare comunque l'autenticazione SMTP. Ciò può essere importante se si vogliono usare le funzionalità di cui alla patch rcptcheck (limitare il numero massimo di email in uscita da parte di un utente), che deve identificare l'auth-user.

Se invece non si ha intenzione di usare queste funzionalità è possibile usare la porta SMTP 25 lasciando vuoti i parametri $config['smtp_user'] e $config['smtp_pass'] per disabilitare l'autenticazione. Ciò ovviamente andrebbe fatto solo se la comunicazione tra Roundcube e la nostra MTA avviene nella rete interna.

Setting up composer

La maggior parte dei plugin di Roundcube sono disponibili su https://plugins.roundcube.net/ e la maniera migliore di installarli e aggiornarli è usare composer. Dal momento che composer deve essere lanciato da apache, è necessario impostare opportunamente i privilegi in alcune cartelle e file ove l'utente apache deve poter scrivere.

cd /var/www/roundcube
chown -R root:apache .

mkdir -p /srv/httpd
chown -R apache:apache /srv/httpd

touch composer.lock
chown apache:apache composer.lock composer.phar

chmod -R g+w plugins vendor

Vedremo come installare e aggiornare i plugin nella prossima pagina.

Commenti

Utilissimo!!!

Grazie mille, non sapevo come procedere all'installazione di intl (su PHP 5.2) e mi hai risolto il problema!!! Mitico!

Rispondi |

Aiuto please

Salve,

vorrei sapere come fare per accedere alla webmail senza passare dalla pagina di login, vorrei passare username e password tramite GET nella url

Grazie

Rispondi |

Re: aiuto please

Non credo proprio che sia possibile. Roundcube è programmato per leggere quei valori dalla variabile $_POST di php.

Però potresti replicare l'html del form in una pagina web qualunque, sempre che sia questo ciò che ti serve fare:

<form name="form" action="http://mail.tuodominio.it/" method="post">
<div>
Utente <input name="_user" id="rcmloginuser" size="12" autocomplete="off" value="" type="text" />
</div>
<div>
Password <input name="_pass" id="rcmloginpwd" size="12" autocomplete="off" type="password" />
</div>
<input type="submit" value="Invio" />
</form>

Rispondi |

Per accedere e loggarsi

Per accedere e loggarsi a roudcube dall'esterno, ti consiglio di utilizzare questa classe:

http://blog.philippheckel.com/2008/05/16/roundcube-login-via-php-script/

Rispondi |