برنامج مراسلة IM شخصي مع تشفير شامل للمطلعين فقط

في هذه المقالة ، أخبرتك كيف تصنع برنامج مراسلة آمن خاص بك فقط من أجل جلسة Hangout الخاصة بك بجنون العظمة.



يوجد الآن العديد من برامج المراسلة الفورية المشفرة من طرف إلى طرف ، ولكن هناك خيارات أقل بكثير يمكنك نشرها بسرعة على الخادم الخاص بك.











أثناء دراسة الخيارات ، وقعت عيني على Delta Chat ، الذي تم ذكره بالفعل على Habré - رسول بدون بنية تحتية مركزية للخادم ، باستخدام خوادم البريد لتوصيل الرسائل ، مما يتيح لك نشرها ، على سبيل المثال ، على خادمك المنزلي والتواصل من الأجهزة ، بما في ذلك عدم مع الوصول إلى الإنترنت.



من بين مزايا هذا النهج:



  • أنت تدير معلوماتك بنفسك ، بما في ذلك مفاتيح التشفير.
  • أنت لا تعطي دفتر العناوين الخاص بك لأي شخص.
  • ليست هناك حاجة لاستخدام رقم هاتف للتسجيل.
  • عملاء لجميع الأنظمة الشائعة: Windows و Linux و Android و MacOS و iPhone.
  • تشفير STARTTLS / SSL إضافي لنقل الرسائل الذي يوفره خادم البريد.
  • امكانية تكوين حذف الرسائل القديمة من الجهاز (اختفاء الرسائل).
  • إمكانية تكوين حذف الرسائل من الخادم عند الاستلام.
  • تسليم سريع بفضل IMAP push.
  • مجموعة الدردشات المحمية.
  • دعم نقل الملفات والصور ومقاطع الفيديو.
  • الخادم والعميل مفتوحان المصدر ومجانيان تمامًا.


العيوب المحتملة:

  • لا توجد طريقة لإنشاء مؤتمرات صوت وفيديو أصلية.
  • الحاجة إلى تصدير / استيراد مفاتيح التشفير لإعداد حساب واحد على أجهزة متعددة.


حقيقة مثيرة للاهتمام: طلبت Roskomnadzor بالفعل من مطوري Delta Chat توفير الوصول إلى بيانات المستخدم ومفاتيح التشفير والتسجيل في سجل الحالة لمقدمي الخدمة ، وهو ما رفضته Delta Chat ، لأن ليس لديهم خوادم خاصة بهم وليس لديهم وصول إلى مفاتيح التشفير.



التشفير من طرف إلى طرف



يمكن لـ Delta Chat استخدام اتصال StartTLS أو SSL بالخادم للاتصال بالخادم ، وسيتم تشفير الرسائل افتراضيًا وفقًا لمعيار Autocrypt Level 1 ، بعد تبادل الرسائل الأولى (يتم إرسالها في شكل غير مشفر). وبالتالي ، إذا كان الاتصال بين مستخدمي خادم واحد ، فلن يتم نقل المعلومات إلى خوادم أخرى ، فقط خادمنا وأجهزة المستخدمين ستكون مشغولة في نقل الرسائل.



ضبط الخادم



يأتي إعداد خادم لـ Delta Chat لتثبيت Postfix + Dovecot مع تهيئة StartTLS / SSL وإعداد سجلات المجال.

لتهيئة الخادم ، سأستخدم CentOS 8 ، وقد تكون هناك اختلافات طفيفة في التوزيعات الأخرى. نختار معلمات الخادم المناسبة لمهمتنا .











في DNS ، أنشأت سجلين: نطاق المستوى الثالث سيكون كلاً من مجال البريد واسم خادم البريد:



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





دعنا hostname



نضبط ونثبت postfix و dovecot و nginx (nginx - للحصول على تشفير الشهادات ، wget - لتثبيت certbot-auto، nano - editor):



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





دعنا نسمح لـ Postfix باستلام البريد من الخارج وتهيئة اسم المضيف والمجال وأصل الخادم ، نظرًا لأن نطاق البريد وعنوان الخادم متماثلان ، فسيكون المجال هو نفسه في كل مكان:



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





