Groupwares
Définition
Groupware : "est l’ensemble des technologies et des méthodes de travail associées qui, par l’intermédiaire de la communication électronique, permettent le partage de l’information sur un support numérique à un groupe engagé dans un travail collaboratif et/ou coopératif" (J-C Courbon)
La messagerie d'entreprise de nos jours
Cela inclue :
- Messages électroniques
- Annuaires partagés
- MEssages instantanés et gestion de la présence
- Agendas partagés
- Gestion de tâches ou de projets
- Travail collaboratif sur textes ou tableaux (mais aussi partages de dossiers de messages, carnets d'adresses, agendas, fichiers...)
- Vidéo-conférences
- Et tout ce qui mélange un peu ces élements...
- ...ainsi que la VoIP (mais ce sera pour plus tard).
Messagerie asynchrone
La messagerie (mail) est le principal moyen de communication par internet, depuis l'adoption des standards Internet. Elle a évolué depuis les premières RFC pour devenir un outil de travail collaboratif; cependant, elle a plusieurs poblèmes :
- Problèmes de sécurisation
- Difficulté à authentifier les correspondants, vérifier l'intégrité du message, et confidentialité
- Utilisation détournée pour les envois viraux permettant le social engineering
- Problème de fiabilité et de spam
On peut faire une analogie avec le système postal classique :
Stylo et papier | Rédaction du courrier et de l'adresse | Logiciel / Webmail (MUA) |
Boite aux lettres jaune | Je dépose au bureau de poste | Serveur SMTP |
Boîte à la maison | Le message est récupéré | Serveur POP/IMAP |
Ouverture de l'enveloppe, lecture, rangement | Message ouvert, lu, archivé |
Logiciel / Webmail |
Dans les deux cas, on a un système asynchrone.
Les adresses
En général on a : boîte_utilisateur@domaine_dns (ou @IP)
Variantes:
- “utilisateur”@domaine (le nom de la boîte peut être quelconque, notamment contenir des @, il faut donc délimiter la chaîne de caractères correspondante)
- utilisateur(utilisateur du domaine)@domaine (ce qui est entre parenthèses est ignoré)
- utilisateur du domaine <utilisateur@domaine> (seulement compte ce qui est entre les <>)
- <@isp1.net,@isp2.net:utilisateur@domaine> (permet de spécifier par quels serveurs passer)
Protocole SMTP
Le protocole SMTP est inclus dans la RFC821.
Voir la page Protocoles
Les formats de messages
Les formats de message sont décrits dans la RFC822+MIME.
- Partie obligatoire:
Date: Wed, 29 Sep 2010 15:03:55 +0200
From: Admin autre domaine <admin@autredomaine.fr>
To: admin@mondomaine.fr
- Parties facultatives normalisées:
Subject: Un message important
Reply-To: <admin@autredomaine.fr>
Organization: L'autre domaine
Received: from [172.16.0.117] (xxx77-1-89-179-133-22.mondomaine.fr [89.179.133.22]) by mx.mondomaine.fr with ESMTPS id p82sm2153683weq.27.2010.09.25.08.11.50(version=SSLv3 cipher=RC4-MD5);
Sat, 25 Sep 2010 08:11:50 -0700 (PDT)
Message-ID: <4C9E117E.3070805@mondomaine.fr>
- Parties privées (commencent forcément par X- ):
X-Phone: +33 6 99 99 99 99
X-Mailer: Mutt/1.5.20 (2009-06-14)
- Parties typiquement MIME:
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Le format MIME (Multipurpose Internet Mail Extensions) permet par ses extensions de transférer tous les types de données (il est aussi utilisé dans le protocole HTTP) : il s'agit en réalité d'un standard qui permet d'envoyer autre chose que simplement du texte ASCII, qu'il s'agisse d'autres encodages ou même de données qui ne sont pas du texte.
Protocoles de relève de courrier
Ils sont dérivés de SMTP, mais adaptés aux fonctions des clients de messagerie : archivage, messages en attente...
- POP3 (port 110): le serveur est vidé une fois le message stocké par un MUA (obsolète, à oublier)
- IMAP4 (port 143): Les messages sont stockés en permanence sur le serveur.
- Accès simultanés (synchronisation de fait entre plusieurs clients)
- Lors du “relevé” des messages, c'est seulement une visualisation des en-têtes (plus rapide) qui est effectuée. Le transfert du message n'est fait qu'à la demande.
- Plusieurs “dossiers” ou “boîtes” permettant de trier suivant des critères (INBOX,...)
- TLS: canal chiffré entre le client et le serveur après authentification. Ce peut être une surcouche aux protocoles POP3 (port 995 pour POPS ) et IMAP4 (port 993 pour IMAPS). C'est le même chiffrage que celui qui est utilisé pour le protocole HTTPS
Messageries libres
- MTA :
- Sendmail (1980): Gros problèmes de sécurité et de config. (monolithique)
- Qmail (1997): Architecture modulaire orientée sécurité. « gelé » depuis 2007
- Exim (1995): Par défaut sur DEBIAN GNU/LINUX, simple
- Postfix (2001): Récent, sûr, modulaire, configuration assez simple
- MDA :
- Intégrés aux « logiciels de messagerie » comme Exim
- Mais aussi en « indépendants » : procmail, mailfilter, maildrop, deliver,...
- Utilisent mbox (un fichier par dossier), maildir (un fichier par message),...
- Intègrent aussi des « filtres » comme Spamassassin
- MAA :
- Cyrus
- Dovecot
- Courrier-imap
- uw_imap
- MUA :
- Clients « lourds » : Evolution, Thunderbird/Icedove, Kmail, Claws Mail, mutt,...
- Clients « légers » (ou webmail) : Roundcube, IMP, Horde, MiniG, SquirrelMail, …
Filtrage de spams et de virus
- Spamassassin identifie les messages non sollicités par :
- Expressions régulières sur les en-têtes ou le corps du messge
- « Tests » permettant de classer par score les messages en « spam » ou « ham » (plusieurs critères de test doivent correspondre)
- Listes noires basées sur les DNS, sur les adresses, checksum, hash, SPF,...
- Configuration possible avec des exceptions par utilisateur (langue ou adresses préférées...) et apprentissage par filtres Baysiens
- Test avec :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
- qui doit avoir un score de 1000 une fois envoyé dans le corps d'un message RFC2822
- Clamav identifie les contenus agressifs (virus, vers,...) sur tous types de fichiers, compressés ou non, avec mise à jour par bases de donnée et signatures
- Ils sont tous les deux appliqués sur les messages en intercalant le filtre AMAVISD-NEW entre le MTA et eux (utilisation de préférence sur un relai SMTP).
Il existe aussi des antispams intégrés en natif sur les clients.
Quelle implantation de serveurs?
On peut avoir de l'hébergé pour des TPE sans compétences internes en informatique (peut poser des problèmes de confidentialité)
En interne :
- Utilisation du SMTP du FAI à éviter pour plusieurs dizaines d'utilisateurs (les messages partent puis reviennent inutilement et les FAI permettent rarement le “relaying”)
- serveurs MTA et MDA/MAA dans la DMZ "publique"
- relais SMTP “MX” dans la DMZ "publique" (avec anti-spam et AV) et serveurs MDA/MAA internes pour plus de sécurité: solution intéressante en cas de multi-domaine
- Dans tous les cas un MX secondaire qui permet de ne pas perdre de message lors des indisponibilités du primaire (maintenance...) et qui permet aussi éventuellement de faire de l'équilibrage de charge si on les place au même niveau de priorité
Bonnes pratiques
Avoir une boîte de réception vide !
Boite de réception vide:
- Chaque message doit sortir de la boite le plus vite possible:
- l'archiver dès qu'il est lu s'il ne nécessite pas de réponse
- répondre immédiatement si c'est possible
- créer une tâche dans votre liste et archiver le message
- Ce n'est pas la même chose que les marquer lus et ne « regarder » que les non lus! La masse capte l'attention négativement, distrait inutilement.
- on le fait MAINTENANT ce nettoyage de printemps ! (enfin quand vous serez chez vous;-) )
- Cette proposition seule ne suffit pas si vous recevez plus de 100 messages par jour et que vous avez un système de classement élaboré avec plein de dossiers, des comptes multiples. Il en faut donc d'autres:
- Ne garder qu'une boite, utilisez les redirections et abusez des filtres notamment pour au moins filter pro et perso.
- Utiliser les modes de visualisation par conversation, plus clairs (un sujet= une conversation. D'où la nécessité de ne pas répondre à un message juste pour écrire à quelqu'un alors que le sujet est différent.
- Désabonnez-vous (pas mettre en SPAM si elles viennent d'une de vos visites) des centaines de newsletter commerciales et autres que vous ne lisez jamais et qui en profitent en plus pour faire du profiling sur vous lorsque vous les ouvrez...
- N'activez JAMAIS les notifications de nouveaux messages, qui plus est les notifications des réseaux sociaux. Si vous avez besoin ET êtes dispo vous irez voir bien assez tôt... deux fois par demi-journée est bien suffisant.
- « Ce que vous ne feriez pas lors d’une conversation réelle face à votre correspondant, ne prenez pas l’Internet comme bouclier pour le faire »
- Sujet du message explicite avec mots clés (résumé”)
- Mettre en CC (Copie Carbone) les personnes devant juste être informées
- Éviter les CCI (Copie Carbone Invisible), très « limites » si utilisées pour informer des personnes sans que les intéressés soient au courant...
- Utiliser CCI par contre pour y mettre une liste de destinataires qui ne souhaitent pas forcément que leur adresse soit visible de tous les autres destinataires de votre message « groupé », que quelqu'un réponde au groupe croyant répondre seulement à l'expéditeur ;-) et enfin limite la fuite de listes d'adresses.
- Message à rédiger en texte brut (préférez une pièce jointe pour les contenus élaborés)
- Français « élaboré » (pas SMS), pas de CAPITALES (vous criiez virtuellement), utilisez plutôt les ** pour mettre en évidence un mot.
- Signature raisonnable (inutile de remettre l'adresse mel...), pas d'image
- Pièce jointe de taille raisonnable (sinon utiliser un service de partage de fichiers, via par ex. Filelink pour Thunderbird) et dans un format standard (PDF, ODF,...). Prévoir 40 % de plus que la taille originale du fichier pour passer sous les quotas (encodage base64)
- Lors d'une réponse, ne pas citer la totalité du message original mais uniquement les parties spécifiques auxquelles il répond et, si nécessaire, des éléments de contexte avant ou après. Pour faciliter la lecture chronologique, la réponse se fera en dessous de la citation (et non au-dessus comme on le voit souvent).
- Pour faire la différence entre le texte cité auquel on répond et le texte de la réponse, différents symboles sont utilisés, le chevron (caractère > au début de chaque ligne de texte cité) étant fréquent et interprété par de nombreux lecteurs de mails comme une citation.
- Pour signaler les passages supprimés on trouve parfois les symboles suivants : […] ou…/… ou encore (…).
- Il est de bon usage d'accuser réception et d'informer de la suite à donner au message reçu. En effet le protocole utilisé pour la distribution du courrier ainsi que l'usage d'anti-spam ne garantissent pas la bonne réception d'un message.
- Ne pas transférer sans commentaire, c'est perçu comme un « délestage »
- et enfin ne pas écrire de message confidentiels et ne jamais être certain que l'expéditeur est la personne qui semble avoir envoyé le message (solutions : voir paragraphe suivant)
Chiffrement et signature (GPG ou SMIME)
Il s'agit d'un simple chiffrement public / privé. Il est intégré en natif sur les clients Evolution, Kmail, Thunderbird/Icedove et via un module dans Claws Mail. Ce n'est pas encore le cas sur les webmails, mais il existe des applications et réseaux dédiés.
iRedMail
Il s'agit d'un script d'installation de serveur mail web plutôt bien fait, qui installe plusieurs fonctions :
- Un webmail RoundCube
- Un serveur mail avec chiffrement
- Un pannel netdata (stats + monitoring)
- La base de données
- Un webmin
- De l'antispam / Antivirus
- Etc...
Il est disponible sur le site web :
L'installation est assez simple : une fois dézippé, il suffit de lancer le script. La machine de base doit disposer d'un dns pour la zone locale, avec les enregistrements adéquats, ainsi que :
- dans /etc/hosts:
- 192.168.1.1 machine@domaine.local machine
- Avoir le bon hostname
- Dans resolv.conf, ajouter :
search domain.local
nameserver <ipdelamachine>
Ensuite, il suffit de se laisser guider par l'installateur.
- Lors de l'installation, ne pas choisir SOGo : il n'est plus gratuit.
- À la fin de l'installation, tous les liens vers les différents services sont donnés.
- Un compte postmaster@domaine.local est créé, il a un résumé de l'install dans ses mails reçus (il s'agit en plus du login à utiliser comme root pour tous les services)
Une fois l'installation terminée :
On va devoir ajouter deux choses à notre DNS local, deux enregistrements txt:
- Pour SPF :
- mondomaine.local. 3600 IN TXT "v=spf1 mx mx:groupware.mondomaine.local -all"
- Pour Amavis:
- amvis-new showkeys
- On a alors un résultat long, du type :
dkim._domainkey.mondomaine.local. 3600 TXT (
- On a alors un résultat long, du type :
- amvis-new showkeys
"v=DKIM1; p=" "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaK" "txFUt0ec5+1dWmcDv0WH0qZLFK711sibNN5LutvnaiuH+w3Kr8Ylbw8gq2j0UBok" "FcMycUvOBd7nsYn/TUrOua3Nns+qKSJBy88IWSh2zHaGbjRYujyWSTjlPELJ0H+5" "EV711qseo/omquskkwIDAQAB")
-
-
- Il faut alors rajouter un enregistrement TXT du type:
dkim.domainkey.mondomaine.local 3600 TXT "v=DKIM1;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaKtxFUt0ec5+1dWmcDv0WH0qZLFK711sibNN5LutvnaiuH+w3Kr8Ylbw8gq2j0UBokFcMycUvOBd7nsYn/TUrOua3Nns+qKSJBy88IWSh2zHaGbjRYujyWSTjlPELJ0H+5EV711qseo/omquskkwIDAQAB"
- Il faut alors rajouter un enregistrement TXT du type:
-
À ce stade, l'installation est terminée.
- Dans le dossier de iRedMail, tips contient des informations utiles; tools contient divers scripts utiles, notamment pour ajouter des utilisateurs.
- Pour ajouter un utilisateur à la base SQL :
- bash create_mail_user_SQL utilisateur@domaine.lab motdepasse > utilisateur.sql
- mysql -u root -p
- USE vmail;
- SOURCE utilisateur.sql:
- exit;
- On peut aussi ajouter les utilisateurs en gros:
- cd /chemin/vers/iRedMail-x.y.z/tools/
- python create_mail_user_OpenLDAP.py mondomaine.local utilisateurs.csv
- Pour ajouter un utilisateur à la base SQL :
- J'ai eu un problème de connectivité au début : vérifier que le port 10026 écoute (netstat -ntpl) et redémarrer amavis
- On peut vérifier les points suivants dans le main.cf de Postfix, mais normalement c'est bon par
- Limiter la taille de messages dans le main.cf de postfix
- Ne mettre que le minimum d'informations dans le smpt_banner
- Désactiver le fonction vrfy
- Demander un HELO avant tout message, …
- On peut aussi :
Rediriger les messages vers root
/etc/postfix/aliases root: admin@mondomaine.local # postalias hash:/etc/postfix/aliases
Collaboration avec *DAV
Contacts partagés
LDAP ou le protocole CardDAV (qui est une extension au serveur WebDAV [Web Distributed Authoring And Versioning, une extension d'HTTP qui permet de simplifier la gestion de fichiers avec les serveurs distants] avec ACL) permettent de partager des carnets d'adresse.
Agenda partagé
CalDAV est également une extension au serveur WebDAV avec ACL. Elle permet de traiter les calendriers sous forme de dossiers contenant des évènements gérables indépendamment, contrairement à ICS (format iCal) qui ne voit qu'une entité "calendrier".
Les tâches
Celles-ci, en utilisant WebDAV, permettent une gestion de type GTD (Getting Things Done). Elles sont partageables, et les applications front-end renvoient les alertes associées aux échéances.
Le travail collaboratif
WebDAV permet aussi d'écrire un document à plusieurs, avec un archivage des révisions (comme pour Google Docs). Google a abandonné son protocole propriétaire activesync (de Microsoft) en 2013, lui préférant les *DAV.
Solutions "tout-en-un"
Il en existe plusieurs, basées sur les standard présentés précédemment. Elles se singularisent par :
- Des UI dont l'ergonomie varie (du HTML au Java en passant par Ajax)
- Des fonctions de clustering
- Des intégrations de produits tiers
- Des modes déconnectés avec des clients lourds
Voici une liste des projets les plus actifs, et/ou les plus intégrés par les SSLL (Sociétés de Services en Logiciel Libre) :
- Zimbra
- Sogo
- Citadel
- Kolab
- Simple groupware
- etc
La messagerie instantannée et la visio-conférence
Il existe un protocole à l'architecture décentralisée, fonctionnant de serveur à serveur comme pour SMTP : il s'agit de XMPP. Il permet du chat, transfert de fichiers, appels vocaux et vidéo via Jingle, un tableau blanc... il s'agit un réalité d'un protocole basé sur XML, et donc extensible à loisir. Il est utilisé par Google, Apple, Cisco, Oracle... notamment depuis le réseau Jabber. Pour les serveurs, on peut citer :
- Ejabberd (En Erlang, il est assez standard)
- Openfire (en Java, le plus complet)
- Prosody (en LUA, récent et léger)
Pour le clients, on peut citer :
- Empathy (utilise aussi SIP pour les appels)
- Pidgin
- Kopete.
Il existe aussi une autre solution, qui pourrait bien remplacer la première : WebRTC (qui est utilisé par Google, Cisco et autres pour leurs dernières applications de communication vidéo). Onn peut citer :
- JJitsi Meet
- Hublin (Linagora).
Le communication se fait alors en p2p entre les navigateurs (et c'est tout ce dont on a besoin, hormis d'éventuels plugins pour partager l'écran).
NextCloud
NextCloud est une solution très complète de cloud à héberger soi-même sur un serveur web. $
Je me base ici sur : https://help.nextcloud.com/t/complete-nc-installation-on-debian-9-stretch-and-manual-update/21881
Installation
Je commence par installer les dépendances :
apt install vim unzip sudo apt install apache2 mariadb-server libapache2-mod-php apt install php-gd php-json php-mysql php-curl apt install php-intl php-mcrypt php-imagick apt install php-zip php-xmlwriter php-xmlreader php-xml php-mbstring php-simplexml
Puis on télécharge la dernière version et on la met à la racine du serveur web:
wget https://download.nextcloud.com/server/releases/latest.zip unzip latest.zip mv nextcloud/ /var/www
Puis l'on active SSL, et on créée certificat et clef.
a2enmod ssl a2ensite default-ssl mkdir /etc/apache2/ssl cd /etc/apache2/ssl openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.key chmod 600 /etc/apache2/ssl/apache.*
Ensuite :
- On peut télécharger un fichier d'hôte virtuel pour le modifier ensuite. Attention, il faut l'adapter.
cd /etc/apache2/sites-available/
wget https://raw.githubusercontent.com/dicenl/nextcloud/master/vhost.conf
- Voici mon fichier après modifications :
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName nextcloud.ju.lab Redirect permanent "/" "https://nextcloud.ju.lab"
</VirtualHost> <VirtualHost *:443>
DocumentRoot "/var/www/nextcloud/" ServerName host.domain.nl ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/nextcloud/> Options +FollowSymlinks AllowOverride All SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud Satisfy Any </Directory>
SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule>
</VirtualHost>
</IfModule>
On va ensuite activer les modules apache nécessaires :
a2enmod rewrite a2enmod headers a2enmod env a2enmod dir a2enmod mime a2enmod proxy a2enmod proxy_http a2enmod proxy_wstunnel
Puis activer le site :
cd /etc/apache2/sites-available a2ensite nextcloud.conf apache2ctl -t
Modifier le propriétaire du dossier du site :
chown -R www-data:www-data /var/www/nextcloud/
BDD
Avant de lancer NextCloud, il faut s'assurer de créer une base de données et un utilisateur réservé à NextCloud.
mysql -u root -p create database nextcloud; grant all on nextcloud. * to 'utilisateurnextcloud'@'localhost' identified by 'motdepasse'; exit
PHP
Ajouter les lignes suivantes dans /etc/php/7.0/php.ini, à la fin (juste avant Local Variables) :
opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1
Fin de l'installation
On redémarre Apache :
systemctl restart apache2
Pour finir l'installation, il suffit de se rendre avec un navigateur sur le site nouvellement créé : on nous demande de créer un compte administrateur ainsi qu'un accès à la base de données. Rentrez les informations, l'installation s'achèvera toute seule. Cela peut être assez long.
Sécurisation après installation
Dans un premier temps, le plus important est de déplacer le dossier qui contiendra les données hors du répertoire web :
vim /var/www/nextcloud/config/config.php #Modifier cette partie pour mettre votre fqdn array ( 0 => 'localhost', 1 => 'hote.domaine.local',
- Dans le même dossier, modifier le chemin du répertoire de données (là où on veut) :
'datadirectory' => '/var/nc_data', #Sauvegardez et quittez, puis : mv /var/www/nextcloud/data/* /var/nc_data chown -R www-data:www-data nc_data/ cd /var/nc_data touch .ocdata
Ensuite, pour la gestion du firewall :
apt install ufw ufw allow ssh ufw allow http ufw allow https ufw enable
Enfin, il est possible de chiffrer les données sur le serveur. Pour cela, on installe d'abord l'application "Default Encryption Module" si elle n'est pas installée en se connectant en admin:
Puis activer le chiffrement depuis les paramètres, section sécurité:
Par la suite...
La plupart des opération demandent de se connecter en tant qu'admin. Il existe ensuite des tas d'applications : LDAP, Calendrier, tâches, etc... Les mises à jour peuvent se faire automatiquement depuis NextCloud.