Es gibt jetzt viele IM-Messenger mit End-to-End-Verschlüsselung, aber es gibt weitaus weniger Optionen, die Sie schnell auf Ihrem Server bereitstellen können.

Während ich die Optionen studierte, fiel mein Blick auf Delta Chat, das bereits in Habré erwähnt wurde - einem Messenger ohne zentralisierte Serverinfrastruktur, der Mailserver zur Zustellung von Nachrichten verwendet, mit denen Sie ihn beispielsweise auf Ihrem Heimserver bereitstellen und von Geräten aus kommunizieren können, auch nicht mit Internetzugang.
Zu den Vorteilen dieses Ansatzes gehören:
- Sie verwalten Ihre Informationen selbst, einschließlich der Verschlüsselungsschlüssel.
- Sie geben Ihr Adressbuch an niemanden weiter.
- Es ist nicht erforderlich, eine Telefonnummer zur Registrierung zu verwenden.
- Clients für alle gängigen Systeme: Windows, Linux, Android, MacOS, iPhone.
- Zusätzliche STARTTLS / SSL-Verschlüsselung für die vom Mailserver bereitgestellte Nachrichtenübertragung.
- Möglichkeit zum Konfigurieren des Löschens alter Nachrichten vom Gerät (Verschwinden von Nachrichten).
- Die Möglichkeit, das Löschen von Nachrichten vom Server beim Empfang zu konfigurieren.
- Schnelle Lieferung dank IMAP Push.
- Gruppengeschützte Chats.
- Unterstützung für die Übertragung von Dateien, Fotos und Videos.
- Der Server und der Client sind beide Open Source und völlig kostenlos.
Mögliche Nachteile:
- Es gibt keine Möglichkeit, native Audio- und Videokonferenzen zu erstellen.
- Die Notwendigkeit, Verschlüsselungsschlüssel zu exportieren / importieren, um ein Konto auf mehreren Geräten einzurichten.
Interessante Tatsache: Roskomnadzor forderte bereits von Delta Chat-Entwicklern den Zugriff auf Benutzerdaten, Verschlüsselungsschlüssel und die Registrierung im staatlichen Register der Anbieter, denen Delta Chat dies verweigerte, weil Sie haben keine eigenen Server und keinen Zugriff auf Verschlüsselungsschlüssel.
End-to-End-Verschlüsselung
Delta Chat kann eine StartTLS- oder SSL-Verbindung zum Server verwenden, um eine Verbindung zum Server herzustellen. Nachrichten werden standardmäßig nach dem Autocrypt Level 1- Standard verschlüsselt , nachdem die ersten Nachrichten ausgetauscht wurden (sie werden unverschlüsselt übertragen). Wenn also zwischen Benutzern eines Servers kommuniziert wird, werden keine Informationen an andere Server übertragen, sondern nur unser Server und die Geräte der Benutzer sind mit der Übertragung von Nachrichten beschäftigt.
Server-Tuning
Bei der Konfiguration eines Servers für Delta Chat müssen Sie Postfix + Dovecot mit konfiguriertem StartTLS / SSL installieren und Domäneneinträge konfigurieren.
Um den Server zu konfigurieren, verwende ich CentOS 8, bei anderen Distributionen kann es zu geringfügigen Abweichungen kommen. Wir wählen die entsprechenden Serverparameter für unsere Aufgabe aus.

