Lotharedon

Journal d'un apprenti-sorcier en Sciences Informatiques

Mise en place d'un serveur e-mail : installation du "webmail"

Date 30/12/2014

Comme vu dans un article précédent, j'ai jeté mon dévolu sur Sogo pour la partie webmail, qui apporte également une très bonne gestion Caldav et Carddav. Pour voir à quoi il ressemble, une démo est disponible ici. Bien qu'un guide d'installation soit disponible, Sogo ne propose pas d'étapes à suivre pour le faire fonctionner. Je vais tâcher de le faire ici, dans l'optique d'une utilisation avec peu d'utilisateurs. Pour une installation plus personnalisée, le guide d'installation indique toutes les options disponibles, leurs valeurs par défaut, et comment les utiliser.


Installation

Sogo propose des paquets pour les distributions GNU/Linux les plus populaires pour les serveurs. D'autres distributions peuvent également l'empaqueter.
Ayant une CentOS 7, Sogo propose un dépôt spécialement pour ma distribution. Pour le faire fonctionner, il lui faudra également une base de données MySQL ou PostgreSQL, un serveur Web, et PHP. pour ma part, j'ai opté pour Apache que je connais bien, et MySQL, plus léger.

Pour ceux qui ne l'ont pas dans leur gestionnaire de paquet, il reste la solution de la compilation manuelle. C'est plus long, mais au moins vous l'aurez. Il faudra également compiler Sope, qui permet à Sogo d'accéder à sa base de données.


Compilation de Sope

Tout d'abord, il vous faudra installer GNUStep, dont Sope dépend. Ensuite, il faut récupérer les sources de la dernière version stable ici.
Une fois les sources extraites dans un répertoire de travail, commencez par "sourcer" le script "GNUstep.sh" ou GNUstep.csh" (en fonction de votre shell) afin de définir correctement les variables d'environnement requises. Une fois cela fait, pour lancer la compilation, il suffit de lancer ces commandes :
./configure --with-gnustep --enable-strip --disable-debug
make
sudo make install
Pour des raisons de sécurité et éviter de risquer d'abîmer le système, il faut toujours compiler avec un utilisateur normal.

Pour activer le mode de débuggage, la commande configure sera :
./configure --with-gnustep --disable-strip --enable-debug

Et enfin, à partir de là, il faudra installer le mode Apache "mod_ngobjweb" pour lui permettre de faire suivre les requêtes Web vers Sope, et donc Sogo. Pour cela, à partir du dossier des sources, il faut aller dans le répertoire "sope-appserver/mod_ngobjweb" et suivre la procédure indiqué dans le fichier README.


Compilation de Sogo

Le procédure est globalement la même. Les sources se trouvent ici, et les commandes sont :
./configure --with-gnustep --enable-strip --disable-debug
make
sudo make install
Une fois cela fait, Sogo sera installé dans le répertoire indiqué par la variable d'environnement "GNUSTEP_LOCAL_ROOT". Celle-ci est variable en fonction de votre distribution.

Pour finir, si les dossiers "UI/WebServerRessources" et "UI/Templates" ne sont pas présents dans "$GNUSTEP_LOCAL_ROOT/Library/SOGo-0.9/", copiez-les dedans.

À présent Sogo est installé, et vous pouvez supprimer les sources.


Configuration

Base de données

Tout d'abord il faut créer un utilisateur et une base de données pour Sogo :
create database sogo;
grant all privileges on sogo.* to 'sogo'@'localhost' identified by '<mot de passe>'

Dans le cas où vous ne voulez pas vous embêter avec un annuaire LDAP pour identifier vos utilisateurs, vous pouvez en créer dans la base de donnée de Sogo :

Ensuite, connectez vous à votre base de données, créez la table qui contiendra les utilisateurs, et ajouter ceux que vous désirez :
mysql -u sogo -D sogo -p
MariaDB [sogo]> create table sogo_custom_users (
                       -> c_uid varchar(40) primary key, 
                       -> c_name varchar(40) not null, 
                       -> c_password varchar(140) not null, 
                       -> c_cn varchar(128), 
                       -> mail varchar(128));

