lundi 5 décembre 2022

Tag Archives: postfix

Hébergement et Partage de photos

Quel besoin ?

La famille s’agrandit pas mal ces derniers temps, les parents sont devenus grands-parents et demandent réglièrement des photos des petits-enfants.

Ils ont tous accès à Internet et une boite mail. Les mail-groupés s’échangent mais nous sommes limités à 3 photos que nous devons réduire pour ne pas exploser certaines boites.

Quand quelqu’un veut tirer une photo, il demande alors de renvoyer l’image originale en bonne définition, ça devient contraignant !

L’objectif est donc de trouver une solution accessible à des personnes non techniques pour échanger des photos. Le parc informatique est varié, il comprend des PC/MAC sous différents OS. Il y a également des tablettes et smartphones sur iOS et Android.

Choix technique

Je n’ai pas eu l’occasion d’évaluer plusieurs solutions techniques. En effet, OwnCloud, que je souhaitais essayer depuis longtemps en remplacement de DropBox, répond exactement au besoin :

  1. Accès par navigateur web + possibilité d’installer un client sur ordinateur / smartphone.
  2. Gestion native des utilisateurs et des groupes.
  3. Fonctionnalité de partage d’un dossier avec un groupe.

Il était temps d’essayer pour de vrai. Après quelques essais sur ma RaspberryPi, il est rapidement apparu que la capacité de calcul et le débit montant étaient insuffisants pour une utilisation fluide.

Je profite donc de ce paragraphe pour remercier Idem d’avoir accepté d’héberger mon serveur chez lui !

Les prochaines parties traiteront de la configuration du serveur web. Elles ne sont pas spécifiques à OwnCloud et vous pouvez les sauter si vous prenez une solution d’hébergement web clef en main.

DNS

Le DNS est le service qui associe l’URL, une adresse de site Internet comprehensible par un humain (par exemple : www.google.fr) avec une IP, l’adresse qui sert à échanger les informations entre ordinateurs sur Internet (exemple : 173.194.45.55 pour google au moment où j’écrit ces lignes).

Il existe une multitudes d’entrées différentes dans ce tableau :

  • A : c’est l’association de base : mondomaine.com → IP du serveur
  • CNAME pour définir un alias : www.mondomaine.com → mondomaine.com
  • MX : qui sert à diriger les email de ce domaine
  • NS : qui indique quel est le server de service DNS qui possède le tableau d’entrées DNS.
  • Et encore pleins d’autre que je ne maitrise pas !

Comme je disposais d’un serveur dont je connaissais l’IP (cela marche aussi si vous hebergez chez vous derrière une box qui offre une IP fixe), j’ai directement acheté un nom de domaine chez OVH.

J’ai donc ajouté :

  • Une entrée A : pour associer mondomaine.com et l’IP fixe.
  • Une entrée CNAME : pour renvoyer owncloud.mondomaine.com sur mondomaine.com (et donc sur l’IP fixe). Nous le verrons dans la partie suivante que c’est le serveur qui s’occupera de faire le tri !
  • j’ai laissé la configuration MX définie par défaut par OVH afin de profiter de leur service mail entrant.

Configuration Apache

Apache est un serveur web. Il répond aux requetes de type HTTP ou HTTPS.

Nous allons voir comment le configurer pour qu’il réponde différement sur l’adrese principale et sur le sous-domaine.

On va créer un fichier domaine.com dans /etc/apache2/sites-avaiable/ :

 

 ServerAdmin webmaster@domaine.com
 DocumentRoot /var/www /com.domaine/www/
 servername www.domaine.com
 errorlog /var/log/apache2/domaine.com/www-error.log
 customlog /var/log/apache2/www-access.log combined

 ServerAdmin webmaster@domaine.com
 DocumentRoot /var/www /com.domaine/owncloud/
 servername owncloud.domaine.com
 errorlog /var/log/apache2/domaine.com/owncloud-error.log
 customlog /var/log/apache2/owncloud-access.log combined

La première règle dit qu’il faut aller chercher les documents pour www.domaine.com dansle dossier /var/www/com.domaine/www et comment sauvegarder les log (journaux d’exécution).
C’est pas dur !

Il faut ensuite créer les dossiers sinon lorsqu’on va dire à apache de prendre ce site en compte il va crier fort !

Pour la suite, toutes les commandes console sont à exécuter en temps que root ou en utilisant sudo :

mkdir -p /var/www/com.domaine/www/
mkdir -p /var/www/com.domaine/owncloud/
mkdir -p /var/log/apache2/domaine.com/