In DNS habe ich zwei Einträge erstellt: Die Domain der dritten Ebene ist sowohl die Mail-Domain als auch der Name des Mail-Servers:
secureim.example.com A <ip> secureim MX secureim.example.com
hostname
Setzen und installieren wir postfix, dovecot und nginx (nginx - um Zertifikate zu verschlüsseln, wget - um certbot-auto, nano - editor zu installieren):
hostnamectl set-hostname secureim.example.com
dnf install postfix dovecot nginx wget nano -y
Lassen Sie Postfix E-Mails von außen empfangen und den Hostnamen, die Domäne und den Ursprung des Servers konfigurieren, da die E-Mail-Domäne und die Serveradresse identisch sind und die Domäne überall gleich ist:
postconf -e "inet_interfaces = all"
postconf -e "myhostname = secureim.example.com"
postconf -e "mydomain = secureim.example.com"
postconf -e "myorigin = secureim.example.com"
Damit Delta Chat für die Verbindung über das Internet verfügbar ist, müssen Sie die Ports 80, 143, 443, 465, 587, 993 öffnen. Öffnen Sie auch die Ports 80, 443, damit wir Zertifikate verschlüsseln und in Zukunft aktualisieren können. Wenn Sie Briefe von anderen Mailservern empfangen möchten, müssen Sie auch Port 25 öffnen (in meinem Fall plane ich keine Verbindung über andere Server, daher gebe ich den 25. Port nicht an). Möglicherweise müssen Sie die Portweiterleitung 80, 143, 443, 465, 587, 993 auf dem Router hinzufügen, wenn der Server in einem lokalen Netzwerk verwendet werden soll.
Öffnen wir die Ports 80, 143, 443, 465, 587, 993 in der Firewall:
firewall-cmd --permanent --add-service={http,https,smtps,smtp-submission,imap,imaps} systemctl reload firewalld
Erstellen wir Site-Einstellungen für unseren Domain-Namen, um Zertifikate mit certbot-auto zu verschlüsseln
nano /etc/nginx/conf.d/secureim.example.com.conf server { listen 80; listen [::]:80; server_name secureim.example.com; root /usr/share/nginx/html/; } }
Lassen Sie uns nginx aktivieren und ausführen:
systemctl enable nginx
systemctl start nginx
Installieren Sie 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
Lassen Sie uns Zertifikate für die Site generieren (in Zukunft werden wir sie für die TLS-Verschlüsselung der Verbindung zum Server verwenden):
certbot-auto certonly -a nginx --agree-tos --staple-ocsp --email my_mail@example.com -d secureim.example.com
Zertifikate werden erstellt und ihr Speicherort wird auch in der Konsole angezeigt:
# /etc/letsencrypt/live/secureim.example.com/fullchain.pem
# /etc/letsencrypt/live/secureim.example.com/privkey.pem
Korrigieren Sie die Postfix-Konfigurationsdatei, um den Empfang von Nachrichten an den Ports 465 und 587 zu ermöglichen:
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
Führen Sie die Befehle aus, um den Speicherort des TLS-Zertifikats und des privaten Serverschlüssels anzugeben:
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"
Bei Bedarf können wir die Protokollierung von TLS-Verbindungen aktivieren:
postconf "smtpd_tls_loglevel = 1"
postconf "smtp_tls_loglevel = 1"
Fügen Sie am Ende der Postfix-Konfigurationsdatei die Anforderung hinzu, Protokolle mindestens TLS 1.2 zu verwenden:
nano /etc/postfix/main.cf smtp_tls_mandatory_protocols = >=TLSv1.2 smtp_tls_protocols = >=TLSv1.2
# Postfix aktivieren und ausführen:
systemctl start postfix
systemctl enable postfix
Dovecot installieren, aktivieren und ausführen:
dnf install dovecot -y
systemctl start dovecot
systemctl enable dovecot
Ändern Sie die Dovecot-Konfigurationsdatei, um das IMAP-Protokoll zu aktivieren:
nano /etc/dovecot/dovecot.conf protocols = imap
Konfigurieren Sie den E-Mail-Speicher so, dass Nachrichten in Benutzerordnern gespeichert werden:
nano /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:~/Maildir mail_privileged_group = mail
Fügen Sie Dovecot zur E-Mail-Gruppe hinzu, damit Dovecot eingehende Nachrichten lesen kann:
gpasswd -a dovecot mail
Autorisierung ohne TLS-Verschlüsselung verweigern:
nano /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = yes
Hinzufügen einer automatischen Domainersetzung während der Autorisierung (nur nach Benutzername):
auth_username_format = %n
Lassen Sie uns den Speicherort des Zertifikats, des Schlüssels, den Speicherort der Diffie-Hellman-Schlüsseldatei, die Mindestversion von TLS 1.2 und die Präferenz für die Auswahl von Serververschlüsselungsprotokollen gegenüber dem Client ändern:
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
Lassen Sie uns einen Diffie-Hellman-Schlüssel generieren. Die Schlüsselgenerierung kann lange dauern:
openssl dhparam -out /etc/dovecot/dh.pem 4096
Ändern Sie den Abschnitt "Dienstauthentifizierung", damit Postfix eine Verbindung zum Dovecot-Autorisierungsserver herstellen kann:
nano /etc/dovecot/conf.d/10-master.conf service auth { unix_listener /var/spool/postfix/private/auth { mode = 0600 user = postfix group = postfix } }
Aktivieren Sie die automatische Erstellung von Systemmailordnern (falls wir den Server auch für reguläre Mail verwenden), indem Sie die Zeile auto = create im Abschnitt Mailordner hinzufügen:
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
}
Konfigurieren Sie Dovecot so, dass Nachrichten an den konfigurierten Speicher gesendet werden, indem Sie den Parameter lmtp hinzufügen:
nano /etc/dovecot/dovecot.conf protocols = imap lmtp
Konfigurieren Sie den LMTP-Dienst wie folgt:
nano /etc/dovecot/conf.d/10-master.conf service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } }
Fügen Sie am Ende der Datei die folgenden Einstellungen hinzu, um Postfix anzuweisen, E-Mails über den Dovecot LMTP-Dienst an den lokalen Speicher zu senden. Deaktivieren Sie auch SMTPUTF8, da Dovecot LMTP diese Erweiterung nicht unterstützt:
nano /etc/postfix/main.cf mailbox_transport = lmtp:unix:private/dovecot-lmtp smtputf8_enable = no
Erstellen wir Benutzer, die den Server verwenden, indem wir einen entsprechenden Eintrag im System erstellen und ihm ein Kennwort geben, das für die Autorisierung über SMTP und IMAP verwendet wird:
adduser user1 passwd user1
# Starten Sie Dovecot und Postfix neu:
systemctl restart dovecot systemctl restart postfix
Fügen Sie / etc / crontab eine Aufgabe hinzu, um Zertifikate automatisch zu erneuern:
nano /etc/crontab
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"
In diesem Stadium sollte der Server als Mailserver fungieren, d. H. Sie können eine Verbindung mit einem E-Mail-Client herstellen und versuchen, Briefe an andere Postfächer dieses Servers zu senden und zu empfangen, oder, wenn Sie oben Port 25 geöffnet haben, an andere E-Mail-Server.
Lassen Sie uns nun den Delta Chat-Client auf einem PC und einem Android-Smartphone einrichten.

