الجزء 3 من S/MIME: التوصيل والتشغيل للبريد الإلكتروني الآمن في الداخل

Bird

01‏/12‏/2019

البريد الإلكتروني

1 min read

الجزء 3 من S/MIME: التوصيل والتشغيل للبريد الإلكتروني الآمن في الداخل

Bird

01‏/12‏/2019

البريد الإلكتروني

1 min read

الجزء 3 من S/MIME: التوصيل والتشغيل للبريد الإلكتروني الآمن في الداخل

في هذا الجزء، سنتناول كيف يمكن تكييف الأداة لإدخال تدفقات البريد إلى المنصات المحلية مثل PowerMTA وMomentum.

في الجزء 1، قمنا بجولة سريعة في S/MIME، للنظر في توقيع وتشفير تدفقات الرسائل لدينا عبر مجموعة من عملاء البريد. بالنسبة للمنظمات التي تقوم بتنفيذ تشفير S/MIME، يصبح فهم كيفية جمع مفاتيح المستلمين العامة بشكل فعّال أمرًا حيويًا لعمليات البريد الإلكتروني الآمنة على نطاق واسع. أخذنا الجزء 2 عبر أداة بسيطة في سطر الأوامر لتوقيع وتشفير الرسائل الإلكترونية، ثم إرسالها من خلال SparkPost.

في هذا الجزء، سننظر في كيفية تكيف الأداة لإدخال تدفقات البريد إلى المنصات الموجودة في المواقع مثل Port25 PowerMTA وMomentum.

حسنًا – لنبدأ!

1. البدء

تثبيت الأداة، والحصول على مفاتيحك إلخ. هو تماماً كما كان من قبل. عند استخدامك نظام البريد الإلكتروني داخل المنشأة مثل PowerMTA أو Momentum، تكون بالفعل مسؤولاً عن إعداد نطاقات الإرسال، مفاتيح DKIM إلخ. تحتاج المنظمات التي تعمل بأنظمة داخل المنشأة أيضاً غالباً إلى معالجة تحديات نظام أرشفة البريد الإلكتروني للامتثال التنظيمي ومتطلبات الاحتفاظ بالبيانات. ما نحتاج إلى القيام به الآن هو توفير بعض الوسائل لإدخال رسائل S/MIME المشُكَّلة بالكامل إلى الخوادم الخاصة بك.

٢. حقن SMTP نحو Port25 PowerMTA

PowerMTA يدعم وسائل مختلفة لإدخال الرسائل، بما في ذلك دليل "التقاط" الملفات، SMTP، وواجهة برمجة التطبيقات. الطريقة المستخدمة هنا هي SMTP.

لتوضيح أَبسط إعداد ممكن، سنقوم بتثبيت أدوات S/MIME على نفس الخادم مع PowerMTA. نحن نقوم بحقن الرسائل إلى المستمع، الذي يكون مفتوحًا افتراضيًا على منفذ TCP 25، ويقبل فقط الحركة المحلية.

export SMTP_HOST=localhost

(إذا نسيت هذه الخطوة، سترى: "لم يتم تعيين المتغير البيئي SMTP_HOST – يتم الإيقاف" عند محاولة التشغيل.)

لدينا مفتاح الإرسال الخاص (steve@thetucks.com.pem) ومفتاح المستقبل العام (steve.tuck@sparkpost.com.crt) حاضر بالفعل. الأسطر القليلة الأولى من ملف الرسالة هي:

إلى: SteveT <steve.tuck@sparkpost.com> من: Steve <steve@thetucks.com> الموضوع: هذه رسالة تم إنشاؤها باستخدام HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

نقوم بإرسال الرسالة باستخدام:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

نرى:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

الرسالة تصل بسرعة إلى صندوق الوارد وتُبلغ في بريد ماك بأنها موقعة ومشفرة.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

ميزة إضافية: DKIM مع PowerMTA