Les dossiers ont été créés avec root comme propriétaire, or c’est apache qui va devoir les utiliser il faut donc changer le propriétaire des dossiers.

chown -R www-data:www-data /var/www/com.domaine/

Nous allons maintenant activer (enable en anglais) la nouvelle configuration du site :

a2ensite domaine.com

a2ensite pour apache2 enable site.

Owncloud

Installation

Nous alons maintenant récupérer le logiciel depuis le site officiel du projet : owncloud.org

Au moment où j’écris ces lignes, la version en cours est la 6.0.1 :

cd /tmp
wget http://download.owncloud.org/community/owncloud-6.0.1.tar.bz2
tar -xjvf owncloud-6.0.1.tar.bz2

Nous avons donc un dossier owncloud dans lequel tous les fichiers de owncloud se trouvent. Nous allons les copier dans le répertoire d’apache.

cp -r owncloud/* /var/www/com.domaine/owncloud/

Et changer de propriétaire :

chown -R www-data:www-data /var/www/com.domaine/owncloud

Depuis un navigateur web, il suffit de visiter le site pour lancer l’installation complète.

Aperçu de l'écran d'accueil de OnwCloud à la première connexion.
Aperçu de l’écran d’accueil de OnwCloud à la première connexion.

Création des utilisateurs

Pour chaque utilisateur final, il faut créer un identifiant et un mot de passe.

Aperçu du menu disponible pour l'administrateur.
Aperçu du menu disponible pour l’administrateur.

Il faut bien penser à créer un groupe commun à tous les utilisateur.

Création rapide d'un utilisateur du service OwnCloud.
Création rapide d’un utilisateur du service OwnCloud.

Il est également pratique d’avoir un utilisateur administrateur de groupe qui pourras aider les utilisateurs en cas de perte de mot de passe par exemple.

Pour l’administrateur du service, j’ai supprimé l’ensemble des documents présents par défaut et limité l’espace à 10MB.

Interface de gestion des utilisateurs du service
Interface de gestion des utilisateurs du service

Paramètres supplémentaires

L’application owncloud pour mobile Android est open source mais payante sur le Google Play Store. F-droid distribue cette application gratuitement, mais mes utilisateurs ne sont pas habitués à utiliser ce store. Du coup, j’ai décidé d’héberger moi même l’application.

J’ai donc édité le fichier config/config.php du répertoire owncloud en ajoutant l’entrée :

'customclient_android' => 'http://www.domaine.com/owncloud_1.5.4.apk'

Et j’ai placé le paquet dans sur mon serveur dans /var/www/com.domaine/www/

Ainsi sur l’écran d’accueil, quand l’utilisateur clique sur l’icone Android Store, il téléchargera le paquet au lieu d’être redirigé sur le play-store.

Aperçu de l'écran de première connexion. Les liens pointent vers les AppStore "officiels" où vers le dépots renseigné dans le fichier config.php.
Aperçu de l’écran de première connexion. Les liens pointent vers les AppStore « officiels » où vers le dépots renseigné dans le fichier config.php.

Postfix

Et si on permettait l’envoi de mail ?

C’est à la fois simple et compliqué ! A vrai dire je n’ai pas réussi à aller aussi loin que je voulais, cependant j’ai pu faire qu’on puisse envoyer des mails depuis owncloud.

Une fois postfix installé sur la machine, éditer le fichier main.cf :

####################### 
# Paramètres généraux # 
####################### 

# Nom de domaine de messagerie principal. 
mydomain = domaine.com
# Nom d'hôte. 
myhostname = domain.com
# Nom de domaine utilisé pour les adresses incomplètes. 
myorigin = $mydomain 

# Activer l'écoute IPv6. 
inet_protocols = all 

# Les clients SMTP sûrs, qui auront plus de privilèges 
# (concrètement, le droit d'utiliser ce serveur comme relais). 
mynetworks = 127.0.0.0/8 [::1]/128 
################ 
# Serveur SMTP # 
################ 

# Les noms de domaine pour lesquels on accepte le courrier. 
mydestination = localhost, localhost.localdomain 
# Si votre FAI ne vous permet pas de poster le courrier directement, 
# utiliser son serveur SMTP comme relais en décommentant cette ligne. 
#relayhost = smtp.fai.com

Et c’est tout !

On a donc un service qui accepte tous les mail venant du serveur local et qui se charge de les transmettre en local si l’adresse de destination est @localhost ou @localhost.localdomain, ou alors de proche en proche à d’autres relais de mail jusqu’à leur destinataire.

HTTPS

Comme j’ai des utilisateurs qui veulent accéder au cloud via leur téléphone portable et que je n’ai aucune confiance en les opérateurs de téléphonie quant à ce qu’il stockent j’ai souhaité utiliser HTTPS pour encrypter les échanges de bout en bout.

StartSSL fournit des certificat de sécurité signés par l’autorité de certification (CA) StartCom gratuitement mais limité à un sous-domaine.

Aperçu du site StartSSL qui permet d'obtenir des certificats SSL gratuitement.
Aperçu du site StartSSL qui permet d’obtenir des certificats SSL gratuitement.

La procédure demande d’envoyer un email au hostmaster déclaré dans le WHOIS de votre domaine, (généralement hostmaster@domaine.com) c’est pour cela que j’ai laissé OVH gérer le MX de mon DNS j’ai ainsi pu faire une redirection de mon domaine vers l’adresse que j’utilise régulièrement.

En fin de procédure, StartSSL fournit 2 fichiers :

  • Le certificat à sauvegarder dans /etc/ssl/certs/owncloud.domaine.com.crt
  • La clé privée à sauvegarder dans /etc/ssl/private/owncloud.domaine.com.key

Il faut ensuite éditer le fichier des virtual hosts d’apache :

 

serveradmin admin@domain.com 
servername owncloud.domaine.com
redirect / 

DocumentRoot /var/www/com.domaine/owncloud 
serveradmin admin@domain.com 
servername owncloud.domaine.com
errorlog /var/log/apache2/domaine.com/owncloud-error.log.http 
customlog /var/log/apache2/domaine.com/owncloud-access.log.http combined 

SSLEngine on 
SSLProtocol all -SSLv2 
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM 
SSLCertificateFile /etc/ssl/certs/owncloud.domaine.com.crt 
SSLCertificateKeyFile /etc/ssl/private/owncloud.domaine.com.key 
SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem 
SSLCACertificateFile /etc/ssl/certs/ca.pem

Le premier virtualhost écoute sur le port 80 (HTTP), j’accepte les connexion et je les renvoie sur la partie sécurisée en HTTPS (port 443).

Le second virtualhost écoute sur le port HTTPS, en plus des infos classique (5 premières lignes), j’ai activé le cryptage SSL (lignes 7 à 9).

La 10ème indique le chemin vers mon certificat

La 11ième indique où je trouve la clef privée pour décrypter les données que le client me transmet.

Les lignes 12 et 13 donnent la chaîne de confiance, c’est ce qui garantit que l’utilisateur peut faire confiance au site qu’il visite.

Installation du module MailNotify

Il existe un module bien pratique qui envoie automatiquement un mail au groupe de partage lorsqu’un nouveau document est mis à disposition.

Il s’appelle MailNotify.

Mais son installation n’est pas instinctive. Et nécessite quelques accès supplémentaires. En l’état, il ne sera pas possible de l’utiliser si vous n’avez qu’un hébergement web.

Encore une fois nous allons télécharger le plug in puis l’envoyer dans sa destination :

cd /tmp
wget https://github.com/EELV-fr/mailnotify/archive/master.zip
unzip master.zip

On obtient un répertoire mailnotify-master contenant tout le code de ce plug-in. Il faut savoir que OwnCloud n’accepte d’activer que les plugging qui sont dans un répertoire qui a pour même nom que les informations qu’il présente. C’est surement pas clair mais en gros le dossier du pluggin doit s’appeler strictement mailnotify.

mkdir /var/www/com.domain/owncloud/apps/mailnotify
cp -r mailnotify/* /var/www/com.domain/owncloud/apps/mailnotify
chown -R www-data:www-data /var/www/com.domain/owncloud/apps/mailnotify

Puis aller avec le compte administrateur dans la partie applications et activer MailNotify.

Malheureusement ce n’est pas fini, ce plug-in nécessite d’avoir une tâche qui s’exécute périodiquement. Il faut donc ajouter au gestionnaire de tache péiodique de linux une entrée spécifique. On crée donc un fichier owncloud dans /etc/cron.d/

# /etc/cron.d/owncloud 
# 
# Run the owncloud mailnotify task every 15 minutes
# 
SHELL=/bin/sh 
PATH=/usr/local/bin:/usr/bin:/bin 

######################################################################## 
# 
*/15 * * * * root php -f /var/www/com.domain/owncloud/apps/mailnotify/lib/cronjob.php >> /var/log/owncloud.log 2>&1

La tâche périodique de MailNotify est donc appelée toute les 15 minutes, elle regarde si des nouveaux documents ont été ajoutés et si c’est le cas un email est envoyé à tous les utilisateurs du groupe de partage ayant donné leur email.