Il existe maintenant de nombreux messagers de messagerie instantanée avec un cryptage de bout en bout, mais il existe beaucoup moins d'options que vous pouvez déployer rapidement sur votre serveur.
En étudiant les options, mes yeux sont tombés sur Delta Chat, qui était déjà mentionné sur Habré - un messager sans infrastructure de serveur centralisé, utilisant des serveurs de messagerie pour livrer des messages, ce qui vous permet de le déployer, par exemple, sur votre serveur domestique et de communiquer à partir d'appareils, y compris non avec accès Internet.
Parmi les avantages de cette approche figurent:
- Vous gérez vous-même vos informations, y compris les clés de cryptage.
- Vous ne donnez votre carnet d'adresses à personne.
- Il n'est pas nécessaire d'utiliser un numéro de téléphone pour s'inscrire.
- Clients pour tous les systèmes courants: Windows, Linux, Android, MacOS, iPhone.
- Cryptage STARTTLS / SSL supplémentaire pour la transmission des messages fourni par le serveur de messagerie.
- Possibilité de configurer la suppression des anciens messages de l'appareil (messages de disparition).
- La possibilité de configurer la suppression des messages du serveur à la réception.
- Livraison rapide grâce à IMAP push.
- Groupes de chats protégés.
- Prise en charge du transfert de fichiers, photos et vidéos.
- Le serveur et le client sont à la fois open source et totalement gratuits.
Inconvénients possibles:
- Il n'existe aucun moyen de créer des conférences audio et vidéo natives.
- La nécessité d'exporter / d'importer des clés de chiffrement pour configurer un compte sur plusieurs appareils.
Fait intéressant: Roskomnadzor exigeait déjà que les développeurs de Delta Chat fournissent un accès aux données des utilisateurs, aux clés de cryptage et s'inscrivent dans le registre national des fournisseurs, auquel Delta Chat a refusé, car n'ont pas leurs propres serveurs et n'ont pas accès aux clés de chiffrement.
Chiffrement de bout en bout
Delta Chat peut utiliser une connexion StartTLS ou SSL au serveur pour se connecter au serveur, les messages par défaut seront cryptés selon la norme Autocrypt Level 1 , après l'échange des premiers messages (ils sont transmis sous forme non cryptée). Ainsi, si la communication a lieu entre les utilisateurs d'un serveur, les informations ne seront pas transmises à d'autres serveurs, seuls notre serveur et les appareils des utilisateurs seront occupés à la transmission des messages.
Réglage du serveur
La configuration d'un serveur pour Delta Chat revient à installer Postfix + Dovecot avec StartTLS / SSL configuré et à configurer les enregistrements de domaine.
J'utiliserai CentOS 8 pour configurer le serveur, il peut y avoir des différences mineures pour d'autres distributions. Nous sélectionnons les paramètres de serveur appropriés pour notre tâche.
Dans DNS, j'ai créé deux enregistrements: le domaine de troisième niveau sera à la fois le domaine de messagerie et le nom du serveur de messagerie:
secureim.example.com A <ip> secureim MX secureim.example.com
Définissons
hostname
et installons postfix, dovecot et nginx (nginx - pour obtenir, chiffrons les certificats, wget - pour installer certbot-auto, nano - éditeur):
hostnamectl set-hostname secureim.example.com
dnf install postfix dovecot nginx wget nano -y
Permettons à Postfix de recevoir du courrier de l'extérieur et de configurer le nom d'hôte, le domaine et l'origine du serveur, puisque le domaine de messagerie et l'adresse du serveur sont les mêmes, le domaine sera le même partout:
postconf -e "inet_interfaces = all"
postconf -e "myhostname = secureim.example.com"
postconf -e "mydomain = secureim.example.com"
postconf -e "myorigin = secureim.example.com"
Pour que Delta Chat soit disponible pour une connexion à partir d'Internet, vous devez ouvrir les ports 80, 143, 443, 465, 587, 993. En outre, ouvrez les ports 80, 443 pour crypter les certificats et les mettre à jour à l'avenir. Si vous prévoyez de recevoir des lettres d'autres serveurs de messagerie, vous devrez également ouvrir le port 25 (dans mon cas, je ne prévois pas de me connecter en utilisant d'autres serveurs, donc je ne spécifie pas le 25e port). Et vous devrez peut-être ajouter la redirection de port 80, 143, 443, 465, 587, 993 sur le routeur si le serveur doit être utilisé sur un réseau local.
Ouvrons les ports 80, 143, 443, 465, 587, 993 dans le pare-feu:
firewall-cmd --permanent --add-service={http,https,smtps,smtp-submission,imap,imaps} systemctl reload firewalld
Créons les paramètres de site pour notre nom de domaine afin de chiffrer les certificats en utilisant certbot-auto
nano /etc/nginx/conf.d/secureim.example.com.conf server { listen 80; listen [::]:80; server_name secureim.example.com; root /usr/share/nginx/html/; } }
Activons et exécutons nginx:
systemctl enable nginx
systemctl start nginx
Installez certbot-auto:
cd ~
wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto
yes | certbot-auto --install-only
Générons des certificats pour le site (à l'avenir, nous les utiliserons pour le cryptage TLS de la connexion au serveur):
certbot-auto certonly -a nginx --agree-tos --staple-ocsp --email my_mail@example.com -d secureim.example.com
Les certificats seront créés et leur emplacement sera également affiché dans la console:
# /etc/letsencrypt/live/secureim.example.com/fullchain.pem
# /etc/letsencrypt/live/secureim.example.com/privkey.pem
Corrigez le fichier de configuration de Postfix pour permettre la réception de messages sur les ports 465 et 587:
nano /etc/postfix/master.cf submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth
Exécutons les commandes pour spécifier l'emplacement du certificat TLS et de la clé privée du serveur:
postconf "smtpd_tls_cert_file = /etc/letsencrypt/live/secureim.example.com/fullchain.pem"
postconf "smtpd_tls_key_file = /etc/letsencrypt/live/secureim.example.com/privkey.pem"
Si nécessaire, nous pouvons activer la journalisation des connexions TLS:
postconf "smtpd_tls_loglevel = 1"
postconf "smtp_tls_loglevel = 1"
Ajoutez l'exigence d'utiliser des protocoles non inférieurs à TLS 1.2 à la fin du fichier de configuration de Postfix:
nano /etc/postfix/main.cf smtp_tls_mandatory_protocols = >=TLSv1.2 smtp_tls_protocols = >=TLSv1.2
# Activez et exécutez Postfix:
systemctl start postfix
systemctl enable postfix
Installez, activez et exécutez Dovecot:
dnf install dovecot -y
systemctl start dovecot
systemctl enable dovecot
Modifiez le fichier de configuration Dovecot pour activer le protocole imap:
nano /etc/dovecot/dovecot.conf protocols = imap
Configurons le stockage des e-mails pour que les messages soient enregistrés dans les dossiers utilisateur:
nano /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:~/Maildir mail_privileged_group = mail
Ajoutez Dovecot au groupe de messagerie afin que Dovecot puisse lire les messages entrants:
gpasswd -a dovecot mail
Refuser l'autorisation sans chiffrement TLS:
nano /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = yes
Ajouter une substitution automatique de domaine lors de l'autorisation (uniquement par nom d'utilisateur):
auth_username_format = %n
Modifions l'emplacement du certificat, la clé, l'emplacement du fichier de clé Diffie-Hellman, la version minimale de TLS 1.2 et la préférence pour le choix des protocoles de chiffrement du serveur par rapport au client:
nano /etc/dovecot/conf.d/10-ssl.conf ssl_cert = </etc/letsencrypt/live/secureim.example.com/fullchain.pem ssl_key = </etc/letsencrypt/live/secureim.example.com/privkey.pem ssl_dh = </etc/dovecot/dh.pem ssl_min_protocol = TLSv1.2 ssl_prefer_server_ciphers = yes
Générons une clé Diffie-Hellman, la génération de clé peut prendre beaucoup de temps:
openssl dhparam -out /etc/dovecot/dh.pem 4096
Modifions la section d'authentification du service pour que Postfix puisse se connecter au serveur d'autorisation Dovecot:
nano /etc/dovecot/conf.d/10-master.conf service auth { unix_listener /var/spool/postfix/private/auth { mode = 0600 user = postfix group = postfix } }
Activons la création automatique des dossiers de messagerie système (au cas où nous utiliserions également le serveur pour le courrier ordinaire) en ajoutant la ligne auto = create dans la section des dossiers de courrier:
nano /etc/dovecot/conf.d/15-mailboxes.conf
mailbox Drafts {
auto = create
special_use = \Drafts
}
mailbox Junk {
auto = create
special_use = \Junk
}
mailbox Trash {
auto = create
special_use = \Trash
}
mailbox Sent {
auto = create
special_use = \Sent
}
mailbox "Sent Messages" {
auto = create
special_use = \Sent
}
Configurons Dovecot pour livrer les messages au stockage configuré en ajoutant le paramètre lmtp:
nano /etc/dovecot/dovecot.conf protocols = imap lmtp
Configurons le service LMTP comme suit:
nano /etc/dovecot/conf.d/10-master.conf service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } }
Ajoutez les paramètres suivants à la fin du fichier pour indiquer à Postfix de livrer le courrier au stockage local via le service LMTP Dovecot. Désactivons également SMTPUTF8, car Dovecot LMTP ne prend pas en charge cette extension:
nano /etc/postfix/main.cf mailbox_transport = lmtp:unix:private/dovecot-lmtp smtputf8_enable = no
Créons des utilisateurs qui utiliseront le serveur en créant une entrée correspondante dans le système et en lui donnant un mot de passe qui sera utilisé pour l'autorisation via smtps et imaps:
adduser user1 passwd user1
# Redémarrez Dovecot et Postfix:
systemctl restart dovecot systemctl restart postfix
Ajoutez une tâche à / etc / crontab pour renouveler automatiquement les certificats:
nano /etc/crontab
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"
À ce stade, le serveur doit fonctionner comme un serveur de messagerie, c'est-à-dire vous pouvez vous connecter avec un client de messagerie et essayer d'envoyer et de recevoir des lettres vers d'autres boîtes aux lettres de ce serveur, ou si vous avez ouvert le port 25 ci-dessus, puis vers d'autres serveurs de messagerie.
Configurons maintenant le client Delta Chat sur un PC et un smartphone Android.
Pour se connecter, il suffit de saisir l'adresse mail et le mot de passe créés précédemment sur le serveur, Delta Chat déterminera quels ports peuvent être utilisés, après quoi il sera possible d'ajouter un nouveau contact, également à l'adresse mail, en utilisant une adresse mail valide.
Les premiers messages seront envoyés en clair, à ce stade l'échange de clés est en cours. De plus, les messages seront cryptés en plus du TLS utilisé pour la transmission de données, le cryptage de bout en bout Autocrypt Level 1.
Il est également possible de créer une discussion de groupe vérifiée - où tous les messages sont cryptés par cryptage de bout en bout, et les participants peuvent rejoindre en scannant l'invitation avec un code QR. De cette manière, tous les participants sont reliés les uns aux autres par une chaîne d'invitations qui garantissent la cohérence cryptographique contre les attaques actives du réseau ou les attaques des fournisseurs.
L'un des points les plus intéressants que je voulais vérifier était de voir à quoi ressemble le message dans le magasin du serveur. Pour ce faire, j'ai envoyé un message à un compte inactif - dans ce cas, le message attendra son destinataire sur le serveur, et nous, ayant accès au serveur, pourrons le voir:
Contenu du message
Return-Path: <user2@secureim.example.com>
Delivered-To: user1@secureim.example.com
Received: from secureim.example.com
by secureim.example.com with LMTP
id g/geNIUWzl+yBQAADOhLJw
(envelope-from <user2@secureim.example.com>)
for <user1@secureim.example.com>; Mon, 07 Dec 2020 14:48:21 +0300
Received: from [127.0.0.1] (unknown [192.87.129.58])
by secureim.example.com (Postfix) with ESMTPSA id AA72A3193E11
for <user1@secureim.example.com>; Mon, 7 Dec 2020 11:48:21 +0000 (UTC)
MIME-Version: 1.0
References: <Mr.DoII3_YQLLv.2m_e6hIHc0e@secureim.example.com>
<Mr.YwnXrWVn2Ai.FAQ-abJC0kt@secureim.example.com>
In-Reply-To: <Mr.YwnXrWVn2Ai.FAQ-abJC0kt@secureim.example.com>
Date: Mon, 07 Dec 2020 11:48:20 +0000
Chat-Version: 1.0
Autocrypt: addr=user2@secureim.example.com; prefer-encrypt=mutual;
keydata=xjMEX83vexYJKwYBBAHaRw8BAQdAYgkiTiHDlJtzQqLCFxiVpma/X5OtALu8kJmjeTG3yo
7NIDx1c2VyMkBzZWN1cmVpbS5zYW1vaWxvdi5vbmxpbmU+wosEEBYIADMCGQEFAl/N73sCGwMECwkI
BwYVCAkKCwIDFgIBFiEEkuezqLPdoDjlA2dxYQc97rElXXgACgkQYQc97rElXXgLNQEA17LrpEA2vF
1FMyN0ah5tpM6w/6iKoB+FVUJFAUALxk4A/RpQ/o6D7CuacuFPifVZgz7DOSQElPAMP4AHDyzcRxwJ
zjgEX83vexIKKwYBBAGXVQEFAQEHQJ7AQXbN5K6EUuwUbaLtFpEOdjd5E8hozmHkeeDJ0HcbAwEIB8
J4BBgWCAAgBQJfze97AhsMFiEEkuezqLPdoDjlA2dxYQc97rElXXgACgkQYQc97rElXXhYJgEA+RUa
RlnJjv86yVJthgv7w9LajPAgUGCVhbjFmccPQ4gA/iiX+nk+TrS2q2oD5vuyD3FLgpja1dGmqECYg1
ekyogL
Message-ID: <Mr.qg4Mj0zMVZw.lT9nBnZMoKs@secureim.example.com>
To: <user1@secureim.example.com>
From: <user2@secureim.example.com>
Subject:…
Content-Type: multipart/encrypted; protocol=«application/pgp-encrypted»;
boundary=«OfVQvVRcZpJOyxoScoY9c3DWqC1ZAP»
--OfVQvVRcZpJOyxoScoY9c3DWqC1ZAP
Content-Type: application/pgp-encrypted
Content-Description: PGP/MIME version identification
Version: 1
--OfVQvVRcZpJOyxoScoY9c3DWqC1ZAP
Content-Type: application/octet-stream; name=«encrypted.asc»
Content-Description: OpenPGP encrypted message
Content-Disposition: inline; filename=«encrypted.asc»;
-----BEGIN PGP MESSAGE-----
wU4DKm2PBWHuz1cSAQdA4krEbgJjac78SUKlWKfVyfWt2drZf41dIjTH01J52HIg
aY/ZzCn/ch8LNGv3vuJbJS8RLHK7XyxZ4Z1STAtTDQPBTgNyNpRoJqRwSxIBB0AC
OVrbhsjNPbpojrm/zGWkE5berNF7sNnGQpHolcd+WyCdpqQAk3CaiQjxsm7jdO0A
gMtmXABw/TWcpTU/qOfW/9LBVwFZ/RPCKxCENfC0wau4TI+PMKrF0HODyWfBkEuw
e3WlQpN/t0eSUPKMiMhm7QM0Ffs52fPz0G6dfVJ2M6ucRRyU4Gpz+ZdlLeTLe3g2
PkKbb6xb9AQjdj/YtARCmhCNI48sv7dgU1ivh15r37FWLQvWgkY93L3XbiEaN/X9
EWBQxKql/sWP01Kf67PzbtL5uAHl8VnwInCIfezQsiAsPS2qiCb1sN3yBcNlRwsR
yTs2CPJTIi7xTSpM1S/ZHM5XXGnOmj6wDw69MHaHh9c9w3Yvv7q1rCMvudfm+OyS
/ai4GWyVJfM848kKWTCnalHdR4rZ3mubsqfuCOwjnZvodSlJFts9j5RUT87+j1DM
mQa4tEW8U5MxxoirFfbBnFXGUcU/3nicXI5Yy6wPP8ulBXopmt5vHsd68635KVRJ
2GMy7sMHcjyzujNCAmegIQgKqTLO5NUOtxW7v1OXL23pKx32OGcy8PtEJp7FBQYm
bUNAaz+rkmC971S2FOU0ZGV8LNp8ULioAbL629/JpPHhBOBJCsVnsXDIh6UBPbuM
06dU7VP6l8PNM87X/X1E3m2R1BCNkZghStQrt16fEoA+jm9F6PNtcap2S5rP9llO
klo/ojeciqWl0QoNaJMlMru70TT8a9sf6jYzp3Cf7qFHntNFYG1EcEy9YqaXNS7o
8UOVMfZuRIgNqI9j4g8wKf57/GIjtXCQn/c=
=bzUz
-----END PGP MESSAGE-----
--OfVQvVRcZpJOyxoScoY9c3DWqC1ZAP--
Comme vous pouvez le voir, les lettres sont stockées sur le serveur sous forme cryptée, et si le serveur est saisi par des parties intéressées, les messages ne seront pas menacés.
Pour une plus grande fiabilité, vous pouvez utiliser le chiffrement complet du disque du serveur et de l'appareil sur lequel le client s'exécute, ainsi que des clés pour vous connecter au serveur via ssh et utiliser des mots de passe forts et complexes pour les comptes de messagerie.
Conclusion
Delta Chat est une alternative intéressante pour un messager de messagerie instantanée auto-hébergé, qui vous permet d'échanger des messages en utilisant les protocoles de messagerie existants (ce qui à l'avenir vous permet de ne pas vous soucier du blocage), et une haute résistance à l'interception des messages, l'absence d'un serveur central et la possibilité de se déployer sur votre serveur, vous permet de ne pas craint que vos données ne tombent entre de mauvaises mains.