Um eine Verbindung herzustellen, reicht es aus, die zuvor auf dem Server erstellte E-Mail-Adresse und das Kennwort einzugeben. Delta Chat bestimmt, welche Ports verwendet werden können. Anschließend kann unter Verwendung einer gültigen E-Mail-Adresse ein neuer Kontakt hinzugefügt werden, auch an der E-Mail-Adresse.

Die ersten Nachrichten werden unverschlüsselt gesendet. Zu diesem Zeitpunkt wird der Schlüsselaustausch durchgeführt. Darüber hinaus werden Nachrichten zusätzlich zu TLS verschlüsselt, das für die Datenübertragung und End-to-End-Verschlüsselung verwendet wird. Autocrypt Level 1.
Es ist auch möglich, einen gruppenverifizierten Chat zu erstellen, bei dem alle Nachrichten durchgehend verschlüsselt werden und die Teilnehmer durch Scannen der Einladung mit einem QR-Code beitreten können. Auf diese Weise sind alle Teilnehmer durch eine Kette von Einladungen miteinander verbunden, die eine kryptografische Konsistenz gegen aktive Netzwerkangriffe oder Anbieterangriffe gewährleisten.
Eines der interessantesten Dinge, die ich überprüfen wollte, war zu sehen, wie die Nachricht im Serverspeicher aussieht. Zu diesem Zweck habe ich eine Nachricht an ein inaktives Konto gesendet. In diesem Fall wartet die Nachricht auf dem Server auf ihren Empfänger, und wir, die Zugriff auf den Server haben, können sie anzeigen:
Nachrichteninhalt
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--
Wie Sie sehen können, werden Briefe in verschlüsselter Form auf dem Server gespeichert. Wenn der Server von interessierten Parteien beschlagnahmt wird, sind die Nachrichten nicht gefährdet.
Für eine höhere Zuverlässigkeit können Sie die vollständige Festplattenverschlüsselung des Servers und des Geräts, auf dem der Client ausgeführt wird, sowie Schlüssel verwenden, um über ssh eine Verbindung zum Server herzustellen und sichere, komplexe Kennwörter für E-Mail-Konten zu verwenden.
Fazit
Delta Chat ist eine interessante Alternative für einen selbst gehosteten IM-Messenger, mit dem Sie Nachrichten mithilfe vorhandener E-Mail-Protokolle austauschen können (sodass Sie sich in Zukunft keine Gedanken mehr über das Blockieren machen müssen). Durch den hohen Widerstand gegen das Abfangen von Nachrichten, das Fehlen eines zentralen Servers und die Möglichkeit, diese auf Ihrem Server bereitzustellen, können Sie dies nicht tun Sorgen, dass Ihre Daten in die falschen Hände geraten.