MariaDB [sogo]> insert into sogo_custom_users values (
                       -> '<identifiat>', 
                       -> '<nom, peut être identique à l'identifiant">', 
                       -> '<génération du hash à la volé du mot de passe>', 
                       -> '<nom courant>', 
                       -> '<adrese e-mail>');
L'identifiant et le mot de passe sont également exploités pour l'authentification IMAP. Les méthodes de hash et de stockage n'ont pas d'influence sur cet utilisation.
Pour générer à la voler le hash du mot de passe, MySQL a plusieurs fonctions qui permettent de le calculer directement. Ces fonctions sont MD5('<mot_de_passe>'), SHA('<mot_de_passe>'), et SHA2('<mot de passe>',<algorithme>). Les algorithmes disponibles pour SHA2 sont 224 (SHA-224), 256 (SHA-256), 384 (SHA-384), et 512 (SHA-512).

Et enfin, récupérez les diverses informations utiles à la configuration de Sogo :
MariaDB [sogo]> show variables where Variable_name = 'port';
+-------------------+--------+
| Variable_name | Value |
+-------------------+--------+
| port                  | 3306  |
+-------------------+--------+

MariaDB [sogo]> select user();
+--------------------+
| user()                |
+--------------------+
| sogo@localhost |
+--------------------+

MariaDB [sogo]> select database();
+--------------+
| database() |
+--------------+
| sogo          |
+--------------+
À partir de ces informations, nous pouvons récupérer l'url de la base de données. Elle sera de type "mysql://<utilisateur SQL>:<mot de passe SQL>@<hôte>:<port>/<base de données>". Ainsi, dans notre cas et avec les options par défaut, ce sera : "mysql://sogo:<mot de passe>@localhost:3306/sogo". Cette URL nous servira pour la suite.


Sogo

La configuration de Sogo est effectuée dans le fichier "/etc/sogo/sogo.conf". Les valeurs par défaut de chacun des paramètres figures dans le guide d'installation. Certains paramètres sont déjà présents, en étant commentés, pour donner des exemples d'utilisation.
Voici les paramètres indispensables pour concorder avec notre installation :

  • Configuration de la base de données :
SOGoProfileURL = "&lt;URL de la base de données&gt;/sogo_user_profile"; //URL vers les profils d'utilisateurs
OCSFolderInfoURL = "&lt;URL de la base de données&gt;/sogo_folder_info"; //URL vers la localisation des dossiers des utilisateurs
OCSSessionsFolderURL = "&lt;URL de la base de données&gt;/sogo_sessions_folder"; //URL vers le stockage sécurisé des informations de sessions des utilisateurs

  • Configuration du système d'authentification. Cela se passe dans un tableau qui est également commun a l'authentification par LDAP :
SOGoUserSources = (
  {
    type = sql;  //Peut être de type "ldap" ou "sql"
    id = directory;  //Honnêtement, je n'ai pas compris à quoi il sert. J'ai laissé la valeur par défaut proposé dans l'exemple de configuration
    viewURL = "&lt;URL de la base de données&gt;/sogo_custom_users";  //L'URL vers notre table contenant nos utilisateurs
    canAuthenticate = YES; //Si cette table permet d'authentificer des utilisateurs
    isAddressBook = YES;  //Si cette table peut être utilisé comme un carnet d'adresse partagé en lecture seule
    userPasswordAlgorithm = sha512; //l'algotirhme de hash utilisé
  }
);

  • Le reste. Les différentes valeurs possibles sont indiquées dans le guide d'installation.
SOGoSuperUsernames = (&ltutilisateur 1&gt;, &ltutilisateur 2&gt;);  //Liste des utilisateur ayant les privilèges administrateur
SOGoMailDomain &lt;nom de domaine&gt;  //Nom de domaine par défaut, utilisé pour valider les adresses e-mails
SOGoTimeZone Europe/Paris;  //Fuseau horaire
SOGoLanguage French;