لكي تكون Delta Chat متاحة للاتصال من الإنترنت ، تحتاج إلى فتح المنافذ 80 ، 143 ، 443 ، 465 ، 587 ، 993. أيضًا ، افتح المنافذ 80 ، 443 لنقوم بتشفير الشهادات وتحديثها في المستقبل. إذا كنت تخطط لتلقي رسائل من خوادم بريد أخرى ، فستحتاج أيضًا إلى فتح المنفذ 25 (في حالتي ، لا أخطط للاتصال باستخدام خوادم أخرى ، لذلك لا أحدد المنفذ 25). وقد تحتاج إلى إضافة إعادة توجيه المنفذ 80 ، 143 ، 443 ، 465 ، 587 ، 993 على جهاز التوجيه إذا كان الخادم سيُستخدم على شبكة محلية.



لنفتح المنافذ 80 ، 143 ، 443 ، 465 ، 587 ، 993 في جدار الحماية:



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





دعونا ننشئ إعدادات الموقع لاسم المجال الخاص بنا من أجل الحصول على تشفير الشهادات باستخدام 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/;
      }
}
      
      





لنقم بتمكين nginx وتشغيله:



systemctl enable nginx
systemctl start nginx
      
      





تثبيت 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
      
      





دعنا ننشئ شهادات للموقع (سنستخدمها في المستقبل لتشفير TLS للاتصال بالخادم):



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





سيتم إنشاء الشهادات وسيتم أيضًا عرض مواقعها في وحدة التحكم:



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





قم بتصحيح ملف تكوين Postfix للسماح باستلام الرسائل على المنفذين 465 و 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
      
      





لنقم بتشغيل الأوامر لتحديد موقع شهادة TLS والمفتاح الخاص للخادم:



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"
      
      





إذا لزم الأمر ، يمكننا تمكين تسجيل اتصالات TLS:



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





أضف متطلبات استخدام البروتوكولات TLS 1.2 على الأقل في نهاية ملف تكوين Postfix:



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





# تمكين وتشغيل Postfix:



systemctl start postfix
systemctl enable postfix
      
      





تثبيت وتمكين وتشغيل Dovecot:



dnf install dovecot -y
systemctl start dovecot
systemctl enable dovecot
      
      





قم بتعديل ملف تكوين Dovecot لتمكين بروتوكول imap:



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





لنقم بتهيئة تخزين البريد بحيث يتم حفظ الرسائل في مجلدات المستخدم:



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





أضف Dovecot إلى مجموعة البريد حتى يتمكن Dovecot من قراءة الرسائل الواردة:



gpasswd -a dovecot mail
      
      





رفض التفويض بدون تشفير TLS:



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





أضف الاستبدال التلقائي للنطاق أثناء التفويض (فقط باسم المستخدم):



auth_username_format = %n
      
      





دعنا نغير موقع الشهادة والمفتاح وموقع ملف مفتاح Diffie-Hellman والحد الأدنى من إصدار TLS 1.2 وتفضيل اختيار بروتوكولات تشفير الخادم على العميل:



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
      
      





دعنا ننشئ مفتاح Diffie-Hellman ، يمكن أن يستغرق إنشاء المفتاح وقتًا طويلاً:



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





دعنا نغير قسم مصادقة الخدمة بحيث يمكن لـ Postfix الاتصال بخادم ترخيص Dovecot:



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





لنقم بتمكين الإنشاء التلقائي لمجلدات بريد النظام (في حالة استخدام الخادم للبريد العادي أيضًا) عن طريق إضافة سطر auto = create في قسم مجلدات البريد:



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
  }
      
      





لنقم بتكوين Dovecot لتسليم الرسائل إلى وحدة التخزين المكونة عن طريق إضافة معلمة lmtp:



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





لنقم بتكوين خدمة LMTP على النحو التالي:



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





