Fonctionnement
Le laboratoire avec qui on traite crypte les résultats de laboratoires avec des clés personnelles, les envoie à Apirypt (notre tiers de confiance) qui les décrypte, les recrypte avec nos clés avant de nous les envoyer (sur une BAL dédiée à ça).
Apicrypt propose facilement deux solutions:
- on utilise ou paramètre un client mail (dans ce cas c'est manuel)
- on ajoute leur "proxy" mail dans le lan. là c'est surtout adapté quand on a plusieurs services et plusieurs boites aux lettres pour les résultats de laboratoire.
La première solution est chiante car manuelle. Le seconde fait ajouter un élément dans le réseau pour pas grand chose.
Mais comme ils distribuent l'appli codée en C [1] qui peut décrypter depuis un système UNIX, profitons en.
Mon serveur de mails marche au format maildir, ça me permet de séparer simplement les mails.
Vous verrez, à une étape, le message transite en clair sur le serveur où se trouve l'application de dossier de soins. Je précise que le serveur de mails est sur la passerelle et que cette étape se fait via la carte réseau dans le lan, dans une DMZ. De plus physiquement les deux machines sont branchées sur le même switch, ce qui rendra difficile un sniffage tant que le cache d'adresses mac du répartiteur n'est pas en faute.
Monter le dossier dans lequel seront déposés les résultats de laboratoire.
Editer le fichier /etc/fstab et y ajouter la ligne suivante:
//IP-du-serveur/applic$ /media/applic cifs user,rw,username=USERNAME,password=PASSWORD,gid=1000,uid=1000,iocharset=utf8 0 0
J'utilise un compte qui a des droits minimums
Créer le point de montage
mkdir /media/applic
Et monter le dossier
mount /media/applic
A ce stade là, le serveur mail sait communiquer avec son voisin, pour accéder au partage réseau applic$, on en aura besoin pour déposer les résultats de laboratoire. (il savait déja le faire mais pour le partage intranet).
Installer l'appli apiuncrypt
créer les dossier nécessaires.
mkdir /home/virtual/apicrypt
Le dossier home/virtual contient les "maildir" (traduction: les mails sous formes des fichiers des utilisateurs) Si c'est le dossier de "virtual" c'est parceque les utilisateurs ne sont pas (plus) des comptes unix, mais des enregistrements dans une base de données, et donc des utilisateurs virtuels.
Je m'égare....
ça m'arrange de tout mettre là, car le script je vais le faire marcher par le compte système unix vmail. C'est lui qui a les droits sur les mails (hormis root) et ça m'arrange de tout lui regrouper dans son home.
je me place dans le dossier, je télécharge l'appli qui décrypte les mails, et je crée le dossier pour les clés de décriptage.
cd /home/virtual/apicrypt
wget http://www.apicrypt.org/page5/files/linux/apiuncrypt.tgz
tar -xvf apiuncrypt.tgz
mkdir Clefs
Déposer les clefs de décryptage (le master et la clé personnelle) de l'année en cours UNIQUEMENT dans le dossier Clefs (attention il est sensible à la casse le C est en majuscule).
rendre les droits à vmail
chown -R vmail:vmail /home/virtual/
Le script qui lancera le décryptage des mails. et pousse les fichiers textes décryptés dans le répertoire où le logiciel de dossier de soins va les chercher.
Pour le moment c'est un script shell enregistré en tache cron, exécuté par le compte vmail. Je le remplacerai par des regles "mailfilter" ou procmailrc dès que je saurai le faire (plus propre).
je l'ai mis là: /home/virtual/apicrypt/Uncryptbal.sh
et voici ma composition:
##!/bin/sh
#by Gnieark http://blog-du-grouik.tinad.fr
#version 0 fevrier 2010
# Le contenu de ce code est distribué en licence Cecill V2,
#qui dit grossomodo que c'est libre de droits, sauf la marque de paternité du code (pour ma gloire),
#mais aussi que je ne suis pas responsable si ce code fait une connerie .
#la license est disponible là: http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt
#
#Liste les fichiers "mails d'un repertoire", décrypte le corps via la moulinette apycript et les envoie dans le dossier pour l'application de dossier de soins.
#
#variables chemins
repertoireorigine="/home/virtual/DOSSIER DE L'ADRESSE MAIL DEDIEE AU LABO/new"
repertoiredestination="/media/applic/soins/resultatslabo/Data/Reception/A classer/"
cheminapiuncrypt="/home/virtual/apicrypt/apiuncrypt"
chemincles="/home/virtual/apicrypt/"
fichierlog="/home/virtual/apicrypt/log.txt"
fichiertemp="/home/virtual/apicrypt/temp.txt"
#variable d'erreur (déclenchera une alerte à la fin du script)
erreur=0
#log:
echo "$(date) Début du script décriptage de la bal pour les résultats laboratoire ">>$fichierlog
#supprmmer le fichier temporaire s'il existe
if [ -e "$fichiertemp" ];
then
rm $fichiertemp
echo "$(date) Le fichier temp.txt existait, suppression">> $fichierlog
else
echo "$(date) Le fichier temp.txt n'existait pas (normal)">> $fichierlog
fi
#lister les fichiers dans le repertoire
find $repertoireorigine -type f > $fichiertemp
while read line; do
$cheminapiuncrypt -s $line -k $chemincles
#vérifier si le fichier.txt a ete créé
if [ -e "$line.txt" ];
then
echo "$(date) Le fichier $line.txt décrypté a été créé">> $fichierlog
#on envoit le fichier dans son repertoire de destination
mv "$line.txt" "$repertoiredestination"
fichier = basename $line.txt
#vérifier si le tranfert s'effectue
if [ -e "$repertoiredestination$fichier" ];
then
#c'est ok
rm $line
echo "$(date) -OK-le fichier $line transfert ok">> $fichierlog
else
#probleme
echo "$(date) -WARNING- le fichier $line.txt transfert échoué">> $fichierlog
erreur=2
fi
else
echo "($date) -WARNING- le fichier $line n'a pas été décrypté"
erreur=1
fi
done < $fichiertemp
if [ $erreur = 1 ];
then
echo "Erreur de type 1 sur l'interface laboratoire. Un des fichiers n'a pas pu être décrypté (Il est probable qu'il sagisse d'un spam ou d'un mail \"parasite\" Le message d'origine n'a pas été supprimé" > $fichiertemp
mail -s "Erreur sur l'interface de laboratoire" "MAILS DES DESTINATAIRES DES ALERTES" < $fichiertemp
fi
if [ $erreur = 2 ];
then
echo "Erreur de type 2 sur l'interface laboratoire. Le transfert d'un des fichiers décryptés n'a pas été effectué, vérifiez que $repertoiredestination est une ressource disponible" > $fichiertemp
mail -s "Erreur sur l'interface de laboratoire" "MAILS DES DESTINATAIRES DES ALERTES" < $fichiertemp
fi
echo "$(date) Fin du script décriptage de la bal pour les résultats laboratoire ">>$fichierlog
Il est un chouilla long, parcequ'il vérifie à plusieurs endroits si les étapes se sont bien déroulées et envoie un mail d'alerte en cas d'erreur. De plus les actions du script sont logguées.
Créer la crontab pour que le script soit exécuté automatiquement
crontab -e
Aouter la ligne suivante:
*/5 * * * * su -c '/home/virtual/apicrypt/Uncryptbal.sh' vmail
Mise à jour des clés.
Il suffira de les déposer das le dossier prévu. et supprimer les anciennes (sinon ça marche pas)