Les autres paramètres dépendent entièrement de vos préférences ou peuvent être laissés avec leur valeurs par défaut.

À présent, Sogo est complètement configuré et pourra se lancer. Il ne reste plus qu'à le rendre accessible via le web.


Apache

Installez, et vérifiez que les modules suivant soient bien activés dans la configuration de Apache : "proxy", "proxy_http", "headers" et "rewrite".
Par défaut, la configuration de Sogo dans Apache, situé dans "/etc/<dossier de configuration de Apache>/conf.d/SOGo.conf", ajoute un dossier "/SOGo" pour chacun des sites activés. Pour changez ceci renommez "SOGo.conf" en "SOGo.conf.ori". Surtout ne le supprimez pas, il contient une configuration par défaut correct que nous pouvons reprendre ainsi que des exemples pour diverses options. Ensuite, dans le fichier d'hôte virtuel via lequel vous souhaitez rendre accessible Sogo, ou si vous n'en utilisez pas dans un nouveau fichier du dossier "conf.d", ajoutez ceci (basé sur le fichier "SOGo.conf.ori") :
#UNIQUEMENT dans le cas d'un nouvel hôte virtuel dédié à Sogo : 
DocumentRoot /usr/lib/GNUstep/SOGo/WebServerResources/

#Pour tout le monde
##Les alias
Alias /SOGo.woa/WebServerResources "/usr/lib64/GNUstep/SOGo/WebServerResources"
Alias /SOGo/WebServerResources "/usr/lib64/GNUstep/SOGo/WebServerResources"                            	                                                                                                   

##Le dossier apache
<Directory /usr/lib64/GNUstep/SOGo/>
    AllowOverride None

    <IfVersion < 2.4>
        Order deny,allow
        Allow from all
    </IfVersion>
    <IfVersion >= 2.4>
        Require all granted
    </IfVersion>

# Explicitly allow caching of static content to avoid browser specific behavior.                                                                                                                       
# A resource's URL MUST change in order to have the client load the new version.                                                                                                                       
    <IfModule expires_module>
        ExpiresActive On
        ExpiresDefault "access plus 1 year"
     </IfModule>
 </Directory>

##Le proxy pour accéder à Sogo
ProxyRequests Off
SetEnv proxy-nokeepalive 1
ProxyPreserveHost On
ProxyPass /SOGo http://127.0.0.1:20000/SOGo retry=0

<Proxy http://127.0.0.1:20000/SOGo>
## À ajuster selon la configuration, ici paramétré pour un profile sécurisé couplé à du HTTPS
    RequestHeader set "x-webobjects-server-port" "443"
    RequestHeader set "x-webobjects-server-name" "lotharedon.org"
    RequestHeader set "x-webobjects-server-url" "https://lotharedon.org"
    RequestHeader unset "x-webobjects-remote-user"
    RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0"

    AddDefaultCharset UTF-8

    Order allow,deny
    Allow from all
</Proxy>


Voilà, à présent notre installation de Sogo est complète. Il ne nous reste plus qu'à lancer Sogo, à redémarrer Apache, et à la tester !


Bonus

  • Adresse IMAP externes :
Pour autoriser la relève des adresses IMAP externes, ajoutez cette ligne dans la configuration de Sogo :
SOGoMailAuxiliaryUserAccountsEnabled = YES;

  • Ajout des filtres et de la gestion des absences prolongées :
Il faut avoir installé Sieve sur le serveur. Une fois cela fait, les options de filtrages sont disponibles dans l'onglet "Courrier" des préférences, et un onglet "Absences prolongées" apparait également. Ce ne sont que des bêtes interfaces aux filtres Sieve.

Tags Tags de l'article :

Aucun commentaire

Comment RSS feed Flux RSS des commentaires de cet article