أضف الإعدادات التالية إلى نهاية الملف لإخبار Postfix بتسليم البريد إلى وحدة التخزين المحلية عبر خدمة Dovecot LMTP. قم أيضًا بتعطيل SMTPUTF8 ، نظرًا لأن Dovecot LMTP لا يدعم هذا الامتداد:



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





لننشئ المستخدمين الذين سيستخدمون الخادم عن طريق إنشاء إدخال مطابق في النظام وإعطائه كلمة مرور تستخدم للترخيص عبر smtps و imaps:



adduser user1
passwd user1
      
      





# إعادة تشغيل Dovecot و Postfix:



systemctl restart dovecot
systemctl restart postfix
      
      





أضف مهمة إلى / etc / crontab لتجديد الشهادات تلقائيًا:



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





في هذه المرحلة ، يجب أن يعمل الخادم كخادم بريد ، أي يمكنك الاتصال بعميل البريد ومحاولة إرسال واستقبال الرسائل إلى صناديق البريد الأخرى لهذا الخادم ، أو إذا فتحت المنفذ 25 أعلاه ، ثم إلى خوادم البريد الأخرى.



لنقم الآن بإعداد عميل Delta Chat على جهاز كمبيوتر وهاتف ذكي يعمل بنظام Android.











للاتصال ، يكفي إدخال عنوان البريد وكلمة المرور اللذين تم إنشاؤهما مسبقًا على الخادم ، ستحدد Delta Chat المنافذ التي يمكن استخدامها ، وبعد ذلك سيكون من الممكن إضافة جهة اتصال جديدة ، أيضًا عن طريق عنوان البريد الإلكتروني ، باستخدام عنوان بريد صالح.











سيتم إرسال الرسائل الأولى بدون تشفير ، وفي هذه المرحلة يكون تبادل المفاتيح قيد التقدم. علاوة على ذلك ، سيتم تشفير الرسائل بالإضافة إلى TLS المستخدمة لنقل البيانات ، والتشفير من طرف إلى طرف Autocrypt المستوى 1.



ومن الممكن أيضًا إنشاء محادثة جماعية تم التحقق منها - حيث يتم تشفير جميع الرسائل من طرف إلى طرف ، ويمكن للمشاركين الانضمام عن طريق مسح الدعوة باستخدام رمز QR. وبهذه الطريقة ، يتم ربط جميع المشاركين ببعضهم البعض من خلال سلسلة من الدعوات التي تضمن اتساق التشفير ضد هجمات الشبكة النشطة أو هجمات المزود.



كان أحد أكثر الأشياء إثارة للاهتمام التي أردت التحقق منها هو رؤية شكل الرسالة في متجر الخادم. للقيام بذلك ، قمت بإرسال رسالة إلى حساب غير نشط - في هذه الحالة ، ستنتظر الرسالة مستلمها على الخادم ، وسنكون قادرين على عرضه ، بعد أن يكون لدينا وصول إلى الخادم:

محتوى الرسالة
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--




كما ترى ، يتم تخزين الرسائل على الخادم بشكل مشفر ، وإذا تم الاستيلاء على الخادم من قبل الأطراف المهتمة ، فلن تكون الرسائل في خطر.

لمزيد من الموثوقية ، يمكنك استخدام تشفير القرص الكامل للخادم والجهاز الذي يعمل عليه العميل ، بالإضافة إلى استخدام المفاتيح للاتصال بالخادم عبر ssh واستخدام كلمات مرور قوية ومعقدة لحسابات البريد.



خاتمة



تعد Delta Chat بديلاً مثيرًا للاهتمام لبرنامج المراسلة الفورية المستضاف ذاتيًا ، والذي يسمح لك بتبادل الرسائل باستخدام بروتوكولات البريد الحالية (والتي تسمح لك في المستقبل بعدم القلق بشأن الحظر) ، والمقاومة العالية لاعتراض الرسائل ، وعدم وجود خادم مركزي والقدرة على النشر على الخادم الخاص بك ، يسمح لك بعدم القيام بذلك. تقلق بشأن وقوع بياناتك في الأيدي الخطأ.










All Articles