من السهل تكوين DKIM ويتعايش بسعادة مع S/MIME. الخطوات هي:

  • استخدام موقع معالج PowerMTA DKIM لإنشاء مفتاح خاص لنطاق الإرسال (في حالتي، mypmta.thetucks.com.pem) ومحتويات سجل DNS TXT العام.

  • إنشاء سجل DNS TXT، مع محدد مختار. على سبيل المثال، استخدمت المحدد pmta201811. يتم تعريف أحرف محدد صالحة هنا.

  • وضع mypmta.thetucks.com.pem ملف على الخادم في الدليل /etc/pmta .

  • إضافة التالي إلى /etc/pmta/config الخاصة بي وإعادة تشغيل خدمة pmta. (هنا، تُكتب هذه التوجيهات على نطاق عالمي؛ في نظام إنتاج، قد تفضل إضافتها تحت مطّة افتراضية بدلاً من ذلك.)

host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>

يفحص سجل DNS بشكل جيد عبر MX Toolbox، و DKIM نشط الآن.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA يدعم وسائل مختلفة لإدخال الرسائل، بما في ذلك دليل "التقاط" الملفات، SMTP، وواجهة برمجة التطبيقات. الطريقة المستخدمة هنا هي SMTP.

لتوضيح أَبسط إعداد ممكن، سنقوم بتثبيت أدوات S/MIME على نفس الخادم مع PowerMTA. نحن نقوم بحقن الرسائل إلى المستمع، الذي يكون مفتوحًا افتراضيًا على منفذ TCP 25، ويقبل فقط الحركة المحلية.

export SMTP_HOST=localhost

(إذا نسيت هذه الخطوة، سترى: "لم يتم تعيين المتغير البيئي SMTP_HOST – يتم الإيقاف" عند محاولة التشغيل.)

لدينا مفتاح الإرسال الخاص (steve@thetucks.com.pem) ومفتاح المستقبل العام (steve.tuck@sparkpost.com.crt) حاضر بالفعل. الأسطر القليلة الأولى من ملف الرسالة هي:

إلى: SteveT <steve.tuck@sparkpost.com> من: Steve <steve@thetucks.com> الموضوع: هذه رسالة تم إنشاؤها باستخدام HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

نقوم بإرسال الرسالة باستخدام:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

نرى:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

الرسالة تصل بسرعة إلى صندوق الوارد وتُبلغ في بريد ماك بأنها موقعة ومشفرة.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

ميزة إضافية: DKIM مع PowerMTA

من السهل تكوين DKIM ويتعايش بسعادة مع S/MIME. الخطوات هي:

  • استخدام موقع معالج PowerMTA DKIM لإنشاء مفتاح خاص لنطاق الإرسال (في حالتي، mypmta.thetucks.com.pem) ومحتويات سجل DNS TXT العام.

  • إنشاء سجل DNS TXT، مع محدد مختار. على سبيل المثال، استخدمت المحدد pmta201811. يتم تعريف أحرف محدد صالحة هنا.

  • وضع mypmta.thetucks.com.pem ملف على الخادم في الدليل /etc/pmta .

  • إضافة التالي إلى /etc/pmta/config الخاصة بي وإعادة تشغيل خدمة pmta. (هنا، تُكتب هذه التوجيهات على نطاق عالمي؛ في نظام إنتاج، قد تفضل إضافتها تحت مطّة افتراضية بدلاً من ذلك.)

host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>

يفحص سجل DNS بشكل جيد عبر MX Toolbox، و DKIM نشط الآن.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

PowerMTA يدعم وسائل مختلفة لإدخال الرسائل، بما في ذلك دليل "التقاط" الملفات، SMTP، وواجهة برمجة التطبيقات. الطريقة المستخدمة هنا هي SMTP.

لتوضيح أَبسط إعداد ممكن، سنقوم بتثبيت أدوات S/MIME على نفس الخادم مع PowerMTA. نحن نقوم بحقن الرسائل إلى المستمع، الذي يكون مفتوحًا افتراضيًا على منفذ TCP 25، ويقبل فقط الحركة المحلية.

export SMTP_HOST=localhost

(إذا نسيت هذه الخطوة، سترى: "لم يتم تعيين المتغير البيئي SMTP_HOST – يتم الإيقاف" عند محاولة التشغيل.)

لدينا مفتاح الإرسال الخاص (steve@thetucks.com.pem) ومفتاح المستقبل العام (steve.tuck@sparkpost.com.crt) حاضر بالفعل. الأسطر القليلة الأولى من ملف الرسالة هي:

