Messenger IM pribadi dengan enkripsi ujung ke ujung hanya untuk orang dalam

Pada artikel ini, saya memberi tahu Anda cara membuat utusan aman Anda sendiri hanya untuk tempat nongkrong paranoid Anda.



Sekarang ada banyak pengirim pesan IM dengan enkripsi ujung-ke-ujung, tetapi ada lebih sedikit opsi yang dapat Anda gunakan dengan cepat di server Anda.







Saat mempelajari opsi, mata saya tertuju pada Delta Chat, yang telah disebutkan di Habré - utusan tanpa infrastruktur server terpusat, menggunakan server email untuk mengirim pesan, yang memungkinkan Anda untuk menyebarkannya, misalnya, di server rumah Anda dan berkomunikasi dari perangkat, termasuk dengan akses internet.



Di antara keuntungan dari pendekatan ini adalah:



  • Anda mengelola informasi Anda sendiri, termasuk kunci enkripsi.
  • Anda tidak memberikan buku alamat Anda kepada siapa pun.
  • Tidak perlu menggunakan nomor telepon untuk mendaftar.
  • Klien untuk semua sistem populer: Windows, Linux, Android, MacOS, iPhone.
  • Enkripsi STARTTLS / SSL tambahan untuk transmisi pesan yang disediakan oleh server email.
  • Kemampuan untuk mengkonfigurasi penghapusan pesan lama dari perangkat (pesan yang hilang).
  • Kemampuan untuk mengkonfigurasi penghapusan pesan dari server setelah diterima.
  • Pengiriman cepat berkat IMAP push.
  • Obrolan yang dilindungi grup.
  • Dukungan untuk mentransfer file, foto dan video.
  • Server dan klien keduanya open source dan sepenuhnya gratis.


Kerugian yang mungkin terjadi:

  • Tidak ada cara untuk membuat konferensi audio dan video asli.
  • Kebutuhan untuk mengekspor / mengimpor kunci enkripsi untuk menyiapkan satu akun di beberapa perangkat.


Fakta menarik: Roskomnadzor sudah menuntut agar pengembang Delta Chat memberikan akses ke data pengguna, kunci enkripsi dan mendaftar di daftar penyedia negara, yang ditolak oleh Delta Chat, karena tidak memiliki server sendiri dan tidak memiliki akses ke kunci enkripsi.



Enkripsi ujung-ke-ujung



Delta Chat dapat menggunakan koneksi StartTLS atau SSL ke server untuk terhubung ke server, pesan secara default akan dienkripsi sesuai dengan standar Autocrypt Level 1 , setelah pesan pertama dipertukarkan (dikirim dalam bentuk tidak terenkripsi). Jadi, jika komunikasi terjadi antara pengguna satu server, informasi tidak akan dikirim ke server lain, hanya server kami dan perangkat pengguna yang akan sibuk dalam transmisi pesan.



Penyetelan Server



Menyiapkan server untuk Delta Chat dimulai dari menginstal Postfix + Dovecot dengan StartTLS / SSL dikonfigurasi dan menyiapkan data domain.

Saya akan menggunakan CentOS 8 untuk mengkonfigurasi server, mungkin ada perbedaan kecil untuk distribusi lain. Kami memilih parameter server yang sesuai untuk tugas kami.







Di DNS, saya membuat dua data: domain tingkat ketiga adalah domain email dan nama server email:



secureim.example.com A <ip>
secureim MX secureim.example.com
      
      





Mari kita hostname



setel dan instal postfix, dovecot dan nginx (nginx - untuk mendapatkan sertifikat mari enkripsi, wget - untuk menginstal certbot-auto, nano - editor):



hostnamectl set-hostname secureim.example.com
dnf install postfix dovecot nginx wget nano -y
      
      





Mari kita izinkan Postfix untuk menerima email dari luar dan mengkonfigurasi nama host, domain dan asal server, karena domain email dan alamat server sama, domainnya akan sama di mana-mana:



postconf -e "inet_interfaces = all"
postconf -e "myhostname = secureim.example.com"
postconf -e "mydomain = secureim.example.com"
postconf -e "myorigin = secureim.example.com"
      
      





