Roundcube Webmail envoie tous les messages, pendant leur rédaction, à Google(/NSA) par défaut

Je me suis aperçu que dans la configuration de Roundcube webmail (même problème que WordPress par défaut), la correction orthographique envoie systématiquement tout ce qui est tapé à Google. Ça n’est bon à la fois ni pour la concurrence industrielle, ni pour l’irrespect de la vie privée dont font preuve Google et les agences de renseignement US, comme l’ont démontré le lanceur d’alerte Edward Snowden.

Exemple, pour la version 1.0.0 :

roundcubemail-1.0.0/config/defaults.inc.php

Dans les version précédentes, c’était dans main.inc.php.dist (qui affiche les valeurs par défaut). A copier en main.inc.php et corriger ces valeur par défaut pour des raisons de sécurité évidentes…

roundcubemail-0.x.x/config/main.inc.php.dist

Exemple de la 1.0.0 :

// Make use of the built-in spell checker. It is based on GoogieSpell.
// Since Google only accepts connections over https your PHP installatation
// requires to be compiled with Open SSL support
$config['enable_spellcheck'] = true;

// For a locally installed Nox Spell Server, please specify the URI to call it.
// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72
// Leave empty to use the Google spell checking service, what means
// that the message content will be sent to Google in order to check spelling
$rcmail_config['spellcheck_uri'] = '';
// Enables spellchecker exceptions dictionary.
// Setting it to 'shared' will make the dictionary shared by all users.
$config['spellcheck_dictionary'] = false;

// Set the spell checking engine. Possible values:
// - 'googie'  - the default
// - 'pspell'  - requires the PHP Pspell module and aspell installed
// - 'enchant' - requires the PHP Enchant module
// - 'atd'     - install your own After the Deadline server or check with the people at http://www.afterthedeadline.com before using their API
// Since Google shut down their public spell checking service, you need to 
// connect to a Nox Spell Server when using 'googie' here. Therefore specify the 'spellcheck_uri'
$config['spellcheck_engine'] = 'googie';

// For locally installed Nox Spell Server or After the Deadline services,
// please specify the URI to call it.
// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 or
// the After the Deadline package from http://www.afterthedeadline.com.
// Leave empty to use the public API of service.afterthedeadline.com
$config['spellcheck_uri'] = '';

Ce que je conseillerais : utiliser enchant si possible, plus générique et appelant les différentes api locales.

Pour installer les paquets nécessaire sous Debian ou Ubuntu :

apt-get install libenchant aspell aspell-fr aspell-it aspell-de aspell-es \
aspell-en aspell-pl aspell-hu aspell-pt aspell-no \
aspell-sv aspell-el aspell-ru aspell-uk

Je n’ai mis que les langues européennes les plus répandues, mais il existe aussi de nombreuses langues africaines, asiatiques ou régionales. Il y a peut être des langues américaines traditionnelles aussi ?

Il faut ensuite changer :

$config['spellcheck_engine'] = 'enchant';

ou si cela ne marche pas :

$config['spellcheck_engine'] = 'pspell';

