Persönlicher IM-Messenger mit End-to-End-Verschlüsselung nur für Insider

In diesem Artikel habe ich Ihnen erklärt, wie Sie Ihren eigenen sicheren Messenger nur für Ihren paranoiden Treffpunkt erstellen können.



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.










All Articles