Roundcube webmail

3 gennaio 2021 Roberto Puzzanghera4 commenti

Roundcube è una webmail avanzata con una bella interfaccia grafica.

Changelog

  • Gen 3, 2021
    disabled the SMTP authentication when sending messages via RC. SMTP port changed to 25.

Aggiornare Roundcube all'ultima versione 1.4.3

La seguente procedura è stata testata a partire alla versione 1.3.x di Roundcube, sia per quanto riguarda la migrazione a una minor release che a una major release.

Leggere qui https://github.com/roundcube/roundcubemail/wiki/Changelog#RELEASE1.4.5 per maggiori informazioni.

NB: è necessario abilitare il supporto mysql a pdo compilando il php con l'opzione --with-pdo-mysql

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

cd /var/www
wget https://github.com/roundcube/roundcubemail/releases/download/1.4.10/roundcubemail-1.4.10-complete.tar.gz
tar xzf roundcubemail-1.4.10-complete.tar.gz
# spostiamo la cartella di RC appena creata in una directory temporanea, da cui lanceremo lo script per l'aggiornamento
mv roundcubemail-1.4.10 rc-temp
# rimuoviamo il link simbolico
rm roundcube
# spostiamo la vecchia installazione. Questa cartella verrà sovrascritta durante il processo di upgrade
mv roundcubemail-1.4.9 roundcubemail-1.4.10
# ripristiniamo il link simbolico
ln -s roundcubemail-1.4.10 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-1.4.9

La versione 1.4 aggiunge 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

* An IMAP, HTTP and SMTP server
* .htaccess support allowing overrides for DirectoryIndex
* PHP Version 5.4 or greater including:
- PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required)
- PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required)
- Iconv, Zip, Fileinfo, Intl, Exif (recommended)
- LDAP for LDAP addressbook support (optional)
- GD, Imagick (optional thumbnails generation, QR-code)
* PEAR and PEAR packages distributed with Roundcube or external:
- Mail_Mime 1.10.0 or newer
- Net_SMTP 1.8.1 or newer
- Net_Socket 1.0.12 or newer
- Net_IDNA2 0.1.1 or newer
- Auth_SASL 1.0.6 or newer
- Net_Sieve 1.4.3 or newer (for managesieve plugin)
- Crypt_GPG 1.6.3 or newer (for enigma plugin)
- Endroid/QrCode 1.6.0 or newer (https://github.com/endroid/QrCode)
- Kolab/Net_LDAP3 1.0.6 or newer (for LDAP addressbook)
- Masterminds/HTML5 2.5.x (optional HTML parser)
* php.ini options:
- error_reporting E_ALL & ~E_NOTICE & ~E_STRICT
- memory_limit > 16MB
- file_uploads enabled (for uploading attachments and import files)
- session.auto_start disabled
- suhosin.session.encrypt disabled
- mbstring.func_overload disabled
- pcre.backtrack_limit >= 100000
* A MySQL, PostgreSQL, MS SQL Server (2005 or newer), Oracle database
or SQLite support in PHP - with permission to create tables
* Composer installed either locally or globally (https://getcomposer.org)

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

Estensioni opzionali

Rispetto alla versione 0.4.2, una estensione addizionale raccomandata è intl, che è già inclusa e abilitata in PHP-5.3, e che sulla mia Slackware richiede le ICU headers and libraries. Infatti, durante la configurazione, è possibile avere questo errore:

checking for icu-config... no
checking for location of ICU headers and libraries... not found
configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.

Installazione di ICU

ICU dovrebbe essere disponibile come pacchetto compilato per la vostra distribuzione (su Slackware è presente nella 14.2). In caso contrario configurare, compilare e installare come al solito:

cd /usr/local/src
wget http://download.icu-project.org/files/icu4c/4.8.1/icu4c-4_8_1-src.tgz
tar xzvf icu4c-4_8_1-src.tgz
cd icu
chown -R root.root .
cd source
./configure
make
make install

Abilitare intl con php>=5.4

Installare ICU, quindi configurare php con --enable-intl

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 'localhost' naturalmente.

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_server'] = 'tls://yourdomain.tld';
// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
$config['smtp_port'] = 587;
// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$config['smtp_user'] = '%u';
// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$config['smtp_pass'] = '%p';

// 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'

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 | Permalink

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 | Permalink

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 | Permalink

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 | Permalink