إلى: SteveT <steve.tuck@sparkpost.com> من: Steve <steve@thetucks.com> الموضوع: هذه رسالة تم إنشاؤها باستخدام HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

نقوم بإرسال الرسالة باستخدام:

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

نرى:

Opened SMTP connection (plain)  
Host: localhost  
Port: 25  
User: ""  
Password: ""  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.028 seconds

الرسالة تصل بسرعة إلى صندوق الوارد وتُبلغ في بريد ماك بأنها موقعة ومشفرة.

Email from Avocado showing a marketing message with security features enabled, displayed in Mac Mail as signed and encrypted.

ميزة إضافية: DKIM مع PowerMTA

من السهل تكوين DKIM ويتعايش بسعادة مع S/MIME. الخطوات هي:

  • استخدام موقع معالج PowerMTA DKIM لإنشاء مفتاح خاص لنطاق الإرسال (في حالتي، mypmta.thetucks.com.pem) ومحتويات سجل DNS TXT العام.

  • إنشاء سجل DNS TXT، مع محدد مختار. على سبيل المثال، استخدمت المحدد pmta201811. يتم تعريف أحرف محدد صالحة هنا.

  • وضع mypmta.thetucks.com.pem ملف على الخادم في الدليل /etc/pmta .

  • إضافة التالي إلى /etc/pmta/config الخاصة بي وإعادة تشغيل خدمة pmta. (هنا، تُكتب هذه التوجيهات على نطاق عالمي؛ في نظام إنتاج، قد تفضل إضافتها تحت مطّة افتراضية بدلاً من ذلك.)

host-name thetucks.com
domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem
<domain *>
  dkim-sign yes
</domain>

يفحص سجل DNS بشكل جيد عبر MX Toolbox، و DKIM نشط الآن.

MX Toolbox interface showing successful DKIM record verification with all tests passing for email authentication security.

٣. حقن SMTP نحو Momentum

Momentum يدعم وسائل مختلفة لإدخال الرسائل، بما في ذلك API وSMTP. SMTP هي الطريقة المستخدمة هنا، نحو المضيف الذي يعمل عليه Momentum بالفعل. سنترك تكوينه دون تغيير، حيث أن لديه بالفعل القدرة على قبول الإدخالات الواردة من المضيفين المعتمدين الآخرين.

هذا إصدار أصغر من إعداد الإنتاج، حيث تكون العقد "التوليدية" وعقد MTA منفصلة، لكنها مرتبطة بشكل وثيق عبر VLAN خاص وموازنات التحميل، وتحمل حركة حقن SMTP الداخلية.


Diagram showing email flow from a generation server to on-premises MTA (Mail Transfer Agent) via SMTP protocol.


يتم تثبيت أدوات S/MIME كما كان من قبل، وسنقوم بحقن الرسائل إلى عنوان مضيف SMTP (MTA):

export SMTP_HOST=xx.xx.xx.xx # ضع عنوان MTA / VIP الخاص بك هنا

كما كان من قبل، لدينا المفتاح الخاص للمرسل (steve@thetucks.com.pem) والمفتاح العام للمستلم (steve.tuck@sparkpost.com.crt) موجودين بالفعل على عقدة "التوليد". تتطابق السطور القليلة الأولى من ملف الرسالة مع هذه العناوين.

نرسل الرسالة من عقدة "التوليد" بنفس الأمر تمامًا كما كان من قبل، وتظهر الرسالة في صندوق الوارد.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

كما تتوقع، تتعايش S/MIME أيضاً بسعادة مع توقيع DKIM لMomentum.

4. حقن SMTP باتجاه SparkPost

في الجزء 2 استخدمنا واجهة برمجة التطبيقات (REST API) الخاصة بإرسال SparkPost لحقن الرسائل. بالطبع، من الممكن أيضًا حقن الرسائل في SparkPost باستخدام SMTP. قمنا بضبط متغيرات البيئة كالتالي:

export SMTP_PASSWORD=<<YOUR_API_KEY_HERE>