Sinon, vous pouvez tout simplement désactiver la correction orthographique du webmail et utiliser celle intégrée à votre navigateur. Jusqu’à présent, Firefox utilisait également enchant, mais il y a de plus en plus d’invasion Google dans Firefox (voir about:config, et la recherche d’URL). Il y a même de la publicité à partir de Firefox 29 :(. Bon, de toute façon, j’ai commencé à regardé à des alternatives Midori (la version 0.5.8 est vraiment excellente, surtout après avoir regarder les plugins disponibles dans les préférences) et GNU Icecast (un fork de Firefox avec les espions (chevaux de Troyes?) en moins et des bonus en plus), comme Firefox 29 a cassé l’interface et bug complètement avec ma configuration qui à plusieurs années.

$config['enable_spellcheck'] = false;

Une bonne pratique sur le serveur abritant le webmail (si la politique n’est pas bloqué par défaut, autoriser certains hôtes), bloquer le réseau Google par défaut par le parfeu (il reste à trouver la plage US de google). Je vous conseille sur Ubuntu par exemple, d’utiliser le script iptables-persistent pour conserver ça de façon permanente (dans /etc/iptables/)

Si vous ne l’aviez pas déjà :

apt-get install iptables-persistent

Donc, les adresses à bloquer, sont, pour éviter les mauvaises surprises d’un autre CMS :

* D’après le Whois, en IPv4 :

iptables -I OUTPUT -d 8.8.8.8 -j DROP
iptables -I OUTPUT -d 50.23.75.44 -j DROP
iptables -I OUTPUT -d 62.149.23.126 -j DROP
iptables -I OUTPUT -d 62.41.27.144 -j DROP
iptables -I OUTPUT -d 66.49.213.213 -j DROP
iptables -I OUTPUT -d 69.41.185.195 -j DROP
iptables -I OUTPUT -d 70.84.145.107 -j DROP
iptables -I OUTPUT -d 74.125.229.52 -j DROP
iptables -I OUTPUT -d 80.190.192.24 -j DROP
iptables -I OUTPUT -d 88.246.115.134 -j DROP
iptables -I OUTPUT -d 123.123.123.123 -j DROP
iptables -I OUTPUT -d 200.222.44.35 -j DROP
iptables -I OUTPUT -d 203.36.226.2 -j DROP
iptables -I OUTPUT -d 209.126.190.70 -j DROP
iptables -I OUTPUT -d 209.187.114.130 -j DROP
iptables -I OUTPUT -d 209.85.227.106 -j DROP
iptables -I OUTPUT -d 211.64.175.66 -j DROP
iptables -I OUTPUT -d 211.64.175.67 -j DROP
iptables -I OUTPUT -d 213.228.0.43 -j DROP
iptables -I OUTPUT -d 216.239.32.21 -j DROP
iptables -I OUTPUT -d 217.107.217.167 -j DROP
iptables -I OUTPUT -d 217.148.161.5 -j DROP

D’après la documentation de Google sur les autorisations email, on peut récuperer leurs bloques de cette façon :

nslookup -q=TXT _netblocks.google.com 8.8.8.8
nslookup -q=TXT _netblocks2.google.com 8.8.8.8
nslookup -q=TXT _netblocks3.google.com 8.8.8.8

Ce qui donne pour Ipv4 :

_netblocks.google.com	text = "v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ip4:173.194.0.0/16 ~all"

Et pour IPv6 :

_netblocks2.google.com	text = "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all"

Donc, au final, on peut ajouter pour IPv4 :

iptables -I OUTPUT -d 216.239.32.0/19 -j DROP
iptables -I OUTPUT -d 64.233.160.0/19 -j DROP
iptables -I OUTPUT -d 66.249.80.0/20 -j DROP
iptables -I OUTPUT -d 72.14.192.0/18 -j DROP
iptables -I OUTPUT -d 209.85.128.0/17 -j DROP
iptables -I OUTPUT -d 66.102.0.0/20 -j DROP
iptables -I OUTPUT -d 74.125.0.0/16 -j DROP
iptables -I OUTPUT -d 64.18.0.0/20 -j DROP
iptables -I OUTPUT -d 207.126.144.0/20 -j DROP
iptables -I OUTPUT -d 173.194.0.0/16 -j DROP

et pour IPv6 :

ip6tables -I OUTPUT -d 2001:4860:4000::/36 -j DROP
ip6tables -I OUTPUT -d 2404:6800:4000::/36 -j DROP
ip6tables -I OUTPUT -d 2607:f8b0:4000::/36 -j DROP
ip6tables -I OUTPUT -d 2800:3f0:4000::/36 -j DROP
ip6tables -I OUTPUT -d 2a00:1450:4000::/36 -j DROP
ip6tables -I OUTPUT -d 2c0f:fb50:4000::/36 -j DROP

N’oubliez pas maintenant de sauvegarder vos règles de façon permanentes :

service iptables-persistent save