Partie 6 : Roundcube
Roundcube est un webmail, permettant donc de lire et d'envoyer vos e-mail via une interface web. Pour fonctionner, Roundcube nécessite un serveur web, Apache2 dans mon cas, PHP et un serveur de base de données, MySQL dans mon cas. Je pars du principe que ces services sont présent sur votre serveur.
Installation de RoundCube
Pour installer Roundcube, lancez la commande suivante :
sudo aptitude install roundcube roundcube-plugins roundcube-plugins-extra
Une fenêtre va apparaître vous demandant si vous voulez configurer la base de donnée pour Roundcube. Répondez oui, puis choisissez “mysql” sur la fenêtre d’après. Il vous sera ensuite demandé un mot de passe de connexion à la base de donnée pour Roundcube. Soit vous en choisissez un, soit vous laissez vide pour qu’un mot de passe soit créé aléatoirement. Perso j’ai pris le second choix. L'installation est terminée, passons à la configuration.
Configuration
Apache2
On va maintenant devoir configurer Apache pour pouvoir accéder à l’interface web de Roundcube. Ouvrez le fichier /etc/roundcube/apache.conf. Décommentez la ligne suivante (supprimez le # devant la ligne) :
Alias /roundcube /var/lib/roundcube
Cette ligne va permettre d’accéder à l’interface web de Roundcube en tapant nomdedomaine.fr/roundcube. Pour ma part j’ai modifié la ligne de redirection en remplaçant /roundcube par /webmail car je trouve plus intuitif d’accéder au webmail en tapant nomdedomaine.fr/webmail. Mais ce n’est absolument pas obligatoire.
Redémarrez Apache :
sudo systemctl restart apache2.service
Si vous vous rendez à l’adresse nomdedomaine.fr/roundcube (si vous avez comme moi remplacé /roundcube par /webmail il faut bien évidemment mettre webmail au lieu de roundcube dans l’adresse), l’interface web Roundcube va s’afficher.
Roundcube
Après avoir configuré Apache, on va configurer Roundcube. Ouvrez le fichier /etc/roundcube/config.inc.php . Si toutes vos adresses mail utilisent le même nom de domaine, par exemple nomdedomaine.fr, ça va être chiant de rentrer à chaque fois dans le champ Server de Roundcube le nom de domaine nomdedomaine.fr afin de se connecter. Pour remédier à ça, remplacez la ligne
$config['default_host'] = '';
par
$config['default_host'] = 'nomdedomaine.fr';
Remplacez également la ligne :
$config['smtp_server'] = 'localhost';
par
$config['smtp_server'] = 'ssl://nomdedomaine.fr';
Pour utiliser le port 465 pour envoyer des e-mails, remplacez la ligne :
$config['smtp_port'] = 587;
par
$config['smtp_port'] = 465;
On va également activer le plugin markasjunk pour apprendre à notre serveur à reconnaître les spam. Remplacez la ligne :
$config['plugins'] = array( );
par
$config['plugins'] = array( 'markasjunk2', );
C’est tout pour la configuration de Roundcube. Maintenant que nous pouvons accéder à nos mail via Roundcube, on va voir comment alimenter la base de donnée du filtre bayésien de Spamassassin via Roundcube.
Plugin markasjunk
On va donc utiliser le plugin markasjunk activé précédemment. Ce plugin permet de marquer des mails en spam ou ham manuellement en utilisant sa-learn et ainsi améliorer la base de donnée du filtre bayésien.
Passons à la configuration du plugin. Lancez la commande suivante pour récupérer le fichier de configuration complet :
sudo cp /usr/share/roundcube/plugins/markasjunk/config.inc.php.dist /etc/roundcube/plugins/markasjunk/config.inc.php
Ouvrez le fichier /etc/roundcube/plugins/markasjunk/config.inc.php
C’est là qu’on va configurer le plugin pour qu’il utilise sa-learn, l’outil de Spamassassin servant à améliorer la base de donnée du filtre antispam. Vous allez devoir modifier plusieurs lignes :
Pour activer le lancement de commande, remplacez la ligne :
$config['markasjunk_learning_driver'] = null;
par
$config['markasjunk_learning_driver'] = cmd_learn;
Pour activer le mode debug pour pouvoir vérifier que le plugin fonctionne correctement avec Spamassassin, remplacez la ligne :
$config['markasjunk_debug'] = false;
par
$config['markasjunk_debug'] = true;
Pour marquer les mail en tant que spam quand on les déplace du courrier entrant vers le dossier spam (c'est optionnel mais je trouve ça pratique), remplacez la ligne :
$config['markasjunk_move_spam'] = false;
par
$config['markasjunk_move_spam'] = true;
Idem que la ligne précédente mais quand on déplace un mail du dossier spam vers le dossier courrier entrant, remplacez la ligne
$config['markasjunk_move_ham'] = false;
par
$config['markasjunk_move_ham'] = true;
Remplacez la ligne :
$config['markasjunk_spam_cmd'] = null;
par
$config['markasjunk_spam_cmd'] = 'sa-learn -D learn,bayes -u amavis --dbpath /var/lib/amavis/.spamassassin/ --cf=\'bayes_path /var/lib/amavis/.spamassassin/bayes\' --prefspath=/var/lib/amavis/.spamassassin/user_prefs --spam %f >> /var/www/logs/sa-learn.log 2>&1';
Remplacez la ligne
$config['markasjunk_ham_cmd'] = null;
par
$config['markasjunk_ham_cmd'] = 'sa-learn -D learn,bayes -u amavis --dbpath /var/lib/amavis/.spamassassin/ --cf=\'bayes_path /var/lib/amavis/.spamassassin/bayes\' --prefspath=/var/lib/amavis/.spamassassin/user_prefs --ham %f >> /var/www/logs/sa-learn.log 2>&1';
J’expliquerai ces deux lignes plus tard.
C’est tout pour ce fichier.
Maintenant lancez la commande :
sudo mkdir /var/www/logs
Puis lancez commande :
sudo chown -R www-data:www-data /var/www/logs
La première commande sert à créer le dossier logs dans le répertoire /var/www et la seconde à rendre l’utilisateur www-data, qui exécute toutes les application web comme Roundcube, propriétaire de ce dossier. Pourquoi créer ce dossier ? C’est lié aux deux lignes que je n’ai pas expliquées. Passons donc aux explications.
$config['markasjunk2_spam_cmd'] et $config['markasjunk2_ham_cmd'] permettent d’indiquer quelle commande lancer quand on marque un e-mail, respectivement, en tant que spam et en tant que ham. Voyons comment elles sont composées :
- sa-learn correspond au binaire à exécuter. Comme dit précédemment, sa-learn est un outil de Spamassassin qui permet d’apprendre au filtre bayésien quels mails sont des spams et lesquels n’en sont pas.
- -D learn,bayes : -D active le mode debug de sa-learn et learn,bayes indique quelle partie on veut en mode debug. J’ai seulement activé la partie apprentissage et les messages liés au filtre bayésien.
- -u amavis sert à indiquer qu’on veut lancer cette commande avec le profil de l’utilisateur amavis (c’est lui qui détient la base de donnée anti-spam).
- –dbpath /var/lib/amavis/.spamassassin/ indique dans quel répertoire se trouve la base de donnée anti-spam.
- –cf=\'bayes_path /var/lib/amavis/.spamassassin/bayes\' indique où se trouve le filtre bayésien qui sert à tester les e-mails.
- –prefspath=/var/lib/amavis/.spamassassin/user_prefs indique où se trouve le fichier de préférence à utiliser.
- –spam %f et —ham %f servent à marquer l'e-mail sélectionné en tant que spam ou ham.
- Enfin, » /var/www/logs/sa-learn.log 2>&1 sert à écrire les logs du mode debug dans le fichier /var/www/logs/sa-learn/log. C’est pour ça que je vous ai fait créer ce répertoire et l’ai rendu accessible à l’utilisateur www-data.
On va devoir maintenant donner les droits à l'utilisateur www-data d'accéder aux fichiers situés dans /var/lib/amavis/.spamassassin/. Lancez les commandes suivantes :
sudo chmod 770 /var/lib/amavis sudo chmod 770 /var/lib/amavis/.spamassassin sudo chmod 770 /var/lib/amavis/.spamassassin/bayes_* sudo addgroup www-data amavis
Si vous vous rendez sur Roundcube et vous connectez, vous remarquerez un bouton Pourriel si vous êtes dans les courriers entrants et Acceptable si vous êtes dans le dossier spam. Il vous suffit de sélectionner un e-mail puis de cliquer sur ce bouton pour apprendre au filtre anti-spam que cet e-mail doit être considéré comme un spam ou comme un ham, selon le dossier dans lequel vous vous trouvez. Après avoir effectué cette action, vous trouverez dans le fichier /var/www/logs/sa-learn.log les logs liés à sa-learn avec à la fin un message comme celui-ci Learned tokens from 1 message(s) (1 message(s) examined) vous indiquant si le message a bien était examiné et si sa-learn a amélioré son algo avec cet e-mail.
Si vous n'utilisez pas de webmail mais préférez utiliser un gestionnaire d'e-mail en local comme Thunderbird, une autre méthode existe.
Méthode Thunderbird
Sur votre gestionnaire de mail (Thunderbird ou autre), rajouter votre compte e-mail en utilisant L’IMAP. Une fois le compte créé, via Thunderbird, créez les dossiers Spam_sa-learn et Ham_sa-learn à la racine de votre compte mail. Vous pouvez changez les noms si vous le souhaitez.
Sur votre serveur, rendez vous dans le répertoire /var/vmail/nomdedomaine/utilisateurmail/Maildir. Si l’adresse mail rajoutée sur Thunderbird était toto@nomdedomaine.fr, le répertoire où aller serait /var/vmail/nomdedomaine.fr/toto/Maildir. En tapant la commande ls -lah, vous verrez que deux dossier sont présents, .Spam_sa-learn et .Ham_sa-learn. Ces deux dossiers vont nous permettre d’indiquer à sa-learn que les e-mails contenus dans .Spam_sa-learn sont des ham qui aurait dû être classés en spam et que les e-mails contenus dans .Ham_sa-learn sont des spam qui aurait dû être classés en ham.
Tout d’abord il faut que l’utilisateur amavis, qui gère le filtrage des mail en utilisant Spamassassin, puisse avoir accès à ces dossiers. Pour commencer, on va mettre l’utilisateur amavis dans le groupe de vmail, le propriétaire du répertoire /var/vmail ainsi que de ses sous-dossier. Pour ce faire, tapez la commande suivante
sudo addgroup amavis vmail
Ensuite, on va modifier les droits du répertoire /var/vmail. De base, ce répertoire est accessible en lecture/écriture pour le propriétaire (vmail) et en lecture seule pour les utilisateurs faisant parti du groupe vmail. On va modifier ça pour que les utilisateurs membre du groupe vmail (donc amavis) puisse écrire dans ce répertoire. Lancez la commande suivante :
sudo chmod 775 -R /var/vmail/
On va également modifier les droits des deux dossiers que nous avons créés pour que tous les utilisateurs puissent écrire dedans. Toujours en étant dans le répertoire /var/vmail/nomdedomaine/utilisateurmail/Maildir tapez la commande suivante :
sudo chmod 777 -R .Spam_sa_learn/ .Ham_sa_learn/
Maintenant que ceci est fait, on va modifier le cron de l’utilisateur amavis. Le cron permet de planifier des tâches. Il permet par exemple de lancer une commande ou un script tous les jours à 17h45 (un exemple parmi d’autres). Tapez la commande :
sudo -u amavis crontab -e
Choisissez nano si on vous pose la question et rajoutez les lignes suivantes :
00 00 * * * if [ "$(ls /var/vmail/nomdedomaine.fr/toto/Maildir/.Spam_sa-learn/cur/)" ]; then sa-learn -D learn,bayes –spam /var/vmail/nomdedomaine.fr/toto/Maildir/.Spam_sa-learn/cur/ >> /var/www/logs/sa-learn.log 2>&1 && rm -R /var/vmail/nomdedomaine.fr/toto/Maildir/.Spam_sa-learn/cur/*; fi 01 00 * * * if [ "$(ls /var/vmail/nomdedomaine.fr/toto/Maildir/.Ham_sa-learn/cur/)" ]; then sa-learn -D learn,bayes –ham /var/vmail/nomdedomaine.fr/toto/Maildir/.Ham_sa-learn/cur/ >> /var/www/logs/sa-learn.log 2>&1 && rm -R /var/vmail/nomdedomaine.fr/toto/Maildir/.Ham_sa-learn/cur/*; fi
Il faudra évidemment remplacer nomdedomaine.fr et toto par votre nom de domaine et votre utilisateur mail.
Si vous n’avez pas suivi la méthode utilisant Roundcube, il vous faut lancer les commandes suivantes pour créer le répertoire de log et configurer les droits :
sudo mkdir /var/www/logs sudo chown -R www-data:www-data /var/www/logs
La première commande sert à créer le dossier logs dans le répertoire /var/www et la seconde à mettre l’utilisateur www-data, qui exécute toutes les application web comme Roundcube, propriétaire de ce dossier.
Ensuite, lancez la commande suivante pour créer le fichier de log :
sudo -u www-data touch /var/www/logs/sa-learn.log
Ensuite, lancez la commande suivante afin que les fichiers de logs soient accessibles à tous les utilisateurs
sudo chmod 777 -R /var/www/logs/*
Expliquons un peu ces lignes :
- 00 00 * * * et 01 00 * * * signifient que ces lignes vont être exécutées tous les jours à 00:00 et 00:01.
- if [ “$(ls /var/vmail/memodugeek.info/toto/Maildir/.Spam_sa-learn/cur/)” ]; then est une condition pour que le reste de la commande s’exécute. Cette condition est que le répertoire /var/vmail/memodugeek.info/toto/Maildir/.Spam_sa-learn/cur/ ne soit pas vide. Ca évitera les remontées de message d’erreur suite à la tentative de supprimer le contenu d’un répertoire vide.
- sa-learn correspond au binaire à exécuter. Comme dit précédemment, sa-learn est un outil de Spamassassin qui permet d’apprendre au filtre bayésien quels mails sont des spams et lesquels n’en sont pas.
- -D learn,bayes : -D active le mode debug de sa-learn et learn,bayes indique quelle partie on veut en mode debug. J’ai seulement activé la partie apprentissage et les messages liés au filtre bayésien.
- –spam var/vmail/memodugeek.info/toto/Maildir/.Spam_sa-learn/cur/ indique que sa-learn va scanner les mails contenus dans le dossier .Spam_sa-learn (qui sont en fait stockés dans le sous-dossier cur) et rajouter dans sa base de donnée que ses mails doivent être considérés comme du spam.
- –ham var/vmail/memodugeek.info/toto/Maildir/.Ham_sa-learn/cur/ indique que sa-learn va scanner les mails contenus dans le dossier .Ham_sa-learn (qui sont en fait stockés dans le sous-dossier cur) et rajouter dans sa base de donnée que ses mails doivent être considérés comme des mail légitimes (ham).
- » /var/www/logs/sa-learn.log 2>&1 sert à écrire les logs du mode debug dans le fichier /var/www/logs/sa-learn/log. C’est pour ça que je vous ai fait créer ce répertoire.
- && rm -R /var/vmail/memodugeek.info/toto/Maildir/.Ham_sa-learn/cur/* (et la seconde avec .Spam_sa-learn) supprime les mails contenu dans les deux dossiers une fois qu’ils ont été analysés par sa-learn.
fi indique la fin de la condition.
Si vous recevez un spam qui n’a pas été classé en spam, déplacez-le dans le dossier Spam_sa-learn et à minuit, il sera analysé par sa-learn afin de lui apprendre que ce mail est un spam et il sera ensuite supprimé. Si vous recevez un mail légitime qui a été classé en spam, déplacez-le dans le dossier Ham_sa-learn et à minuit une, il sera analysé par sa-learn afin de lui apprendre que ce mail n’est pas un spam et il sera ensuite supprimé. ATTENTION : si c’est un mail important que vous souhaitez conserver, mettez une copie du mail dans le dossier Ham_sa-learn, sinon vous perdrez ce mail !!!
Si vous avez plusieurs adresses mails, il vous suffit de réutiliser la même méthode. Dans le crontab, décalez les heures de lancement de commande d’une minute chaque fois que vous rajoutez des lignes.