إذا كنت تستخدم خدمة SparkPost المستضافة في الاتحاد الأوروبي فعليك ضبط SMTP_HOST كـ smtp.eu.sparkpostmail.com.
(انظر هنا لمزيد من الخيارات – على سبيل المثال يمكنك الحقن على المنفذ 2525 بدلاً من 587.)

يوضح الإخراج أدناه أنه يتم استخدام STARTTLS، إلى جانب اسم المستخدم وكلمة المرور.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

سترى:

Opened SMTP connection (STARTTLS)  
Host: smtp.sparkpostmail.com  
Port: 587  
User: "SMTP_Injection"  
Password: "****************************************"  
Sending: tests/fancy-HTML-to-smt.eml  
From: Steve <steve@thetucks.com>  
To: SteveT <steve.tuck@sparkpost.com>  
OK - in 0.057 seconds

يتم طباعة كلمة المرور مع شخصيات *** كبديل، لذلك لا يتم تعريض خصوصية مفتاحك للخطر إذا كان هناك من ينظر إلى كتفك.

تأمين بيانات الاعتماد الخاصة بك

لاحظ أن متغيرات البيئة يمكن إعدادها في ملف نصي للسكربت أو ما شابه، لحفظ إعادة الكتابة. إذا قمت بذلك، يرجى العناية بكلمات المرور/مفاتيح API من خلال تقييد الوصول إلى ذلك الملف لنفسك فقط. على سبيل المثال، إذا تم تسمية ملف إعداد قيمك الائتمانية بـ my_envs.sh، فقم بتشغيل:

chmod 0700 my_envs.sh

تحذيرات متعلقة بـ SMTP قد ترى

حقن SMTP لـ SparkPost صارم جدًا، كما تتوقع من خدمة عامة. إذا لم تقم بضبط رقم منفذ SMTP فسترى تحذيرًا:

{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}

إذا لم تكن قد ضبطت اسم مستخدم SMTP أو لم تضبط كلمة المرور، فسترى:

(530, b'5.7.1 Authorization required. 
Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 
'steve@thetucks.com')

يتم الإبلاغ عن رسائل الخطأ هذه كما هي من مكتبة Python SMTP، لذا فإن التنسيق يأتي كما هو.

أيّهما أسرع – SMTP أم API؟

بصراحة، S/MIME من غير المحتمل أن يكون حالة استخدام ذات حجم كبير، ولكن وجود نفس الأداة مع خيارين للإخراج كان مجرد دعوة لنا لخوض سباق!

ملف اختبار البريد الإلكتروني “Avocado” المستخدم هنا حوالي 19 كيلوبايت. أظهرت إعادة تكرار الاختبارات 10 مرات عبر حلقة bash أن الأوقات المتوسطة كانت مشابهة لـ SMTP وAPI، حوالي 60 ميلي ثانية لكل رسالة، وهو سريع جدًا. في هذه الحالة، قمنا بالحقن من مثيل EC2 متوسط في نفس منطقة الاستضافة مثل SparkPost.com، وهي طريقة جيدة للحفاظ على أوقات التأخير في الشبكة منخفضة.

عند تكرار ذلك مع ملف اختبار أكبر (577 كيلوبايت)، استغرقت API حوالي 200 ميلي ثانية، بينما استغرق SMTP 280 ميلي ثانية لكل رسالة – وهو ما يزال مذهلاً لحجم ملف أكبر بـ 30 مرة. بالطبع، قد يختلف الأداء لديك حسب الموقع، وزحمة الإنترنت وما إلى ذلك، ولكن الأداء من غير المحتمل أن يكون مشكلة.

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

تلخيصًا …

لقد رأينا كيف تم تحديث أداة SparkPost المستندة إلى API المستخدمة في الجزء 2 لدعم حقن SMTP لدعم MTAs المحلية مثل Port25 PowerMTA وMomentum في مجموعة متنوعة من التكوينات، وكذلك مع SparkPost.

هذا كل شيء في الوقت الحالي! نتمنى لك إرسالًا سعيدًا.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

R

وصول

G

نمو

م

إدارة

A

أتمتة

النشرة الإخبارية

ابقَ على اطلاع مع Bird من خلال التحديثات الأسبوعية إلى بريدك الوارد.