Agar Delta Chat tersedia untuk koneksi dari Internet, Anda perlu membuka port 80, 143, 443, 465, 587, 993. Selain itu, buka port 80, 443 untuk mendapatkan mari mengenkripsi sertifikat dan mengupdatenya di masa mendatang. Jika Anda berencana untuk menerima surat dari server email lain, Anda juga perlu membuka porta 25 (dalam kasus saya, saya tidak berencana untuk terhubung menggunakan server lain, jadi saya tidak menentukan port ke-25). Dan Anda mungkin perlu menambahkan penerusan port 80, 143, 443, 465, 587, 993 di router jika server akan digunakan di jaringan lokal.



Mari buka port 80, 143, 443, 465, 587, 993 di firewall:



firewall-cmd --permanent --add-service={http,https,smtps,smtp-submission,imap,imaps}
systemctl reload firewalld
      
      





Mari buat pengaturan situs untuk nama domain kita untuk mendapatkan mari mengenkripsi sertifikat menggunakan 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/;
      }
}
      
      





Mari aktifkan dan jalankan nginx:



systemctl enable nginx
systemctl start nginx
      
      





Instal 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
      
      





Mari buat sertifikat untuk situs tersebut (di masa mendatang kami akan menggunakannya untuk enkripsi TLS dari koneksi ke server):



certbot-auto certonly -a nginx --agree-tos --staple-ocsp --email my_mail@example.com -d secureim.example.com
      
      





Sertifikat akan dibuat dan lokasinya juga akan ditampilkan di konsol:



#   /etc/letsencrypt/live/secureim.example.com/fullchain.pem
#   /etc/letsencrypt/live/secureim.example.com/privkey.pem
      
      





Perbaiki file konfigurasi Postfix untuk mengizinkan penerimaan pesan pada port 465 dan 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
      
      





Mari jalankan perintah untuk menentukan lokasi sertifikat TLS dan kunci pribadi server:



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"
      
      





Jika perlu, kami dapat mengaktifkan pencatatan koneksi TLS:



postconf "smtpd_tls_loglevel = 1"
postconf "smtp_tls_loglevel = 1"
      
      





Tambahkan persyaratan untuk menggunakan protokol setidaknya TLS 1.2 di akhir file konfigurasi Postfix:



nano /etc/postfix/main.cf
smtp_tls_mandatory_protocols = >=TLSv1.2
smtp_tls_protocols = >=TLSv1.2
      
      





# Hidupkan dan jalankan Postfix:



systemctl start postfix
systemctl enable postfix
      
      





Instal, aktifkan, dan jalankan Dovecot:



dnf install dovecot -y
systemctl start dovecot
systemctl enable dovecot
      
      





Ubah file konfigurasi Dovecot untuk mengaktifkan protokol imap:



nano /etc/dovecot/dovecot.conf
protocols = imap
      
      





Mari konfigurasikan penyimpanan email sehingga pesan disimpan di folder pengguna:



nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
mail_privileged_group = mail
      
      





Tambahkan Dovecot ke grup surat sehingga Dovecot dapat membaca pesan masuk:



gpasswd -a dovecot mail
      
      





Tolak otorisasi tanpa enkripsi TLS:



nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
      
      





Tambahkan penggantian otomatis domain selama otorisasi (hanya dengan nama pengguna):



auth_username_format = %n
      
      





Mari kita ubah lokasi sertifikat, kunci, lokasi file kunci Diffie-Hellman, versi TLS 1.2 minimum, dan preferensi untuk memilih protokol enkripsi server daripada klien:



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
      
      





Mari buat kunci Diffie-Hellman, pembuatan kunci bisa memakan waktu lama:



openssl dhparam -out /etc/dovecot/dh.pem 4096
      
      





Mari kita ubah bagian autentikasi layanan sehingga Postfix dapat terhubung ke server otorisasi Dovecot:



nano /etc/dovecot/conf.d/10-master.conf
service auth {
    unix_listener /var/spool/postfix/private/auth {
      mode = 0600
      user = postfix
      group = postfix
    }
}
      
      





