roundcubeCa fait maintenant quelques temps que le webmail de linuxwall est roundcube. J'aime bien cet outil car il est réellement épuré et ne reprend que les fonctions vraiment importante du mail. Ici, pas de calendrier, de gestion partagées des taches, de notifications dans tous les sens comme on en trouve dans quasiment tous les webmails du moment, dans leurs folles courses vers le collaboratif. Roundcube fait simplement son travail: envoyer et recevoir des emails, proprement, et gérer tout cela dans des dossiers IMAP.

Jusque récemment, certaines features me manquait tout de même cruellement. Et comme la sortie imminente de la 0.3 corrige certains de ces manquements, je me suis dit qu'il fallait bien que j'en parle :) (et puis, c'est l'été, tout calme au bureau, tout ça machin).

La demo

Parce que, les discours c'est bien mais le test c'est mieux, Roland Liebl à mis en ligne une demo de la version de dev de roundcube. Ca se trouve ici : http://mail4us.net/dev (avec le compte demo/demo). Bon, alors là, Roland il a chargé tout plein de pleuguines, alors forcément ça fait un peu le café et le couscous. Mais dans sa version de base, roundcube est vraiment épuré.

Les Plugins

voir la liste, et pour les codeurs, c'est par là

C'est LA grosse évolution de la version 0.3. Une API de plugin permet maintenant de développer des composants sans toucher au core. C'est comme cela qu'en quelques semaines, le nombre de contributions a été multiplié par.... pfiou.... beaucoup ! (jetez un coup d'oeil sur la mailing list et vous verrez)

Parmi les plugins les plus intéressants, on a un module GnuPG en cours de développements, et un module managesieve pour *enfin* intégrer la gestion des filtres.

Managesieve

Parce que les gens de roundcube font les choses proprement, ils ont toujours refusé d'intégrer du filtering de mail coté client. Le filtrage en php, ca prend des ressources, et ca n'est actif que quand l'interface est ouverte. Au lieu de cela, un protocole répondant exactement à ce besoin existe dans la grande majorité des serveurs mails (dovecot, cyrus-imap, ...), c'est Sieve.

Sieve, dont j'avais déjà parlé là-bas, est utilisable en ligne de commande via une sorte de shell qui permet d'entrer les règles de filtrage.

filtre roundcube

Mais, évidemment, c'est pas pratique pour des utilisateurs n'ayant pas accès au shell. Une interface pour sieve dans roundcube était donc indispensable, et c'est maintenant chose faite. Même si c'est assez limité en options de filtrage pour le moment.

Certificate Authentication

Ouais ! T'as bien lu ! l'authentification par certificat client. Bon, j'ai pas encore regardé ce qu'il y avait là-dedans, mais j'imagine qu'Apache (ou tout autre webserver) fait suivre les infos du certificat client envoyé lors du SSL Handshake à Roundcube, et ce plugin parse les champs X509 pour en sortie les infos d'authentification.

Bref, de la pure authentification forte comme on en met dans les banques et chez les impots. Faut absolument que je test ça !

Et pleins d'autres

La liste complète, et en constante évolution, est là. Pour le moment c'est un peu le far west, tout le monde code dans tous les sens. J'imagine qu'avec le temps, quelques gros plugins vont sortir du lot (j'ai d'ailleurs beaucoup d'espoir dans le plugin d'encryption).

Et les Core Features

J'en ai profité pour tester le STARTLS sur IMAP et SMTP. C'est une feature de la 0.2 mais comme je n'avais alors pas testé... Pour imap, c'est super simple, il suffit de suivre les commentaires du code. Pour smtp, j'ai un peu plus galéré (au point d'en faire un thread chez les devs) surtout parce qu'il existe deux supports différents pour SSL et TLS dans SMTP. SSL signifie création d'un canal chiffré au début de la communication entre le client et le serveur. TLS signifie réponse a la capability STARTTLS annoncée par le serveur, on a donc un début de communication en clair, puis un passage en mode starttls. C'est de dernier mode que je voulais, et pour l'activer, il faut configurer le fichier main.inc.php de la façon suivante :

// use this host for sending mails.                                       
// to use SSL connection, set ssl://smtp.host.com                         
// if left blank, the PHP mail() function is used                         
$rcmail_config['smtp_server'] = 'localhost';                        

// SMTP port (default is 25; 465 for SSL)                                 
$rcmail_config['smtp_port'] = 25;                                         

// SMTP username (if required) if you use %u as the username RoundCube    
// will use the current username for login                                
$rcmail_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                         
$rcmail_config['smtp_pass'] = '%p';  

// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use     
// best server supported one)                                             
$rcmail_config['smtp_auth_type'] = ''; 

En supposant que le serveur SMTP (ici, postfix) soit configuré correctement :

# TLS server options                                                      
smtpd_use_tls = yes                                                       
smtpd_tls_auth_only = yes                                                 
smtpd_tls_security_level = may                                            
smtpd_tls_key_file = [keyfile]
smtpd_tls_cert_file = [pemcert]
smtpd_tls_CAfile = [cafile]
smtpd_tls_loglevel = 2                                                    
smtpd_tls_received_header = yes                                           
smtpd_tls_session_cache_timeout = 3600s                                   
tls_random_source = dev:/dev/urandom                                      
smtpd_tls_ask_ccert = yes                                                 
smtpd_tls_req_ccert = no    

Le code de roundcube va appeler le mode STARTTLS lorsque l'authentification est demandée (les variables 'smtp_user' et 'smtp_pass' sont renseignées). Si la configuration ne correspond pas exactement à cela (coté roundcube, et modulo l'adresse du serveur), alors le mode STARTTLS échoue. C'est un poil touchy mais assez logique au final.

De fait, lors de l'envoi d'un mail, on retrouve dans les headers les infos suivantes :

Received: from pki.linuxwall.info (localhost [127.0.0.1])
    (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
    (Client did not present a certificate)
    (Authenticated sender: julien@linuxwall.info)
    by zerhuel.linuxwall.info (Postfix) with ESMTPSA id A5FAAEBC1B;
    Thu, 6 Aug 2009 13:28:51 +0200 (CEST)

Comment ça "Client did not present a certificate" ?? Ha mais il va falloir corriger cela très vite ! J'espère, d'ailleurs, que cela fera parti du fameux plugin Encryption.

Et les threads ???

Haaa... les threads. Ca c'est, après le filtrage des mails, la feature qui me manque le plus. Mais, patience, car ça arrive ! En fait, c'est déjà développé et n'attend plus que la release de la 0.4 pour passer en stable.

Pour plus de lecture sur le sujet, voir ici : http://lists.roundcube.net/mail-archive/dev/2009-07/0000131.html

Voilà, j'espère que ça vous aura mis l'eau à la bouche. Roundcube, c'est bon, mangez-en !