Mari aktifkan pembuatan otomatis folder surat sistem (jika kita menggunakan server untuk surat biasa juga) dengan menambahkan baris auto = create di bagian folder surat:



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
  }
      
      





Mari konfigurasikan Dovecot untuk mengirim pesan ke penyimpanan yang dikonfigurasi dengan menambahkan parameter lmtp:



nano /etc/dovecot/dovecot.conf
protocols = imap lmtp
      
      





Mari konfigurasikan layanan LMTP sebagai berikut:



nano /etc/dovecot/conf.d/10-master.conf
service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
      
      





Tambahkan pengaturan berikut di akhir file untuk memberi tahu Postfix agar mengirim email ke penyimpanan lokal melalui layanan Dovecot LMTP. Nonaktifkan juga SMTPUTF8, karena Dovecot LMTP tidak mendukung ekstensi ini:



nano /etc/postfix/main.cf
mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no
      
      





Mari buat pengguna yang akan menggunakan server dengan membuat entri yang sesuai di sistem dan memberinya kata sandi yang akan digunakan untuk otorisasi melalui smtps dan imaps:



adduser user1
passwd user1
      
      





# Mulai ulang Dovecot dan Postfix:



systemctl restart dovecot
systemctl restart postfix
      
      





Tambahkan tugas ke / etc / crontab untuk memperbarui sertifikat secara otomatis:



nano /etc/crontab
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"
      
      





Pada tahap ini, server harus berfungsi sebagai server email, yaitu. Anda dapat terhubung dengan klien email dan mencoba mengirim dan menerima surat ke kotak surat lain dari server ini, atau jika Anda telah membuka porta 25 di atas, lalu ke server surat lainnya.



Sekarang mari kita siapkan klien Delta Chat di PC dan smartphone Android.







Untuk terhubung, cukup memasukkan alamat email dan kata sandi yang dibuat sebelumnya di server, Delta Chat akan menentukan port mana yang dapat digunakan, setelah itu dimungkinkan untuk menambahkan kontak baru, juga di alamat email, menggunakan alamat email yang valid.







Pesan pertama akan dikirim tanpa enkripsi, pada tahap ini pertukaran kunci sedang berlangsung. Lebih lanjut, pesan akan dienkripsi selain TLS yang digunakan untuk transmisi data, enkripsi ujung-ke-ujung Autocrypt Level 1.



Juga memungkinkan untuk membuat obrolan terverifikasi grup - di mana semua pesan dienkripsi dengan enkripsi ujung ke ujung, dan peserta dapat bergabung dengan memindai undangan dengan kode QR. Dengan cara ini, semua peserta ditautkan satu sama lain melalui rangkaian undangan yang menjamin konsistensi kriptografi terhadap serangan jaringan aktif atau serangan penyedia.



Salah satu hal paling menarik yang ingin saya periksa adalah untuk melihat seperti apa pesan tersebut di penyimpanan server. Untuk melakukan ini, saya mengirim pesan ke akun yang tidak aktif - dalam hal ini, pesan akan menunggu penerima di server, dan kami, yang memiliki akses ke server, akan dapat melihatnya:

Isi pesan
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--




Seperti yang Anda lihat, surat disimpan di server dalam bentuk terenkripsi, dan jika server disita oleh pihak yang berkepentingan, pesan tidak akan berisiko.

Untuk keandalan yang lebih baik, Anda dapat menggunakan enkripsi disk penuh dari server dan perangkat yang menjalankan klien, serta menggunakan kunci untuk menyambung ke server melalui ssh dan menggunakan sandi yang kuat dan rumit untuk akun email.



Kesimpulan



Delta Chat adalah alternatif menarik untuk pengirim pesan IM yang dihosting sendiri, yang memungkinkan Anda bertukar pesan menggunakan protokol email yang ada (yang di masa mendatang memungkinkan Anda tidak perlu khawatir tentang pemblokiran), dan resistensi tinggi terhadap intersepsi pesan, tidak adanya server pusat, dan kemampuan untuk menyebarkan di server Anda, memungkinkan Anda untuk tidak melakukannya. khawatir data Anda jatuh ke tangan yang salah.










All Articles